$_POST, 'session' => $_SESSION), $data_before = array(), $data_after = array(), $step = 1); if (empty($_SESSION["warehousing"][1]) || empty($_SESSION["warehousing"][2]) || $_GET["confirm"] != 1) { header("Location: warehousing_step1.php"); exit; } global $dbh; try { $dbh->beginTransaction(); $from_order_id = NULL; $total_return_amount = 0; $location_info = get_location($_SESSION["warehousing"][2]["location_id"]); //if switching order, update old order if (!empty($_SESSION["switch"])) { $last_order_id = $_SESSION["switch"]["order_info"]["id"]; //update deposit, do by staff /*$sql = "update deposit set status = ? where order_id = ? "; $parameters = array("RETURNED", $last_order_id); bind_pdo($sql, $parameters);*/ //update invoice /*$sql = "update invoice set status = ?, type = ? where order_id = ? and status != ?"; $parameters = array("VOID", "RENT", $last_order_id, "SETTLED"); bind_pdo($sql, $parameters);*/ //update order $sql = "update `order` set status = ? where id = ? and status != ?"; $parameters = array("REVISED", $last_order_id, "COMPLETED"); bind_pdo($sql, $parameters); activity_log('warehousing_step3_post.php', 'update query', $input = array('sql' => $sql, 'parameters' => $parameters), $data_before = array(), $data_after = array(), $step = 2); //update room foreach ($_SESSION["switch"]["ordered_room_id"] as $room_id) { $sql = "update room set status = ?, lastupby = ?, lastupdate = ?, reservedate_from = NULL, reservedate_to = NULL, rentaldate_from = NULL, rentaldate_to = NULL where id = ?"; $parameters = array("SUSPENDED", $_SESSION['cmsloginid'], $nowdate, $room_id,); bind_pdo($sql, $parameters); activity_log('warehousing_step3_post.php', 'update query', $input = array('sql' => $sql, 'parameters' => $parameters), $data_before = array(), $data_after = array(), $step = 3); } $from_order_id = $last_order_id; $total_return_amount = $_SESSION["switch"]["total_return_amount"]; } //insert customer (new customer) if ($_SESSION["warehousing"][1]["new_customer"] == 1) { $_SESSION["warehousing"][1]["customer_id"] = NULL; $_SESSION["warehousing"][1]["customer_code"] = NULL; //if new customer, create a customer record $hkid = NULL; $hkbr = NULL; if ($_SESSION["warehousing"][1]["identity_type"] == "PERSONAL") { //$code_start_with = "CP"; $hkid = rsa_crypt($_SESSION["warehousing"][1]["identity_id"], 1); } if ($_SESSION["warehousing"][1]["identity_type"] == "BUSINESS") { //$code_start_with = "CB"; $hkbr = rsa_crypt($_SESSION["warehousing"][1]["identity_id"], 1); } $total_num_of_customer = count(get_customer()); $new_code_id = $total_num_of_customer + 1; $password = random_string(15); $encrypt_password = rsa_crypt($password, 1); $customer_code = "C" . date("y") . str_pad($new_code_id, 4, "0", STR_PAD_LEFT); $data = array( "code" => $customer_code, "typeid" => $_SESSION["warehousing"][1]["identity_type"], "title" => $_SESSION["warehousing"][1]["title"], "firstname" => rsa_crypt($_SESSION["warehousing"][1]["firstname"], 1), "lastname" => rsa_crypt($_SESSION["warehousing"][1]["lastname"], 1), "companyname" => $_SESSION["warehousing"][1]["companyname"], "tel" => rsa_crypt($_SESSION["warehousing"][1]["tel"], 1), "email" => rsa_crypt($_SESSION["warehousing"][1]["email"], 1), "address" => rsa_crypt($_SESSION["warehousing"][1]["address"], 1), "hkid" => $hkid, "hkbr" => $hkbr, "loginid" => rsa_crypt($_SESSION["warehousing"][1]["email"], 1), "password" => $encrypt_password, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("customer", $data); // $result = insert_record_return_id("customer", $data); $customer_id = $dbh->lastInsertId(); $_SESSION["warehousing"][1]["customer_id"] = $customer_id; $_SESSION["warehousing"][1]["customer_code"] = $customer_code; /*if($result){ $customer_id = $dbh->lastInsertId(); $_SESSION["warehousing"][1]["customer_id"] = $customer_id; }*/ } //insert order //$order_num = count(get_order()); $sql2 = "select * from `order` "; $parameters2 = array(); $order_info2 = bind_pdo($sql2, $parameters2, "selectall"); $order_num = count($order_info2); $new_order_num = $order_num + 1; $order_code = $location_info["location_code"] . "-CT" . date("y") . str_pad($new_order_num, 4, "0", STR_PAD_LEFT); if (!empty($_SESSION["warehousing"][2]["delivery_service"])) { $transport_date = $_SESSION["warehousing"][2]["delivery_date"]; $transport_address = $_SESSION["warehousing"][2]["delivery_from"]; $transport_destination = $_SESSION["warehousing"][2]["delivery_to"]; } else { $transport_date = NULL; $transport_address = NULL; $transport_destination = NULL; } if ($_SESSION["warehousing"][2]["paymethod"] == "CHEQUE") { $bank_name = $_SESSION["warehousing"][2]["bank_name"]; $cheque_num = $_SESSION["warehousing"][2]["cheque_num"]; } else { $bank_name = ""; $cheque_num = ""; } if ($_SESSION["warehousing"][2]["paymethod2"] == "CHEQUE") { $bank_name2 = $_SESSION["warehousing"][2]["bank_name2"]; $cheque_num2 = $_SESSION["warehousing"][2]["cheque_num2"]; } else { $bank_name2 = ""; $cheque_num2 = ""; } if ($_SESSION["warehousing"][2]["paymethod"] == "OTHER" || $_SESSION["warehousing"][2]["paymethod"] == "BANKIN") { $paymethod_other = $_SESSION["warehousing"][2]["paymethod_other"]; } else { $paymethod_other = ""; } if ($_SESSION["warehousing"][2]["paymethod2"] == "OTHER" || $_SESSION["warehousing"][2]["paymethod2"] == "BANKIN") { $paymethod_other2 = $_SESSION["warehousing"][2]["paymethod_other2"]; } else { $paymethod_other2 = ""; } $hkid = NULL; $hkbr = NULL; if ($_SESSION["warehousing"][1]["identity_type"] == "PERSONAL") { //$code_start_with = "CP"; $hkid = rsa_crypt($_SESSION["warehousing"][1]["identity_id"], 1); } if ($_SESSION["warehousing"][1]["identity_type"] == "BUSINESS") { //$code_start_with = "CB"; $hkbr = rsa_crypt($_SESSION["warehousing"][1]["identity_id"], 1); } $data = array( "company_id" => $_SESSION["warehousing"][2]["company_id"], "branch_id" => $_SESSION["warehousing"][2]["branch_id"], "location_id" => $_SESSION["warehousing"][2]["location_id"], "customer_id" => $_SESSION["warehousing"][1]["customer_id"], "status" => "NEW", "code" => $order_code, "total_retail_price" => $_SESSION["warehousing"][2]["total_retail_price"], "total_discounted_price" => $_SESSION["warehousing"][2]["total_discounted_price"], //each month rent "deposit" => $_SESSION["warehousing"][2]["deposit"], "deposit_penalty" => 0, "rent_month" => $_SESSION["warehousing"][2]["rent_month"], "prepaid_month" => $_SESSION["warehousing"][2]["prepaid_month"], "prepaid_amount" => $_SESSION["warehousing"][2]["prepaid_amount"], "original_amount" => $_SESSION["warehousing"][2]["order_total"], "balance" => $_SESSION["warehousing"][2]["final_order_total"], "docdate" => date("Y-m-d H:i:s"), "transport_enable" => $_SESSION["warehousing"][2]["delivery_service"], "transport_date" => $transport_date, "transport_address" => $transport_address, "transport_destination" => $transport_destination, "startdate" => $_SESSION["warehousing"][2]["rent_from"], "enddate" => $_SESSION["warehousing"][2]["rent_to"], "remark" => $_SESSION["warehousing"][2]["remark"], "warehousing_date" => $_SESSION["warehousing"][2]["warehousing_date"], "roughly_size" => $_SESSION["warehousing"][2]["roughly_size"], "free_first_month_deduct" => $_SESSION["warehousing"][2]["free_first_month_deduct"], "free_2_month_deduct" => $_SESSION["warehousing"][2]["free_2_month_deduct"], "discount_deduct" => $_SESSION["warehousing"][2]["discount_deduct"], "discount_amount" => $_SESSION["warehousing"][2]["discount_amount"], "last_paid" => $_SESSION["warehousing"][2]["last_paid"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, //insert payment in to order "paymethod" => $_SESSION["warehousing"][2]["paymethod"], "bank_name" => $bank_name, "cheque_num" => $cheque_num, "paymethod_other" => $paymethod_other, "paymethod2" => $_SESSION["warehousing"][2]["paymethod2"], "bank_name2" => $bank_name2, "cheque_num2" => $cheque_num2, "paymethod_other2" => $paymethod_other2, "from_order_id" => $from_order_id, "total_return_amount" => $total_return_amount, "room_key" => $_SESSION["warehousing"][2]["room_key"], "customer_code" => $_SESSION["warehousing"][1]["customer_code"], "customer_typeid" => $_SESSION["warehousing"][1]["identity_type"], "customer_title" => $_SESSION["warehousing"][1]["title"], "customer_firstname" => rsa_crypt($_SESSION["warehousing"][1]["firstname"], 1), "customer_lastname" => rsa_crypt($_SESSION["warehousing"][1]["lastname"], 1), "customer_companyname" => $_SESSION["warehousing"][1]["companyname"], "customer_address" => rsa_crypt($_SESSION["warehousing"][1]["address"], 1), "customer_tel" => rsa_crypt($_SESSION["warehousing"][1]["tel"], 1), "customer_email" => rsa_crypt($_SESSION["warehousing"][1]["email"], 1), "customer_hkid" => $hkid, "customer_hkbr" => $hkbr, ); if (!empty($_SESSION["renew"])) { $data['renew'] = $_SESSION["renew"]; $data['first_order_id'] = $_SESSION["first_order_id"]; } $result = insert_record("order", $data); $order_id = $dbh->lastInsertId(); //insert order discount if (!empty($_SESSION["warehousing"][2]["order_discount"])) { foreach ($_SESSION["warehousing"][2]["order_discount"] as $discount) { $data = array( "order_id" => $order_id, "master_room_discount_id" => $discount["master_room_discount_id"], "master_room_id" => $discount["master_room_id"], "room_id" => $discount["room_id"], "discount_type" => $discount["discount_type"], "discount" => $discount["discount"], "monthly_deduct" => $discount["monthly_deduct"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, ); $result = insert_record("order_discount", $data); } } //if free first month fee if ($_SESSION["warehousing"][2]["free_first_month"] == 1) { $sql = "select * from master_room_discount where discount_type = ? and status = ? and deleted = ?"; $parameters = array("MO", 1, 0); $free_first_month_info = bind_pdo($sql, $parameters, "selectone"); $data = array( "order_id" => $order_id, "master_room_discount_id" => $free_first_month_info["id"], /*"room_id" => $discount["room_id"],*/ "discount_type" => "MO", "monthly_deduct" => round($_SESSION["warehousing"][2]["biggest_discounted_price"] - $_SESSION["warehousing"][2]["biggest_retail_price"] * 0.5, 1), "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, ); $result = insert_record("order_discount", $data); } //insert order product $order_product_total = 0; if (!empty($_SESSION["warehousing"][2]["order_product"])) { foreach ($_SESSION["warehousing"][2]["order_product"] as $product) { $data = array( "order_id" => $order_id, "customer_id" => $_SESSION["warehousing"][1]["customer_id"], "product_id" => $product["product_id"], "qty" => $product["qty"], "price" => $product["price"], "amount" => $product["price"] * $product["qty"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("order_product", $data); $order_product_total += $product["price"] * $product["qty"]; } //update order $sql = "update `order` set total_order_product = ? where id = ?"; $parameters = array($order_product_total, $order_id); $result = bind_pdo($sql, $parameters); activity_log('warehousing_step3_post.php', 'update query', $input = array('sql' => $sql, 'parameters' => $parameters), $data_before = array(), $data_after = array(), $step = 4); /*if($_SESSION["warehousing"][2]["prepaid_month"] > 0){ $sql = "update `order` set prepaid_amount=prepaid_amount+? where id = ?"; $parameters = array($order_product_total, $order_id); $result = bind_pdo($sql, $parameters); }*/ } //insert order room if (!empty($_SESSION["warehousing"][2]["order_room"])) { foreach ($_SESSION["warehousing"][2]["order_room"] as $room) { $data = array( "order_id" => $order_id, "room_id" => $room["room_id"], "retail_price" => $room["retail_price"], "discounted_price" => $room["discounted_price"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, ); $result = insert_record("order_room", $data); //update room status $sql = "update room set `status` = 'RENTED', rentaldate_from = ?, rentaldate_to = ? where id = ?"; $parameters = array($_SESSION["warehousing"][2]["rent_from"], $_SESSION["warehousing"][2]["rent_to"], $room["room_id"]); bind_pdo($sql, $parameters); activity_log('warehousing_step3_post.php', 'update query', $input = array('sql' => $sql, 'parameters' => $parameters), $data_before = array(), $data_after = array(), $step = 5); //_log(basename($_SERVER['PHP_SELF']), "39325088", $sql, $parameters); } } /*** DEPOSIT ***/ if ($_SESSION["warehousing"][2]["deposit"] != 'NO_NEED_PAID_RENEW') { //added 20190131 $sql = "select max(id) as max_id from deposit"; $new_deposit_code_num = bind_pdo($sql, NULL, "selectone"); $deposit_code = $location_info["location_code"] . "-D" . date("y") . str_pad($new_deposit_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); if ($_SESSION["warehousing"][2]["paymethod"] == "UNPAID") { $deposit_paid_status = "NEW"; $deposit_balance = $_SESSION["warehousing"][2]["deposit"]; } else { $deposit_paid_status = "PAID"; $deposit_balance = 0; } $data = array( "order_id" => $order_id, "code" => $deposit_code, //"status" => "NEW", //"status" => "PAID", "status" => $deposit_paid_status, "amount" => $_SESSION["warehousing"][2]["deposit"], //"balance" => $_SESSION["warehousing"][2]["deposit"], "balance" => $deposit_balance, "expected_returndate" => $_SESSION["warehousing"][2]["rent_to"], "docdate" => $nowdate, "duedate" => $nowdate, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, "customer_id" => $_SESSION["warehousing"][1]["customer_id"] ); $result = insert_record("deposit", $data); $deposit_id = $dbh->lastInsertId(); } /*** END DEPOSIT ***/ /*** INVOICE AND PAYMENT ***/ //generate a invoice, need to update when sum the total $sql = "select max(id) as max_id from invoice"; $new_invoice_code_num = bind_pdo($sql, NULL, "selectone"); $invoice_code = $location_info["location_code"] . "-I" . date("y") . str_pad($new_invoice_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $price = $_SESSION["warehousing"][2]["total_discounted_price"]; if ($_SESSION["warehousing"][2]["paymethod2"] == "UNPAID") { $invoice_paid_status = "NEW"; } else { $invoice_paid_status = "SETTLED"; } $data = array( "order_id" => $order_id, "customer_id" => $_SESSION["warehousing"][1]["customer_id"], //"status" => "NEW", //"status" => "SETTLED", "status" => $invoice_paid_status, "code" => $invoice_code, "docdate" => $nowdate, "duedate" => $_SESSION["warehousing"][2]["warehousing_date"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice", $data); $invoice_id = $dbh->lastInsertId(); $last_paid_first_month_total = 0; //$last_paid_first_month = 1; $last_paid_first_month = $_SESSION["warehousing"][2]["rent_month"]; $total_invoice_amount = $order_product_total; //generate a payment for invoice if ($_SESSION["warehousing"][2]["free_first_month"] == 1 || (float)$_SESSION["warehousing"][2]["last_paid"] > 0) { $total_payment = 0; /*$sql = "select max(id) as max_id from payment"; $new_payment_code_num = bind_pdo($sql, NULL, "selectone"); //$payment_code = $location_info["location_code"]."-P".date("y"). str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $payment_code = "P" . date("y") . str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $data = array( "customer_id" => $_SESSION["warehousing"][1]["customer_id"], "paymethod" => $_SESSION["warehousing"][2]["paymethod"], "bank_name" => $bank_name, "cheque_num" => $cheque_num, "paymethod_other" => $paymethod_other, "status" => "PAID", "code" => $payment_code, "docdate" => $nowdate, "amount" => 0, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment", $data); $payment_id = $dbh->lastInsertId();*/ if ($_SESSION["warehousing"][2]["free_first_month"] == 1) { $total_payment += round($_SESSION["warehousing"][2]["total_discounted_price"] - $_SESSION["warehousing"][2]["biggest_discounted_price"] + $_SESSION["warehousing"][2]["biggest_retail_price"] * 0.5, 1); //$total_invoice_amount += $_SESSION["warehousing"][2]["total_discounted_price"]; $total_invoice_amount += round($_SESSION["warehousing"][2]["total_discounted_price"] - $_SESSION["warehousing"][2]["biggest_discounted_price"] + $_SESSION["warehousing"][2]["biggest_retail_price"] * 0.5, 1); //invoice_dtl $data = array( "invoice_id" => $invoice_id, "type" => "RENT", //"price" => $price, "price" => round($_SESSION["warehousing"][2]["total_discounted_price"] - $_SESSION["warehousing"][2]["biggest_discounted_price"] + $_SESSION["warehousing"][2]["biggest_retail_price"] * 0.5, 1), "uom_price" => "MO", "qty" => "1", //"amount" => $price * 1, "amount" => round($_SESSION["warehousing"][2]["total_discounted_price"] - $_SESSION["warehousing"][2]["biggest_discounted_price"] + $_SESSION["warehousing"][2]["biggest_retail_price"] * 0.5, 1), "remark" => "首月半價", "month" => 1, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); //payment dtl /*$data = array( "payment_id" => $payment_id, "payable_type" => "INVOICE", "payable_id" => $invoice_id, "status" => "PAID", "docdate" => $nowdate, "amount" => $_SESSION["warehousing"][2]["total_discounted_price"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment_dtl", $data);*/ } if ((float)$_SESSION["warehousing"][2]["last_paid"] > 0) { $total_payment += (float)$_SESSION["warehousing"][2]["last_paid"]; $last_paid = $_SESSION["warehousing"][2]["last_paid"]; for ($i = 1; $i <= $_SESSION["warehousing"][2]["rent_month"]; $i++) { //if free first month if ($_SESSION["warehousing"][2]["free_first_month"] == 1 && $i == 1) { //skip it, already did it continue; } //each month rent need to deduct with last paid $balance = $_SESSION["warehousing"][2]["total_discounted_price"]; $sql = "select max(id) as max_id from invoice"; $new_invoice_code_num = bind_pdo($sql, NULL, "selectone"); $invoice_code = $location_info["location_code"] . "-I" . date("y") . str_pad($new_invoice_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); //$amount = $_SESSION["warehousing"][2]["total_discounted_price"]; //$price = $_SESSION["warehousing"][2]["total_discounted_price"]; $remark = NULL; if ($last_paid > 0 && $last_paid >= $_SESSION["warehousing"][2]["total_discounted_price"]) { //$amount = 0; //$price = $_SESSION["warehousing"][2]["total_discounted_price"]; $last_paid -= $_SESSION["warehousing"][2]["total_discounted_price"]; //$invoice_status = "SETTLED"; } else { //$amount = $_SESSION["warehousing"][2]["total_discounted_price"] - $last_paid; //$price = $_SESSION["warehousing"][2]["total_discounted_price"] - $last_paid; //$invoice_status = "NEW"; if ($last_paid_first_month_total == 0) { $last_paid_first_month_total = $_SESSION["warehousing"][2]["total_discounted_price"] - $last_paid; $last_paid_first_month = $i; $last_paid = 0; } } //if last pay > 0, override previous if ($last_paid > 0) { $remark = "整數扣減已付款項"; //$total_invoice_amount += $_SESSION["warehousing"][2]["total_discounted_price"]; $total_invoice_amount += 0; //invoice_dtl $data = array( "invoice_id" => $invoice_id, "type" => "RENT", "remark" => $remark, "month" => $i, //"price" => $_SESSION["warehousing"][2]["total_discounted_price"], "price" => 0, "uom_price" => "MO", "qty" => "1", //"amount" => $_SESSION["warehousing"][2]["total_discounted_price"] * 1, "amount" => 0, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); } else { if ($i == $last_paid_first_month && $last_paid_first_month_total > 0) { $remark = "非整數扣減已付款項"; //$total_invoice_amount += $_SESSION["warehousing"][2]["total_discounted_price"]; $total_invoice_amount += $last_paid_first_month_total; //invoice_dtl $data = array( "invoice_id" => $invoice_id, "type" => "RENT", "remark" => $remark, "month" => $i, //"price" => $_SESSION["warehousing"][2]["total_discounted_price"], "price" => $last_paid_first_month_total, "uom_price" => "MO", "qty" => "1", //"amount" => $_SESSION["warehousing"][2]["total_discounted_price"] * 1, "amount" => $last_paid_first_month_total, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); } } } //payment_dtl /*$data = array( "payment_id" => $payment_id, "payable_type" => "INVOICE", "payable_id" => $invoice_id, "status" => "PAID", "docdate" => $nowdate, "amount" => $_SESSION["warehousing"][2]["last_paid"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment_dtl", $data);*/ } //update payment /*$sql = "update payment set amount = ? where id = ?"; $parameters = array($total_payment, $payment_id); $result = bind_pdo($sql, $parameters);*/ } else { //no free first month, no last paid, no prepaid if ($_SESSION["warehousing"][2]["prepaid_month"] <= 0) { $total_invoice_amount += $_SESSION["warehousing"][2]["total_discounted_price"]; $data = array( "invoice_id" => $invoice_id, "type" => "RENT", "remark" => "", "month" => 1, "price" => $_SESSION["warehousing"][2]["total_discounted_price"], "uom_price" => "MO", "qty" => "1", "amount" => $_SESSION["warehousing"][2]["total_discounted_price"] * 1, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); } } $invoice_balance = 0; // 3. check if prepaid if ($_SESSION["warehousing"][2]["prepaid_month"] > 0) { //$invoice_balance = $order_product_total + $_SESSION["warehousing"][2]["total_discounted_price"] * $_SESSION["warehousing"][2]["rent_month"]; //looping remain rent month if ($_SESSION["warehousing"][2]["rent_month"] == $last_paid_first_month) { //$remain_rent_month = $_SESSION["warehousing"][2]["rent_month"]; if (!isset($i)) { $i = 1; } for ($j = $i; $j <= $_SESSION["warehousing"][2]["rent_month"]; $j++) { if ($_SESSION["warehousing"][2]["free_first_month"] == 1 && $j == 1) { continue; } if ($_SESSION["warehousing"][2]["free_2_month_deduct"] > 0 && ($_SESSION["warehousing"][2]["rent_month"] - $j <= 1)) { $total_invoice_amount += 0; $invoice_dtl_amt = 0; } else { $total_invoice_amount += $_SESSION["warehousing"][2]["total_discounted_price"]; $invoice_dtl_amt = $_SESSION["warehousing"][2]["total_discounted_price"] * 1; } $data = array( "invoice_id" => $invoice_id, "type" => "RENT", "remark" => "預繳租金", "month" => $j, "price" => $_SESSION["warehousing"][2]["total_discounted_price"], "uom_price" => "MO", "qty" => "1", "amount" => $invoice_dtl_amt, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); } } else { //$remain_rent_month = $_SESSION["warehousing"][2]["rent_month"] - $last_paid_first_month; for ($i = 1; $i <= $_SESSION["warehousing"][2]["rent_month"]; $i++) { if ($_SESSION["warehousing"][2]["free_first_month"] == 1 && $i == 1) { continue; } if ($i > $last_paid_first_month) { if ($_SESSION["warehousing"][2]["free_2_month_deduct"] > 0 && ($_SESSION["warehousing"][2]["rent_month"] - $j <= 1)) { $total_invoice_amount += 0; $invoice_dtl_amt = 0; } else { $total_invoice_amount += $_SESSION["warehousing"][2]["total_discounted_price"]; $invoice_dtl_amt = $_SESSION["warehousing"][2]["total_discounted_price"] * 1; } $data = array( "invoice_id" => $invoice_id, "type" => "RENT", "remark" => "預繳租金", "month" => $i, "price" => $_SESSION["warehousing"][2]["total_discounted_price"], "uom_price" => "MO", "qty" => "1", "amount" => $invoice_dtl_amt, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); } } } } else { //no prepaid //$invoice_balance = $order_product_total + $_SESSION["warehousing"][2]["total_discounted_price"] * $_SESSION["warehousing"][2]["rent_month"]; } //case 1: has free first month, last paid > 0 if ($_SESSION["warehousing"][2]["free_first_month"] == 1 && (float)$_SESSION["warehousing"][2]["last_paid"] > 0) { $invoice_balance = $total_invoice_amount - $_SESSION["warehousing"][2]["total_discounted_price"] - (float)$_SESSION["warehousing"][2]["last_paid"]; //var_dump("case 1"); } //case 2: has free first month, last paid = 0 if ($_SESSION["warehousing"][2]["free_first_month"] == 1 && (float)$_SESSION["warehousing"][2]["last_paid"] == 0) { $invoice_balance = $total_invoice_amount - $_SESSION["warehousing"][2]["total_discounted_price"]; //var_dump("case 2"); } //case 3: no free first month, last paid > 0 if ($_SESSION["warehousing"][2]["free_first_month"] != 1 && (float)$_SESSION["warehousing"][2]["last_paid"] > 0) { $invoice_balance = $total_invoice_amount - (float)$_SESSION["warehousing"][2]["last_paid"]; //var_dump("case 3"); } //case 4: no free first month, last paid = 0 if ($_SESSION["warehousing"][2]["free_first_month"] != 1 && (float)$_SESSION["warehousing"][2]["last_paid"] == 0) { //$invoice_balance = 0; // die(var_dump($_SESSION["warehousing"][2]["total_discounted_price"])); //only first month $invoice_balance = $order_product_total + $_SESSION["warehousing"][2]["total_discounted_price"]; //var_dump("case 4"); } // end of 3 // 4. other normal setting //insert order product invoice_dtl foreach ($_SESSION["warehousing"][2]["order_product"] as $order_product) { //insert order product invoice detail $data = array( "invoice_id" => $invoice_id, "type" => "ORDER_PRODUCT", "price" => $order_product["price"], "uom_price" => "PCS", "qty" => $order_product["qty"], "amount" => $order_product["price"] * $order_product["qty"], "order_dtl_id" => $order_product["product_id"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate ); $result = insert_record("invoice_dtl", $data); } // end of 4 if ($_SESSION["warehousing"][2]["paymethod2"] != "UNPAID") { $invoice_balance = 0; } //update invoice $sql = "update invoice set amount = ?, balance = ? where id = ?"; $parameters = array($total_invoice_amount, $invoice_balance, $invoice_id); //$parameters = array($total_invoice_amount, 0, $invoice_id); $result = bind_pdo($sql, $parameters); activity_log('warehousing_step3_post.php', 'update query', $input = array('sql' => $sql, 'parameters' => $parameters), $data_before = array(), $data_after = array(), $step = 6); //PAYMENT for this invoice if ($_SESSION["warehousing"][2]["paymethod"] != "UNPAID" && $_SESSION["warehousing"][2]["paymethod2"] != "UNPAID") { // 1 payment for 2 detail $sql = "select max(id) as max_id from payment"; $new_payment_code_num = bind_pdo($sql, NULL, "selectone"); //$payment_code = $location_info["location_code"]."-P".date("y"). str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $payment_code = "P" . date("y") . str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $data = array( "customer_id" => $_SESSION["warehousing"][1]["customer_id"], "paymethod" => $_SESSION["warehousing"][2]["paymethod"], "bank_name" => $bank_name, "cheque_num" => $cheque_num, "paymethod_other" => $paymethod_other, "paymethod2" => $_SESSION["warehousing"][2]["paymethod2"], "bank_name2" => $bank_name2, "cheque_num2" => $cheque_num2, "paymethod_other2" => $paymethod_other2, "status" => "PAID", "code" => $payment_code, "docdate" => $nowdate, "amount" => $_SESSION["warehousing"][2]["deposit"] + $total_invoice_amount, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, "payfor" => "ALL" ); $result = insert_record("payment", $data); $payment_id = $dbh->lastInsertId(); //payment_dtl $data = array( "payment_id" => $payment_id, "payable_type" => "DEPOSIT", "payable_id" => $deposit_id, "status" => "PAID", "docdate" => $nowdate, "amount" => $_SESSION["warehousing"][2]["deposit"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment_dtl", $data); //payment_dtl for invoice $data = array( "payment_id" => $payment_id, "payable_type" => "INVOICE", "payable_id" => $invoice_id, "status" => "PAID", "docdate" => $nowdate, "amount" => $total_invoice_amount, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment_dtl", $data); } else { // 1 payment for 1 detail if ($_SESSION["warehousing"][2]["paymethod"] != "UNPAID" && $_SESSION["warehousing"][2]["paymethod"] != "NO_NEED_PAID_RENEW") { //updated 20190131 $sql = "select max(id) as max_id from payment"; $new_payment_code_num = bind_pdo($sql, NULL, "selectone"); //$payment_code = $location_info["location_code"]."-P".date("y"). str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $payment_code = "P" . date("y") . str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $data = array( "customer_id" => $_SESSION["warehousing"][1]["customer_id"], "paymethod" => $_SESSION["warehousing"][2]["paymethod"], "bank_name" => $bank_name, "cheque_num" => $cheque_num, "paymethod_other" => $paymethod_other, "paymethod2" => $_SESSION["warehousing"][2]["paymethod2"], "bank_name2" => $bank_name2, "cheque_num2" => $cheque_num2, "paymethod_other2" => $paymethod_other2, "status" => "PAID", "code" => $payment_code, "docdate" => $nowdate, "amount" => $_SESSION["warehousing"][2]["deposit"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, "payfor" => "DEPOSIT" ); $result = insert_record("payment", $data); $payment_id = $dbh->lastInsertId(); //payment_dtl for deposit $data = array( "payment_id" => $payment_id, "payable_type" => "DEPOSIT", "payable_id" => $deposit_id, "status" => "PAID", "docdate" => $nowdate, "amount" => $_SESSION["warehousing"][2]["deposit"], "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment_dtl", $data); } if ($_SESSION["warehousing"][2]["paymethod2"] != "UNPAID") { $sql = "select max(id) as max_id from payment"; $new_payment_code_num = bind_pdo($sql, NULL, "selectone"); //$payment_code = $location_info["location_code"]."-P".date("y"). str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $payment_code = "P" . date("y") . str_pad($new_payment_code_num["max_id"] + 1, 4, "0", STR_PAD_LEFT); $data = array( "customer_id" => $_SESSION["warehousing"][1]["customer_id"], "paymethod" => $_SESSION["warehousing"][2]["paymethod"], "bank_name" => $bank_name, "cheque_num" => $cheque_num, "paymethod_other" => $paymethod_other, "paymethod2" => $_SESSION["warehousing"][2]["paymethod2"], "bank_name2" => $bank_name2, "cheque_num2" => $cheque_num2, "paymethod_other2" => $paymethod_other2, "status" => "PAID", "code" => $payment_code, "docdate" => $nowdate, "amount" => $total_invoice_amount, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, "payfor" => "INVOICE" ); $result = insert_record("payment", $data); $payment_id = $dbh->lastInsertId(); //payment_dtl $data = array( "payment_id" => $payment_id, "payable_type" => "INVOICE", "payable_id" => $invoice_id, "status" => "PAID", "docdate" => $nowdate, "amount" => $total_invoice_amount, "createby" => $_SESSION['cmsloginid'], "createdate" => $nowdate, "lastupby" => $_SESSION['cmsloginid'], "lastupdate" => $nowdate, ); $result = insert_record("payment_dtl", $data); } } /*** END INVOICE AND PAYMENT ***/ $dbh->commit(); //unset session unset($_SESSION["warehousing"]); unset($_SESSION["switch"]); unset($_SESSION["renew"]); unset($_SESSION["first_order_id"]); unset($_SESSION["selected_room_tr"]); unset($_SESSION["roughly_size"]); unset($_SESSION["total_discounted_price"]); unset($_SESSION["deposit"]); if (!empty($_SESSION["renew"])) { //auto generate report header("Location: order_modifyform.php?order_id=" . $order_id . "&print=2"); } else { //auto generate report header("Location: order_modifyform.php?order_id=" . $order_id . "&print=1"); } } catch (Exception $e) { $dbh->rollBack(); echo $e->getMessage(); activity_log('warehousing_step3_post.php', 'rollBack', $input = array('getMessage' => $e->getMessage())); //header("Location: order_index.php"); }