function processCartReview(&$args)
 {
     $oNstore_digitalModel =& getModel('nstore_digital');
     $oModuleModel =& getModel('module');
     $oMemberModel =& getModel('member');
     if (!$args->order_srl) {
         return;
     }
     $logged_info = Context::get('logged_info');
     if (!$logged_info) {
         return new Object(-1, 'msg_login_required');
     }
     $cart = $args->cart;
     $item_count = count($cart->item_list);
     if (!$item_count) {
         return new Object(-1, 'No items to order');
     }
     // calculate total price
     $max_unit_price = -1;
     $title = '';
     foreach ($cart->item_list as $key => $val) {
         $sum = $val->price * $val->quantity;
         if ($val->price > $max_unit_price) {
             $max_unit_price = $val->price;
             $title = $val->item_name;
         }
     }
     if ($item_count > 1) {
         $title = $title . ' 외 ' . ($item_count - 1);
     }
     // delivery fee
     if ($args->delivfee_inadvance == 'N') {
         $cart->total_price -= $cart->delivery_fee;
         $cart->delivery_fee = 0;
     }
     /*
     		// use mileage
     		if ($args->use_mileage) {
     			$cart->total_price = $cart->total_price - (int)$args->use_mileage;
     		}
     		// calculate mileage
     		$args->mileage = 0;
     		$config = $oNstore_digitalModel->getModuleConfig();
     		if ($config->mileage_percent)
     		{
     			$args->mileage = round($cart->total_price * ((float)$config->mileage_percent/100), -1);
     		}
     */
     // generate order id
     //$order_srl = getNextSequence();
     // insert into store_order
     //$args->order_srl = $order_srl;
     $args->order_srl = $args->order_srl;
     $args->title = $title;
     $args->item_count = $item_count;
     $args->member_srl = $logged_info->member_srl;
     $args->email_address = $logged_info->email_address;
     $args->user_id = $logged_info->user_id;
     $args->nick_name = $logged_info->nick_name;
     if ($args->payment_method == 'MO' && $logged_info->is_admin == 'Y' && $args->manorder_pid) {
         $args2->user_id = $args->manorder_pid;
         $output = executeQuery('member.getMemberInfo', $args2);
         if ($output->data) {
             $args->member_srl = $output->data->member_srl;
             $args->email_address = $output->data->email_address;
             $args->user_id = $output->data->user_id;
             $args->nick_name = $output->data->nick_name;
         }
     }
     $args->total_price = $cart->total_price;
     $args->price = nproductItem::price($cart->total_price);
     $args->order_title = $title;
     $args->sum_price = $cart->sum_price;
     $args->total_discounted_price = $cart->total_discounted_price;
     $args->total_discount_amount = $cart->total_discount_amount;
     $args->taxation_amount = $cart->taxation_amount;
     $args->supply_amount = $cart->supply_amount;
     $args->taxfree_amount = $cart->taxfree_amount;
     $args->vat = $cart->vat;
     if ($args->delivdest_info) {
         $args->extra_vars = serialize($args->delivdest_info);
     }
     foreach ($cart->item_list as $key => $val) {
         if ($val->module != 'nstore_digital') {
             continue;
         }
         /**
          * 상품정보 카트에 담기
          */
         $cartitem_args->cart_srl = $val->cart_srl;
         $cartitem_args->item_srl = $val->item_srl;
         $cartitem_args->member_srl = $args->member_srl;
         $cartitem_args->module_srl = $val->module_srl;
         $cartitem_args->quantity = $val->quantity;
         $cartitem_args->price = $val->price;
         $cartitem_args->taxfree = $val->taxfree;
         $output = executeQuery('nstore_digital.deleteCartItem', $cartitem_args);
         if (!$output->toBool()) {
             return $output;
         }
         $output = executeQuery('nstore_digital.insertCartItem', $cartitem_args);
         if (!$output->toBool()) {
             return $output;
         }
         unset($cartitem_args);
     }
     $output = executeQuery('nstore_digital.deleteOrder', $args);
     if (!$output->toBool()) {
         return $output;
     }
     $output = $this->insertOrder($args, $cart);
     if (!$output->toBool()) {
         return $output;
     }
 }
예제 #2
0
 /**
  * @brief this method will be called by epay module when users complete to pay to buy somethings.
  * $in_args->item_name, $in_args->price fields must be set
  */
 function triggerProcessReview(&$in_args)
 {
     // return if the target_module is not itself.
     if ($in_args->target_module != 'ncart') {
         return;
     }
     // objects to be used below.
     $oNcartModel =& getModel('ncart');
     $oModuleModel =& getModel('module');
     $oMemberModel =& getModel('member');
     // get the member information.
     $logged_info = Context::get('logged_info');
     // $args will be passed to the target modules.
     $args = $in_args;
     if ($args->manorder_pid) {
         $manorder_pid = $args->manorder_pid;
     }
     // 결제대행 유저 아이디.
     // get cart info
     $cart = $oNcartModel->getCartInfo($in_args->cartnos);
     $module_list = array();
     $purchased_modules = array();
     foreach ($cart->item_list as $key => $val) {
         // check quantity
         if (!$val->quantity) {
             return new Object(-1, 'msg_no_quantity_input');
         }
         // add module
         if (!in_array($val->module, $module_list)) {
             $module_list[] = $val->module;
         }
         $purchased_modules[] = $val->module;
     }
     $item_count = count($cart->item_list);
     if (!$item_count) {
         return new Object(-1, 'No items to order');
     }
     // check the gotten values.
     $fieldset_list = $oNcartModel->getFieldSetList($in_args->module_srl);
     $fieldcount = 0;
     $delivdest_info = array();
     foreach ($fieldset_list as $key => $fieldset) {
         $proc_modules = explode(',', $fieldset->proc_modules);
         debugPrint('$purchased_modules');
         debugPrint($purchased_modules);
         debugPrint($proc_modules);
         debugPrint($fieldset);
         if (count(array_diff($proc_modules, $purchased_modules)) == count($proc_modules)) {
             continue;
         }
         foreach ($fieldset->fields as $key2 => $field) {
             // check whether the field is required.
             if ($field->required == 'Y' && !isset($in_args->{$field->column_name})) {
                 return new Object(-1, sprintf(Context::getLang('msg_field_input_required'), $field->column_title));
             }
             if ($field->is_head == 'Y' && isset($in_args->{$field->column_name})) {
                 $title = $in_args->{$field->column_name};
             }
             if (in_array($field->column_type, array('kr_zip', 'tel', 'checkbox', 'radio')) && isset($in_args->{$field->column_name})) {
                 if (!is_array($in_args->{$field->column_name})) {
                     $in_args->{$field->column_name} = explode('|@|', $in_args->{$field->column_name});
                 }
             }
             if (!$title) {
                 $title = $in_args->{$field->column_name};
             }
             $delivdest_info[$field->column_title] = $in_args->{$field->column_name};
             $fieldcount++;
         }
     }
     // insert the address
     if ($logged_info && $fieldcount) {
         $args->member_srl = $logged_info->member_srl;
         if (is_array($title)) {
             $title = implode(' ', $title);
         }
         $args->title = $title;
         $args->serialized_address = serialize($in_args);
         $args->opt = '2';
         $args->address_srl = getNextSequence();
         $args->list_order = $args->address_srl;
         $output = executeQuery('ncart.insertAddress', $args);
         if (!$output->toBool()) {
             return $output;
         }
     }
     // delivdest_info
     $in_args->delivdest_info = $delivdest_info;
     // get title
     $title = $oNcartModel->getOrderTitle($cart->item_list);
     // set item name
     $in_args->item_name = $title;
     $in_args->order_title = $title;
     // for compatibility
     // set price which is transformed by currency module setting.
     $in_args->price = nproductItem::price($cart->total_price);
     // delivery fee
     if ($in_args->delivfee_inadvance == 'N') {
         $cart->total_price -= $cart->delivery_fee;
         $cart->delivery_fee = 0;
     }
     $args = $in_args;
     // use mileage
     if ($args->use_mileage) {
         $cart->total_price = $cart->total_price - (int) $args->use_mileage;
     }
     // calculate mileage
     $args->mileage = 0;
     $config = $oNcartModel->getModuleConfig();
     if ($config->mileage_percent) {
         $args->mileage = round($cart->total_price * ((double) $config->mileage_percent / 100));
     }
     // insert into store_order
     //$args->order_srl = $order_srl;
     $args->order_srl = $in_args->order_srl;
     $args->title = $title;
     $args->order_title = $title;
     $args->item_count = $item_count;
     if ($logged_info) {
         $args->member_srl = $logged_info->member_srl;
         $args->purchaser_email = $logged_info->email_address;
         $args->purchaser_name = $logged_info->nick_name;
         if (isset($logged_info->{$config->purchaser_cellphone})) {
             $args->purchaser_cellphone = $logged_info->{$config->purchaser_cellphone};
         }
         if (isset($logged_info->{$config->purchaser_telnum})) {
             $args->purchaser_telnum = $logged_info->{$config->purchaser_telnum};
         }
     }
     if ($manorder_pid) {
         $args->user_id = $manorder_pid;
         $output = executeQuery('member.getMemberInfo', $args);
         $args->member_srl = $output->data->member_srl;
         $args->purchaser_name = $output->data->nick_name;
         $args->purchaser_email = $output->data->email_address;
     }
     if (!$manorder_pid && !$logged_info) {
         $args->purchaser_name = "비회원_" . $in_args->purchaser_name;
         $args->purchaser_cellphone = $in_args->cellphone;
         $args->purchaser_telnum = $in_args->telnum;
         $args->purchaser_email = $in_args->email_address;
         $args->member_srl = 0;
     }
     $args->total_price = $cart->total_price;
     $args->price = $in_args->price;
     $args->sum_price = $cart->sum_price;
     $args->delivery_fee = $cart->delivery_fee;
     $args->total_discounted_price = $cart->total_discounted_price;
     $args->total_discount_amount = $cart->total_discount_amount;
     $args->taxation_amount = $cart->taxation_amount;
     $args->supply_amount = $cart->supply_amount;
     $args->taxfree_amount = $cart->taxfree_amount;
     $args->vat = $cart->vat;
     $args->cart =& $cart;
     $args->extra_vars = serialize($in_args);
     $output = $this->insertOrder($args, $args->cart);
     if (!$output->toBool()) {
         return $output;
     }
     // call the review process method of the target module
     foreach ($module_list as $key => $val) {
         // get the target module's instance
         $oTargetModule =& getController($val);
         if ($oTargetModule) {
             if (method_exists($oTargetModule, 'processCartReview')) {
                 // call the target method
                 $output = $oTargetModule->processCartReview($args);
                 if (is_object($output) && method_exists($output, 'toBool') && !$output->toBool()) {
                     return $output;
                 }
             } else {
                 debugPrint(sprintf("processCartReview does not exist in %s controller.", $val));
             }
         } else {
             debugPrint(sprintf("%s module controller does not exist.", $val));
         }
     }
 }