Пример #1
0
EXPORT int update_abp_acct_code(ABP_DBHANDLE dbhandle, ABP_ACCT_CODE acct_code)
{
  int retval, rowcount;
  Arb_connection *connection;

  if (WRONG_OBJ_TYPE(acct_code, ACCT_CODE))
    return ABP_ARGERR;
  if (NotCustDbhandle(dbhandle))
    return ABP_ARGERR;
  connection = dbhandle->cust_connection;
  ((ABP_ERR_DATA *)connection->user_data)->is_set = FALSE;
  /* The only updatable field is display_value--acg_tracking_id, acg_tracking_id_serv, and account_code are keys which must be set */
  if (!IsSet(cmf_account_codes_acg_tracking_id,acct_code->cmf_account_codes_data)) {
	abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "acg_tracking_id");
	return ABP_MISC_ERR;
  }
  if (IsNull(cmf_account_codes_acg_tracking_id_serv, acct_code->cmf_account_codes_data)) {
	abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "acg_tracking_id_serv");
	return ABP_MISC_ERR;
  }
  if (IsNotSet(cmf_account_codes_acg_tracking_id_serv, acct_code->cmf_account_codes_data))  /*default it to current cust server id */
	set_abp_acct_code_acg_tracking_id_serv(acct_code, dbhandle->cust_server_id);
  if (!IsSet(cmf_account_codes_account_code,acct_code->cmf_account_codes_data)) {
	abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "account_code");
	return ABP_MISC_ERR;
  }
  if (IsNotSet(cmf_account_codes_display_value, acct_code->cmf_account_codes_data)) { 
  /* Although display_value disallows null, we'll allow it.
	We'll give them a dberror rather than a misc.error */
	abp_put_misc_message(connection, ABP_NO_FIELD_UPDATED, "acct_code");
	return ABP_MISC_ERR;
  }
  if ((retval = abp_begin_transaction_inner(dbhandle, "abp_update_acct_code"))
      != ABP_STATUS_OK)
    return ABP_DBERR;
  if (update_cmf_account_codes(connection, acct_code->cmf_account_codes_data)==FAILURE) {
	retval = ABP_DBERR;
	goto rollback;
  }
  rowcount = arb_dbcount(connection);
  if (rowcount == 0) {
	abp_put_misc_message(connection, ABP_ROW_NOT_FOUND, "CMF_ACCOUNT_CODES");
	retval = ABP_MISC_ERR;
	goto rollback;
  }
  if (rowcount >1) {
	abp_put_misc_message(connection, ABP_ROW_NOT_UNIQUE, "CMF_ACCOUNT_CODES");
	retval = ABP_MISC_ERR;
	goto rollback;
  }
  return abp_commit_transaction_inner(dbhandle, "abp_update_acct_code");
 rollback:
  abp_roll_back_transaction_inner(dbhandle, "abp_update_acct_code");
  return retval;
}
Пример #2
0
EXPORT int update_abp_acct_icb_rate(ABP_DBHANDLE dbhandle, ABP_ACCT_ICB_RATE acct_icb_rate)
{
  int retval, rowcount;
  Arb_connection *connection;
  PRODUCT_RATE_OVERRIDE_DATA *cpod;

  if (WRONG_OBJ_TYPE(acct_icb_rate, ACCT_ICB_RATE))
    return ABP_ARGERR;
  if (NotCustDbhandle(dbhandle))
    return ABP_ARGERR;
  connection = dbhandle->cust_connection;
  ((ABP_ERR_DATA *)connection->user_data)->is_set = FALSE;
  
  cpod = acct_icb_rate->product_rate_override_data; 

  /* Only three fields updatable are override_rate, currency_code and inactive_dt*/
  if (!(IsSet(product_rate_override_override_rate,cpod)) &&
	!(IsSet(product_rate_override_currency_code, cpod)) &&
  	IsNotSet(product_rate_override_inactive_dt,cpod)) {
	abp_put_misc_message(connection , ABP_NO_FIELD_UPDATED, "acct_icb_rate");
	return ABP_MISC_ERR;
   }

  if ((retval = abp_begin_transaction_inner(dbhandle, "abp_update_acct_icb_rate"))
      != ABP_STATUS_OK)
    return ABP_DBERR;
  arb_setup_results(&proc_api_update_acct_icb_rate,  ARB_TYPE_INT32, &rowcount);
  arb_setup_proc_exec(connection,&proc_api_update_acct_icb_rate, SQL_DEFER_EXECUTE,
		"tracking_id", cpod->tracking_id, ARG_NOT_NULL,
		"tracking_id_serv", cpod->tracking_id_serv, ARG_NOT_NULL,
		"override_rate", &(cpod->override_rate), IsSet(product_rate_override_override_rate, cpod) ? ARG_NOT_NULL : ARG_IS_NULL,
		"currency_code", cpod->currency_code, IsSet(product_rate_override_currency_code, cpod) ? ARG_NOT_NULL : ARG_IS_NULL,
		"start_dt", &(cpod->active_dt), ARG_NOT_NULL,
		"end_dt", &(cpod->inactive_dt), IsSet(product_rate_override_inactive_dt, cpod) ? ARG_NOT_NULL : ARG_IS_NULL, 
		"update_end_dt_flag",IsNotSet(product_rate_override_inactive_dt, cpod) ? 0 : 1, ARG_NOT_NULL, NO_MORE_ARGS);
  while (arb_next_row(connection) == ARB_MORE_DATA)
	;
  if (arb_query_status(connection) == FAILURE) {
	retval = ABP_DBERR;
	goto rollback;
  }

  if ((rowcount > 1) || (rowcount ==0)) {
	abp_put_misc_message(connection, rowcount ? ABP_ROW_NOT_UNIQUE : ABP_ROW_NOT_FOUND, "PRODUCT_RATE_OVERRIDE");
	retval = ABP_MISC_ERR;
	goto rollback;
  }
  
  return abp_commit_transaction_inner(dbhandle, "abp_update_acct_icb_rate");
 rollback:
  abp_roll_back_transaction_inner(dbhandle, "abp_update_acct_icb_rate");
  return retval;
}
Пример #3
0
Substyle::~Substyle()
{
	if (IsNotSet())
		return;
	if (IsCurrency())
		delete AsCurrency();
	else if (IsDate())
		delete AsDate();
	else if (IsDuration())
		delete AsDuration();
	else if (IsPercent())
		delete AsPercent();
}
Пример #4
0
void
Value::DeleteData()
{
	if (IsNotSet())
		return;
	if (IsDouble() || IsPercentage())
		delete AsDouble();
	else if (IsString())
		delete AsString();
	else if (IsDate())
		delete AsDate();
	else if (IsDuration())
		delete AsDuration();
	data_ = nullptr;
	type_ = ods::Type::NotSet;
}
Пример #5
0
QString
Value::toString() const
{
	if (IsNotSet())
		return QLatin1String("");
	
	if (IsDouble() || IsPercentage())
		return QString::number(*AsDouble());
	if (IsString())
		return *AsString();
	if (IsDate())
		return AsDate()->toString(Qt::ISODate);
	if (IsCurrency())
		mtl_qline("Currency not supported yet");
	if (IsDuration())
		return AsDuration()->ToString();
	
	return QLatin1String("");
}
Пример #6
0
void
Value::CopyTo(ods::Value &v)
{
	v.type_set(type_);
	if (IsNotSet())
		return;
	if (IsDouble())
		v.SetDouble(*AsDouble());
	else if (IsString())
		v.SetString(*AsString());
	else if (IsCurrency())
		v.SetCurrency(*AsCurrency());
	else if (IsPercentage())
		v.SetPercentage(*AsPercentage());
	else if (IsDate())
		v.SetDate(*AsDate());
	else if (IsDuration())
		v.SetDuration(*AsDuration());
	else
		mtl_warn("Not implemented");
}
Пример #7
0
/* DENqa39707*/
EXPORT int update_abp_serv_inst_product_by_date(ABP_DBHANDLE dbhandle, 
				 ABP_SERV_INST_PRODUCT serv_inst_product,
                                 ABP_LOCSTR *a_effective_date)
{
  int 	retval;
  PRODUCT_VIEW_DATA *pvd, *dpvd;
  PRODUCT_KEY_DATA *pkd;
  CUSTOMER_ID_EQUIP_MAP_DATA *cid;
  CUSTOMER_ID_ACCT_MAP_DATA *cida;
  Arb_connection *connection;
  ABP_SERV_INST_PRODUCT this_serv_inst_product;
  Arb_numeric view_id;

  if (NotCustDbhandle(dbhandle))
    return ABP_ARGERR;
  connection = dbhandle->cust_connection;

  ((ABP_ERR_DATA *)connection->user_data)->is_set = FALSE;


  if (WRONG_OBJ_TYPE(serv_inst_product, SERV_INST_PRODUCT))
    return ABP_ARGERR;

  pkd = serv_inst_product->product_key_data;
  pvd = serv_inst_product->product_view_data;
  cid = serv_inst_product->customer_id_equip_map_data;
  cida = serv_inst_product->customer_id_acct_map_data[0];

  /* Error if the user tries to set component_id and prev_product_inactive_dt.
   */
  if (IsSet (product_view_component_id, pvd))
  {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "component_id");
      return ABP_MISC_ERR;
  }

  if (IsSet (product_view_connect_reason, pvd))
  {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "connect_reason");
      return ABP_MISC_ERR;
  }

  if (IsSet (product_view_prev_product_inactive_dt, pvd))
  {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "prev_end_dt");
      return ABP_MISC_ERR;
  }

  /*DENqa13075, a product cannot be directly transferred, so parent_account_no and parent_subscr_no cannot be updated*/
/*  if (get_abp_serv_inst_product_external_account_no(serv_inst_product,
                                                    &a_external_id) == ABP_SET) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "external_account_no");
      return ABP_MISC_ERR;
  }*/

  /* Likewise for CUSTOMER_ID_EQUIP_MAP and subscr no */
/*  if (get_abp_serv_inst_product_external_id(serv_inst_product,
                                                  &a_external_id) == ABP_SET) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "external_id");
      return ABP_MISC_ERR;
   }*/

/*DENqa13075, billing_account_no and open_item_id cannot be updated */
 /* if (get_abp_serv_inst_product_external_account_no_bill_rc(serv_inst_product, &a_external_id) == ABP_SET)
  {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "external_account_no_bill_rc");
      return ABP_MISC_ERR;
  }

  if (IsSet(product_view_open_item_id, pvd))
  {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "open_item_id");
      return ABP_MISC_ERR;
  }*/

  /* Check that tracking_id is set -- no update without tracking_id */
  if (!(IsSet(product_key_tracking_id, pkd))) {
        abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "tracking_id");
        return ABP_MISC_ERR;
  }
  set_product_view_tracking_id(pvd, pkd->tracking_id);
  if (IsNotSet(product_key_tracking_id_serv, pkd)) /* default this to current cust_server_id */
        set_abp_serv_inst_product_tracking_id_serv(serv_inst_product, dbhandle->cust_server_id);
  if (IsNull(product_key_tracking_id_serv,pkd)) { /* If they take the trouble to null out tracking_id_serv, we spit at them*/
        abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "tracking_id_serv");
        return ABP_MISC_ERR;
  }
  set_product_view_tracking_id_serv(pvd, pkd->tracking_id_serv);

  this_serv_inst_product = new_abp_serv_inst_product();
  if (this_serv_inst_product == NULL)
      return ABP_SYSERR;

  /* DENqa39707*/
  retval = select_abp_serv_inst_product_by_date(dbhandle, pvd->tracking_id, pvd->tracking_id_serv, this_serv_inst_product, a_effective_date);
  if (retval<0) {
     delete_abp_serv_inst_product(this_serv_inst_product);
     return retval;
  }
  else if (retval == 0) {
     delete_abp_serv_inst_product(this_serv_inst_product);
     abp_put_misc_message(connection, ABP_ROW_NOT_FOUND, "PRODUCT_VIEW/CUSTOMRE_ID_EQUIP_MAP");
     return ABP_MISC_ERR;
  }
  else if (retval > 1) {
     delete_abp_serv_inst_product(this_serv_inst_product);
     abp_put_misc_message(connection, ABP_ROW_NOT_UNIQUE, "PRODUCT_VIEW/CUSTOMRE_ID_EQUIP_MAP");
     return ABP_MISC_ERR;
  }

  dpvd = this_serv_inst_product->product_view_data;

  /* Can't update has_product_keys, this field is managed by DB trigger */
  Unset(product_view_has_product_keys, pvd);
  Unset(product_view_has_overrides, pvd);

  update_copy_product_view(dpvd, pvd);

  if (IsSet(product_view_product_active_dt, dpvd))
    truncate_Arbdate(&(dpvd->product_active_dt));
  if (IsSet(product_view_product_inactive_dt, dpvd))
    truncate_Arbdate(&(dpvd->product_inactive_dt));

  Unset(product_view_view_created_dt, dpvd);
  Unset(product_view_view_effective_dt, dpvd);
  Unset(product_view_intended_view_effective_dt, dpvd);
  Unset(product_view_chg_dt, dpvd);

  if ((retval = get_view_id(dbhandle, "PRODUCT_VIEW", dbhandle->cust_server_id, &view_id)) != ABP_STATUS_OK)
  {
      if (this_serv_inst_product != NULL)
          delete_abp_serv_inst_product(this_serv_inst_product);
      return retval;
  }

  set_product_view_prev_view_id(dpvd, &(dpvd->view_id));
  set_product_view_view_id(dpvd, &view_id);
  set_product_view_view_status(dpvd, CURRENT_STATUS);
  set_product_view_chg_who(dpvd, "API");

  if ((retval = abp_begin_transaction_inner(dbhandle, 
				      "abp_update_serv_inst_product")) 
      != ABP_STATUS_OK)
  {
      if (this_serv_inst_product != NULL)
          delete_abp_serv_inst_product(this_serv_inst_product);
    return retval;  
   }
  if (insert_into_product_view(connection, dpvd) == FAILURE)
        retval = ABP_DBERR;
  if (arb_query_status(connection) != SUCCESS)
        retval = ABP_DBERR;
  if (retval == ABP_STATUS_OK){
    if ( IsSet(product_key_converted, pkd) || IsSet(product_key_arch_flag, pkd))
    {
       if (update_product_key(connection, pkd) == FAILURE)
          retval = ABP_DBERR;
       if (arb_query_status(connection) != SUCCESS)
          retval = ABP_DBERR;
    }
  }
  if (retval == ABP_STATUS_OK)
    retval = abp_commit_transaction_inner(dbhandle, "abp_update_serv_inst_product");
  else
    abp_roll_back_transaction_inner(dbhandle, "abp_update_serv_inst_product");
  if (this_serv_inst_product != NULL)
     delete_abp_serv_inst_product(this_serv_inst_product);
  return retval;
}
Пример #8
0
EXPORT int update_abp_acct_product_by_date(ABP_DBHANDLE dbhandle, ABP_ACCT_PRODUCT acct_product, ABP_LOCSTR *a_effective_date)
{
  int retval;
  Arb_connection *connection;
  PRODUCT_VIEW_DATA *pvd, *dpvd;
  PRODUCT_KEY_DATA *pkd;
  CUSTOMER_ID_ACCT_MAP_DATA *cid, *cid_bill_rc;
  ABP_ACCT_PRODUCT orig_acct_product = NULL;
  short default_xid_type = 0;
  int tracking_id;
  unsigned char tracking_id_serv;
  Arb_numeric view_id;

  if (WRONG_OBJ_TYPE(acct_product, ACCT_PRODUCT))
    return ABP_ARGERR;
  if (NotCustDbhandle(dbhandle))
    return ABP_ARGERR;
  connection = dbhandle->cust_connection;
  ((ABP_ERR_DATA *)connection->user_data)->is_set = FALSE;
  pvd = acct_product->product_view_data;
  pkd = acct_product->product_key_data;
  cid = acct_product->customer_id_acct_map_data[0];
  cid_bill_rc = acct_product->customer_id_acct_map_data[1];

  if (IsSet(product_view_connect_reason, pvd)) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "connect_reason");
      return ABP_MISC_ERR;
  }

  if (IsSet(product_view_prev_product_inactive_dt, pvd)) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "prev_end_dt");
      return ABP_MISC_ERR;
  }

  /* This is probably not a good idea, but we let them change account_no or account_no_bill_rc---If this is improper,
  the database should be enforcing the data integrity, not the API */
  /*DENqa13075, a product cannot be directly transferred, so parent_account_no cannot be updated*/
/*  if (IsSet(customer_id_acct_map_external_id, cid)) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "external_id");
      return ABP_MISC_ERR;
  }*/

   /* N.B. If external_id or external_id_account_no_bill_rc are not set then the account number fields will be ignored.
   This is true regardless of the value specified for external_id_type or external_id_type_bill_rc */
/*DENqa13075, external_id_account_no_bill_rc and open_item_id cannot be updated no longer*/
 /* if (IsSet(customer_id_acct_map_external_id, cid_bill_rc)) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "external_id_account_no_bill_rc");
      return ABP_MISC_ERR;
   }
  if (IsSet(product_view_open_item_id, pvd)) {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "open_item_id");
      return ABP_MISC_ERR;
   }*/

  /* Check that tracking_id is set -- no update without tracking_id */
  if (!(IsSet(product_key_tracking_id, pkd))) {
	abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "tracking_id");
	return ABP_MISC_ERR;
  }

  /*set_product_view_tracking_id(pvd,pkd->tracking_id);*/
  if (IsNotSet(product_key_tracking_id_serv, pkd)) /* default this to current cust_server_id */
	set_abp_acct_product_tracking_id_serv(acct_product, dbhandle->cust_server_id);
  if (IsNull(product_key_tracking_id_serv,pkd)) { /* If they take the trouble to null out tracking_id_serv, we spit at them */
	abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "tracking_id_serv");
	return ABP_MISC_ERR;
  }
  /*set_product_view_tracking_id_serv(pvd, pkd->tracking_id_serv);*/

  /* Error if the user tries to set component_id.
   */
  if (IsSet (product_view_component_id, pvd))
  {
      abp_put_misc_message (connection, ABP_RANGE_ERR, "component_id");
      return ABP_MISC_ERR;
  }

  orig_acct_product = new_abp_acct_product();
  if (orig_acct_product == NULL)
       return ABP_SYSERR;
  retval = select_abp_acct_product_by_date(dbhandle,pvd->tracking_id,pvd->tracking_id_serv, orig_acct_product, a_effective_date);
  if (retval < 0) {
        delete_abp_acct_product(orig_acct_product);
        return retval;
  }
  if (retval ==0) {
        delete_abp_acct_product(orig_acct_product);
        abp_put_misc_message(connection,ABP_ROW_NOT_FOUND, "PRODUCT_VIEW");
        return ABP_MISC_ERR;
  }
  if (retval > 1) {
        delete_abp_acct_product(orig_acct_product);
        abp_put_misc_message(connection,ABP_ROW_NOT_UNIQUE, "PRODUCT_VIEW");
        return ABP_MISC_ERR;
  }

  dpvd = orig_acct_product->product_view_data;

  /* Can't update sales_channel_id */
  /* Unset(cmf_products_sales_channel_id, cmfp); */

  /* Can't update has_product_keys,has_overrides, this field is managed by DB trigger */
  Unset(product_view_has_product_keys, pvd);
  Unset(product_view_has_overrides, pvd);

  get_abp_acct_product_tracking_id(acct_product, &tracking_id);
  get_abp_acct_product_tracking_id_serv(acct_product, &tracking_id_serv);
  Unset(product_view_tracking_id, pvd);
  Unset(product_view_tracking_id_serv, pvd);
  Unset(product_key_tracking_id, pkd);
  Unset(product_key_tracking_id_serv, pkd);
  /* Check that some field is set or NULL in cmf_products_data --otherwise raise a misc error and return */
  if (!HasSetFields(acct_product,product_view) && !HasSetFields(acct_product,product_key)) {
                if (orig_acct_product != NULL) 
                     delete_abp_acct_product(orig_acct_product);
		abp_put_misc_message(connection, ABP_NO_FIELD_UPDATED, "acct_product");
		return ABP_MISC_ERR;
  }

  /* Put a transaction here to force a rollback in case row is not unique */
 if ((retval = abp_begin_transaction_inner(dbhandle, "abp_update_acct_product")) != ABP_STATUS_OK)
{ 
          if (orig_acct_product != NULL)
          delete_abp_acct_product(orig_acct_product);
        return retval;
 }

   if (HasSetFields(acct_product,product_view))
  {
   set_abp_acct_product_tracking_id(acct_product, tracking_id);
   set_abp_acct_product_tracking_id_serv(acct_product, tracking_id_serv);

   update_copy_product_view(dpvd, pvd);

   Unset(product_view_view_created_dt, dpvd);
   Unset(product_view_view_effective_dt, dpvd);
   Unset(product_view_intended_view_effective_dt, dpvd);
   Unset(product_view_chg_dt, dpvd);

   if ((retval = get_view_id(dbhandle, "PRODUCT_VIEW", dbhandle->cust_server_id, &view_id)) != ABP_STATUS_OK)
   {
      if (orig_acct_product != NULL)
          delete_abp_acct_product(orig_acct_product);
      return retval;
   }

   set_product_view_prev_view_id(dpvd, &(dpvd->view_id));
   set_product_view_view_id(dpvd, &view_id);
   set_product_view_view_status(dpvd, CURRENT_STATUS);
   set_product_view_chg_who(dpvd, "API");

   if (insert_into_product_view(connection, dpvd) == FAILURE)
	retval = ABP_DBERR;
   if (arb_query_status(connection) != SUCCESS)
	retval = ABP_DBERR;
   }

   if (retval == ABP_STATUS_OK){
    if ( IsSet(product_key_converted, pkd) || IsSet(product_key_arch_flag, pkd))
    {
      set_abp_acct_product_tracking_id(acct_product, tracking_id);
      set_abp_acct_product_tracking_id_serv(acct_product, tracking_id_serv);

       if (update_product_key(connection, pkd) == FAILURE)
          retval = ABP_DBERR;
       if (arb_query_status(connection) != SUCCESS)
          retval = ABP_DBERR;
    }
   }
  if (retval != ABP_STATUS_OK) {
	abp_roll_back_transaction_inner(dbhandle, "abp_update_acct_product");
  }
  else 
	retval = abp_commit_transaction_inner(dbhandle, "abp_update_acct_product");
  if (orig_acct_product != NULL)
      delete_abp_acct_product(orig_acct_product);
  return retval;
}
Пример #9
0
static int really_list_abp_tax_icb_rates(ABP_DBHANDLE dbhandle, ABP_TAX_ICB_RATE keys, ABP_TAX_ICB_RATE *list, int active_only, char *pstrOrder, char *szeffective_date)
{
  int status, use_where = TRUE, retval = 0;
  Arb_connection *dbcon;
  ABP_TAX_ICB_RATE databuf = new_abp_tax_icb_rate(), new_tax_icb_rate;
  ABP_TAX_ICB_RATE lb = NULL;
  ABP_TAX_ICB_RATE ub = NULL;
  int nfields;
  int inb, j, offset;
  short *nbbuf, xid_type;
  Arb_date effective_date;

  if (databuf == NULL)
    return ABP_SYSERR;

  if (keys && WRONG_OBJ_TYPE(keys, API_TAX_ICB_RATE)) {
    delete_abp_tax_icb_rate(databuf);
    return ABP_ARGERR;
  }

  if ((szeffective_date != NULL) && (*szeffective_date != '\0'))
    api_string_to_Arbdate(szeffective_date, &effective_date, 0);

  if (keys) {
    lb = keys;
    ub = next_abp_tax_icb_rate(lb);
    if (ub && WRONG_OBJ_TYPE(ub, API_TAX_ICB_RATE)) {
      delete_abp_tax_icb_rate(databuf);
      return ABP_ARGERR;
    }
    if (ub == NULL) {
      ub = lb;
    }
    else if (next_abp_tax_icb_rate(ub) != NULL) {
      delete_abp_tax_icb_rate(databuf);
      return ABP_ARGERR;
    }
  }
  if (NotCustDbhandle(dbhandle)) {
    delete_abp_tax_icb_rate(databuf);
    return ABP_ARGERR;
  }
  dbcon = dbhandle->cust_connection;

  nfields = sizeof(databuf->tax_univ_icb_data->bitfields) + sizeof(databuf->customer_id_acct_map_data->bitfields);
  nbbuf = (short *)calloc(nfields, sizeof(short));
  if (nbbuf == NULL) {
    delete_abp_tax_icb_rate(databuf);
    return ABP_SYSERR;
  }
  if ((retval = find_default_external_id_type(dbcon, &xid_type))
       != ABP_STATUS_OK)
    return retval;
  arb_dbfcmd(dbcon, "SELECT * from ");
  arb_dbfcmd(dbcon, "TAX_UNIV_ICB");
  arb_dbfcmd(dbcon, ", CUSTOMER_ID_ACCT_MAP");
  arb_dbfcmd(dbcon, " WHERE TAX_UNIV_ICB.account_no = CUSTOMER_ID_ACCT_MAP.account_no" );
  if (!keys || (IsNotSet(customer_id_acct_map_external_id_type, lb->customer_id_acct_map_data)
                && IsNotSet(customer_id_acct_map_external_id_type, ub->customer_id_acct_map_data))) {
    arb_dbfcmd(dbcon, " AND CUSTOMER_ID_ACCT_MAP.external_id_type = %d", xid_type);
  }
  if ((szeffective_date != NULL) && (*szeffective_date != '\0')) {
    arb_dbfcmd(dbcon, " AND CUSTOMER_ID_ACCT_MAP.active_date <= %t AND (CUSTOMER_ID_ACCT_MAP.inactive_date is NULL OR CUSTOMER_ID_ACCT_MAP.inactive_date > %t) ", &effective_date, &effective_date);
  }
  else {
    arb_dbfcmd(dbcon, " AND CUSTOMER_ID_ACCT_MAP.active_date <= %s AND (CUSTOMER_ID_ACCT_MAP.inactive_date is NULL OR CUSTOMER_ID_ACCT_MAP.inactive_date > %s) ", arb_server_getdate(), arb_server_getdate());
  }
  if (active_only) {
    arb_dbfcmd(dbcon, " AND TAX_UNIV_ICB.active_date <= %s AND (TAX_UNIV_ICB.inactive_date is NULL OR TAX_UNIV_ICB.inactive_date > %s) ", arb_server_getdate(), arb_server_getdate());
  }
  if (keys) {
    int use_where = FALSE;
    if (IsNull(tax_univ_icb_tui_id, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_tui_id, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tui_id is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_tui_id, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_tui_id, ub->tax_univ_icb_data)
             && lb->tax_univ_icb_data->tui_id == ub->tax_univ_icb_data->tui_id) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tui_id = %d", use_where ? "WHERE" : "AND",
                 lb->tax_univ_icb_data->tui_id);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_tui_id, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tui_id >= %d", use_where ? "WHERE" : "AND",
                   lb->tax_univ_icb_data->tui_id);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_tui_id, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tui_id < %d", use_where ? "WHERE" : "AND",
                   ub->tax_univ_icb_data->tui_id);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_tax_pkg_inst_id, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_tax_pkg_inst_id, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_pkg_inst_id is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_tax_pkg_inst_id, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_tax_pkg_inst_id, ub->tax_univ_icb_data)
             && lb->tax_univ_icb_data->tax_pkg_inst_id == ub->tax_univ_icb_data->tax_pkg_inst_id) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_pkg_inst_id = %d", use_where ? "WHERE" : "AND",
                 lb->tax_univ_icb_data->tax_pkg_inst_id);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_tax_pkg_inst_id, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_pkg_inst_id >= %d", use_where ? "WHERE" : "AND",
                   lb->tax_univ_icb_data->tax_pkg_inst_id);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_tax_pkg_inst_id, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_pkg_inst_id < %d", use_where ? "WHERE" : "AND",
                   ub->tax_univ_icb_data->tax_pkg_inst_id);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_tax_class, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_tax_class, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_class is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_tax_class, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_tax_class, ub->tax_univ_icb_data)
             && lb->tax_univ_icb_data->tax_class == ub->tax_univ_icb_data->tax_class) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_class = %d", use_where ? "WHERE" : "AND",
                 lb->tax_univ_icb_data->tax_class);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_tax_class, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_class >= %d", use_where ? "WHERE" : "AND",
                   lb->tax_univ_icb_data->tax_class);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_tax_class, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.tax_class < %d", use_where ? "WHERE" : "AND",
                   ub->tax_univ_icb_data->tax_class);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_account_no, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_account_no, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.account_no is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_account_no, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_account_no, ub->tax_univ_icb_data)
             && lb->tax_univ_icb_data->account_no == ub->tax_univ_icb_data->account_no) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.account_no = %d", use_where ? "WHERE" : "AND",
                 lb->tax_univ_icb_data->account_no);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_account_no, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.account_no >= %d", use_where ? "WHERE" : "AND",
                   lb->tax_univ_icb_data->account_no);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_account_no, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.account_no < %d", use_where ? "WHERE" : "AND",
                   ub->tax_univ_icb_data->account_no);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_active_date, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_active_date, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.active_date is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_active_date, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_active_date, ub->tax_univ_icb_data)
             && Arbdate_compare(&lb->tax_univ_icb_data->active_date, &ub->tax_univ_icb_data->active_date) == 0) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.active_date = %t", use_where ? "WHERE" : "AND",
                 &lb->tax_univ_icb_data->active_date);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_active_date, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.active_date >= %t", use_where ? "WHERE" : "AND",
                   &lb->tax_univ_icb_data->active_date);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_active_date, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.active_date < %t", use_where ? "WHERE" : "AND",
                   &ub->tax_univ_icb_data->active_date);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_inactive_date, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_inactive_date, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.inactive_date is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_inactive_date, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_inactive_date, ub->tax_univ_icb_data)
             && Arbdate_compare(&lb->tax_univ_icb_data->inactive_date, &ub->tax_univ_icb_data->inactive_date) == 0) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.inactive_date = %t", use_where ? "WHERE" : "AND",
                 &lb->tax_univ_icb_data->inactive_date);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_inactive_date, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.inactive_date >= %t", use_where ? "WHERE" : "AND",
                   &lb->tax_univ_icb_data->inactive_date);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_inactive_date, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.inactive_date < %t", use_where ? "WHERE" : "AND",
                   &ub->tax_univ_icb_data->inactive_date);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_rate, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_rate, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.rate is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_rate, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_rate, ub->tax_univ_icb_data)
             && lb->tax_univ_icb_data->rate == ub->tax_univ_icb_data->rate) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.rate = %d", use_where ? "WHERE" : "AND",
                 lb->tax_univ_icb_data->rate);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_rate, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.rate >= %d", use_where ? "WHERE" : "AND",
                   lb->tax_univ_icb_data->rate);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_rate, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.rate < %d", use_where ? "WHERE" : "AND",
                   ub->tax_univ_icb_data->rate);
        use_where = FALSE;
      }
    }
    if (IsNull(tax_univ_icb_implied_decimals, lb->tax_univ_icb_data)
        || IsNull(tax_univ_icb_implied_decimals, ub->tax_univ_icb_data)) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.implied_decimals is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(tax_univ_icb_implied_decimals, lb->tax_univ_icb_data)
             && IsSet(tax_univ_icb_implied_decimals, ub->tax_univ_icb_data)
             && lb->tax_univ_icb_data->implied_decimals == ub->tax_univ_icb_data->implied_decimals) {
      arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.implied_decimals = %d", use_where ? "WHERE" : "AND",
                 lb->tax_univ_icb_data->implied_decimals);
      use_where = FALSE;
    }
    else {
      if (IsSet(tax_univ_icb_implied_decimals, lb->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.implied_decimals >= %d", use_where ? "WHERE" : "AND",
                   lb->tax_univ_icb_data->implied_decimals);
        use_where = FALSE;
      }
      if (IsSet(tax_univ_icb_implied_decimals, ub->tax_univ_icb_data)) {
        arb_dbfcmd(dbcon, " %s TAX_UNIV_ICB.implied_decimals < %d", use_where ? "WHERE" : "AND",
                   ub->tax_univ_icb_data->implied_decimals);
        use_where = FALSE;
      }
    }
    if (IsNull(customer_id_acct_map_external_id, lb->customer_id_acct_map_data)
        || IsNull(customer_id_acct_map_external_id, ub->customer_id_acct_map_data)) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(customer_id_acct_map_external_id, lb->customer_id_acct_map_data)
             && IsSet(customer_id_acct_map_external_id, ub->customer_id_acct_map_data)
             && strcmp(lb->customer_id_acct_map_data->external_id, ub->customer_id_acct_map_data->external_id) == 0) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id = '%s'", use_where ? "WHERE" : "AND",
                 lb->customer_id_acct_map_data->external_id);
      use_where = FALSE;
    }
    else {
      if (IsSet(customer_id_acct_map_external_id, lb->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id >= '%s'", use_where ? "WHERE" : "AND",
                   lb->customer_id_acct_map_data->external_id);
        use_where = FALSE;
      }
      if (IsSet(customer_id_acct_map_external_id, ub->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id < '%s'", use_where ? "WHERE" : "AND",
                   ub->customer_id_acct_map_data->external_id);
        use_where = FALSE;
      }
    }
    if (IsNull(customer_id_acct_map_account_no, lb->customer_id_acct_map_data)
        || IsNull(customer_id_acct_map_account_no, ub->customer_id_acct_map_data)) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.account_no is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(customer_id_acct_map_account_no, lb->customer_id_acct_map_data)
             && IsSet(customer_id_acct_map_account_no, ub->customer_id_acct_map_data)
             && lb->customer_id_acct_map_data->account_no == ub->customer_id_acct_map_data->account_no) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.account_no = %d", use_where ? "WHERE" : "AND",
                 lb->customer_id_acct_map_data->account_no);
      use_where = FALSE;
    }
    else {
      if (IsSet(customer_id_acct_map_account_no, lb->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.account_no >= %d", use_where ? "WHERE" : "AND",
                   lb->customer_id_acct_map_data->account_no);
        use_where = FALSE;
      }
      if (IsSet(customer_id_acct_map_account_no, ub->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.account_no < %d", use_where ? "WHERE" : "AND",
                   ub->customer_id_acct_map_data->account_no);
        use_where = FALSE;
      }
    }
    if (IsNull(customer_id_acct_map_external_id_type, lb->customer_id_acct_map_data)
        || IsNull(customer_id_acct_map_external_id_type, ub->customer_id_acct_map_data)) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id_type is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(customer_id_acct_map_external_id_type, lb->customer_id_acct_map_data)
             && IsSet(customer_id_acct_map_external_id_type, ub->customer_id_acct_map_data)
             && lb->customer_id_acct_map_data->external_id_type == ub->customer_id_acct_map_data->external_id_type) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id_type = %d", use_where ? "WHERE" : "AND",
                 lb->customer_id_acct_map_data->external_id_type);
      use_where = FALSE;
    }
    else {
      if (IsSet(customer_id_acct_map_external_id_type, lb->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id_type >= %d", use_where ? "WHERE" : "AND",
                   lb->customer_id_acct_map_data->external_id_type);
        use_where = FALSE;
      }
      if (IsSet(customer_id_acct_map_external_id_type, ub->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.external_id_type < %d", use_where ? "WHERE" : "AND",
                   ub->customer_id_acct_map_data->external_id_type);
        use_where = FALSE;
      }
    }
    if (IsNull(customer_id_acct_map_is_current, lb->customer_id_acct_map_data)
        || IsNull(customer_id_acct_map_is_current, ub->customer_id_acct_map_data)) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.is_current is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(customer_id_acct_map_is_current, lb->customer_id_acct_map_data)
             && IsSet(customer_id_acct_map_is_current, ub->customer_id_acct_map_data)
             && lb->customer_id_acct_map_data->is_current == ub->customer_id_acct_map_data->is_current) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.is_current = %d", use_where ? "WHERE" : "AND",
                 lb->customer_id_acct_map_data->is_current);
      use_where = FALSE;
    }
    else {
      if (IsSet(customer_id_acct_map_is_current, lb->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.is_current >= %d", use_where ? "WHERE" : "AND",
                   lb->customer_id_acct_map_data->is_current);
        use_where = FALSE;
      }
      if (IsSet(customer_id_acct_map_is_current, ub->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.is_current < %d", use_where ? "WHERE" : "AND",
                   ub->customer_id_acct_map_data->is_current);
        use_where = FALSE;
      }
    }
    if (IsNull(customer_id_acct_map_active_date, lb->customer_id_acct_map_data)
        || IsNull(customer_id_acct_map_active_date, ub->customer_id_acct_map_data)) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.active_date is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(customer_id_acct_map_active_date, lb->customer_id_acct_map_data)
             && IsSet(customer_id_acct_map_active_date, ub->customer_id_acct_map_data)
             && Arbdate_compare(&lb->customer_id_acct_map_data->active_date, &ub->customer_id_acct_map_data->active_date) == 0) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.active_date = %t", use_where ? "WHERE" : "AND",
                 &lb->customer_id_acct_map_data->active_date);
      use_where = FALSE;
    }
    else {
      if (IsSet(customer_id_acct_map_active_date, lb->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.active_date >= %t", use_where ? "WHERE" : "AND",
                   &lb->customer_id_acct_map_data->active_date);
        use_where = FALSE;
      }
      if (IsSet(customer_id_acct_map_active_date, ub->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.active_date < %t", use_where ? "WHERE" : "AND",
                   &ub->customer_id_acct_map_data->active_date);
        use_where = FALSE;
      }
    }
    if (IsNull(customer_id_acct_map_inactive_date, lb->customer_id_acct_map_data)
        || IsNull(customer_id_acct_map_inactive_date, ub->customer_id_acct_map_data)) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.inactive_date is NULL", use_where ? "WHERE" : "AND");
      use_where = FALSE;
    }
    else if (IsSet(customer_id_acct_map_inactive_date, lb->customer_id_acct_map_data)
             && IsSet(customer_id_acct_map_inactive_date, ub->customer_id_acct_map_data)
             && Arbdate_compare(&lb->customer_id_acct_map_data->inactive_date, &ub->customer_id_acct_map_data->inactive_date) == 0) {
      arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.inactive_date = %t", use_where ? "WHERE" : "AND",
                 &lb->customer_id_acct_map_data->inactive_date);
      use_where = FALSE;
    }
    else {
      if (IsSet(customer_id_acct_map_inactive_date, lb->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.inactive_date >= %t", use_where ? "WHERE" : "AND",
                   &lb->customer_id_acct_map_data->inactive_date);
        use_where = FALSE;
      }
      if (IsSet(customer_id_acct_map_inactive_date, ub->customer_id_acct_map_data)) {
        arb_dbfcmd(dbcon, " %s CUSTOMER_ID_ACCT_MAP.inactive_date < %t", use_where ? "WHERE" : "AND",
                   &ub->customer_id_acct_map_data->inactive_date);
        use_where = FALSE;
      }
    }
  }
  if((pstrOrder != NULL) && (strlen(pstrOrder)) ) 
  {
    arb_dbfcmd(dbcon, " %s", pstrOrder);
  }
  if ((status = arb_exec_string(dbcon, "", SQL_DEFER_EXECUTE)) != SUCCESS) {
    free(nbbuf);
    delete_abp_tax_icb_rate(databuf);
    return ABP_DBERR;
  }
  offset = 0;
  if (tax_univ_icb_dbbind(dbcon, databuf->tax_univ_icb_data, nbbuf, &offset) == FAILURE) {
    free(nbbuf);
    delete_abp_tax_icb_rate(databuf);
    return ABP_DBERR;
  }
  if (customer_id_acct_map_dbbind(dbcon, databuf->customer_id_acct_map_data, nbbuf, &offset) == FAILURE) {
    free(nbbuf);
    delete_abp_tax_icb_rate(databuf);
    return ABP_DBERR;
  }
  *list = NULL;
  while ((status = arb_next_row(dbcon)) == ARB_MORE_DATA) {
    inb = 0;
    for (j = 0; j < sizeof(databuf->tax_univ_icb_data->bitfields); j++) {
      if (nbbuf[inb] == -1)
        databuf->tax_univ_icb_data->bitfields[j] = ABP_DB_NULL;
      else if (nbbuf[inb] == 0)
        databuf->tax_univ_icb_data->bitfields[j] = ABP_SET;
      inb++;
    }
    for (j = 0; j < sizeof(databuf->customer_id_acct_map_data->bitfields); j++) {
      if (nbbuf[inb] == -1)
        databuf->customer_id_acct_map_data->bitfields[j] = ABP_DB_NULL;
      else if (nbbuf[inb] == 0)
        databuf->customer_id_acct_map_data->bitfields[j] = ABP_SET;
      inb++;
    }
    if (*list == NULL) {
      *list = new_tax_icb_rate = new_abp_tax_icb_rate();
    }
    else {
      new_tax_icb_rate->object_data.next = (API_OBJECT)new_abp_tax_icb_rate();
      new_tax_icb_rate = (ABP_TAX_ICB_RATE)new_tax_icb_rate->object_data.next;
    }
    if (new_tax_icb_rate == NULL) {
      retval = ABP_SYSERR;
      break;
    }
    else {
      memcpy(new_tax_icb_rate->tax_univ_icb_data, databuf->tax_univ_icb_data, sizeof(TAX_UNIV_ICB_DATA));
      memcpy(new_tax_icb_rate->customer_id_acct_map_data, databuf->customer_id_acct_map_data, sizeof(CUSTOMER_ID_ACCT_MAP_DATA));
    }
  }
  delete_abp_tax_icb_rate(databuf);
  if (status == FAILURE)
    retval = ABP_DBERR;
  free(nbbuf);
  return retval ? retval : arb_dbcount(dbcon);
}
Пример #10
0
EXPORT int update_abp_acct_hq_contract_by_date(ABP_DBHANDLE dbhandle, ABP_ACCT_HQ_CONTRACT acct_hq_contract, ABP_LOCSTR *a_effective_date)
{
  int retval, account_no;
  Arb_connection *connection;
  CONTRACT_ASSIGNMENTS_HQ_DATA *cahd;
  CUSTOMER_ID_ACCT_MAP_DATA *cid;
  short default_xid_type = 0;
  char szeffective_date[DEF_STR_LEN];
  Arb_date effective_date;

  api_convert_input_string(szeffective_date, a_effective_date, DEF_STR_LEN);
  if ((a_effective_date != NULL) && (*szeffective_date != '\0'))
    api_string_to_Arbdate(szeffective_date, &effective_date, 0);

  if (WRONG_OBJ_TYPE(acct_hq_contract, ACCT_HQ_CONTRACT))
    return ABP_ARGERR;
    
  if (NotCustDbhandle(dbhandle))
    return ABP_ARGERR;
    
  connection = dbhandle->cust_connection;
  ((ABP_ERR_DATA *)connection->user_data)->is_set = FALSE;
  
  cahd = acct_hq_contract->contract_assignments_hq_data;
  cid = acct_hq_contract->customer_id_acct_map_data;

  if (!(IsSet(contract_assignments_hq_tracking_id, cahd))) {
	abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "tracking_id");
	return ABP_MISC_ERR;
  }
  
  if (IsNotSet(contract_assignments_hq_tracking_id_serv, cahd)) 
	set_abp_acct_hq_contract_tracking_id_serv(acct_hq_contract, dbhandle->cust_server_id);
  
  if (!IsSet(contract_assignments_hq_start_dt, cahd)) {
		abp_put_misc_message(connection,ABP_NO_VALUE_ERR, "start date");
		return ABP_MISC_ERR;
  }
  
  if (IsSet(customer_id_acct_map_external_id, cid)) {
	if (!IsSet(customer_id_acct_map_external_id_type, cid)) { 
		retval = find_default_external_id_type(connection, &default_xid_type);
	        if (retval != ABP_STATUS_OK)
			return retval;
        	set_customer_id_acct_map_external_id_type(cid, default_xid_type);
	}
	if ((retval = find_account_no(connection, cid->external_id, cid->external_id_type, &account_no, (a_effective_date != NULL) && (*szeffective_date != '\0') ? &effective_date : NULL)) 
		 != ABP_STATUS_OK)
		return retval;
	set_contract_assignments_hq_account_no(cahd, account_no);
   }
   else {
		abp_put_misc_message(connection, ABP_NO_VALUE_ERR, "external_id");
		return ABP_MISC_ERR;
   }
   
  if ((retval = abp_begin_transaction_inner(dbhandle, "abp_update_acct_hq_contract")) != ABP_STATUS_OK)
	return retval;
  if (update_contract_assignments_hq(connection, cahd) == FAILURE) {
        retval = ABP_DBERR;
	goto rollback;
  }
  else 
	return abp_commit_transaction_inner(dbhandle, "abp_update_acct_hq_contract");
 rollback:
  abp_roll_back_transaction_inner(dbhandle, "abp_update_acct_hq_contract");
  return retval;
}