/*end while there are detail transactions to show */ } /* end while there are suppliers to retrieve transactions for */ if ($SupplierID != '') { /*All the payment processing is in the below file */ include 'includes/PDFPaymentRun_PymtFooter.php'; $ProcessResult = DB_Txn_Commit($db); if (DB_error_no($db) != 0) { $Title = _('Payment Processing - Problem Report') . '.... '; include 'includes/header.inc'; prnMsg(_('None of the payments will be processed. Unfortunately, there was a problem committing the changes to the database because') . ' - ' . DB_error_msg($db), 'error'); echo '<br /><a href="' . $RootPath . '/index.php">' . _('Back to the menu') . '</a>'; if ($debug == 1) { prnMsg(_('The SQL that failed was') . '<br />' . $SQL, 'error'); } $ProcessResult = DB_Txn_Rollback($db); include 'includes/footer.inc'; exit; } $LeftOvers = $pdf->addTextWrap($Left_Margin, $YPos, 340 - $Left_Margin, $FontSize, _('Grand Total Payments Due'), 'left'); $LeftOvers = $pdf->addTextWrap(340, $YPos, 60, $FontSize, locale_number_format($TotalPayments, $CurrDecimalPlaces), 'right'); $LeftOvers = $pdf->addTextWrap(405, $YPos, 60, $FontSize, locale_number_format($TotalAccumDiffOnExch, $_SESSION['CompanyRecord']['decimalplaces']), 'right'); } $pdf->OutputD($_SESSION['DatabaseName'] . '_Payment_Run_' . Date('Y-m-d_Hms') . '.pdf'); $pdf->__destruct(); } else { /*The option to print PDF was not hit */ $Title = _('Payment Run'); include 'includes/header.inc'; echo '<p class="page_title_text"><img src="' . $RootPath . '/css/' . $Theme . '/images/maintenance.png" title="' . _('Supplier Types') . '" alt="" />' . $Title . '</p>'; if (isset($_POST['Currency']) and !is_numeric(filter_number_format($_POST['ExRate']))) {
$sql = "SELECT DISTINCT b1.component\n\t\t\tFROM bom as b1\n\t\t\tleft join bom as b2 on b2.parent=b1.component\n\t\t\tWHERE b2.parent is null;"; $ErrMsg = _('An error occurred selecting all bottom level components'); $DbgMsg = _('The SQL that was used to select bottom level components and failed in the process was'); $result = DB_query($sql, $db, $ErrMsg, $DbgMsg); while ($item = DB_fetch_array($result)) { $inputerror = UpdateCost($db, $item['component']); if ($inputerror == 0) { prnMsg(_('Component') . ' ' . $item['component'] . ' ' . _('has been processed'), 'success'); } else { break; } } if ($inputerror == 1) { //exited loop with errors so rollback prnMsg(_('Failed on item') . ' ' . $item['component'] . ' ' . _('Cost update has been rolled back'), 'error'); DB_Txn_Rollback($db); } else { //all good so commit data transaction DB_Txn_Commit($db); prnMsg(_('All cost updates committed to the database.'), 'success'); } } else { echo '<br /> <br />'; prnMsg(_('This script will not update the General Ledger stock balances for the changed costs. If you use integrated stock then do not use this utility'), 'warn'); echo '<form action="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '" method="post">'; echo '<div>'; echo '<input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" />'; echo '<p class="page_title_text"> <img src="' . $RootPath . '/css/' . $Theme . '/images/sales.png" title="' . _('Search') . '" alt="" />' . ' ' . _('Update costs for all items listed in a bill of materials') . '<br /> </p>
function AllocateTrans($AllocDetails, $User, $Password) { /* This function is quite specific and probably not generally useful * It only attempts to allocate a receipt or credit note sent to invoices that have a customerref equal to the value sent * * The first parameter AllocDetails is an associative array containing: * AllocDetails['debtorno'] * AllocDetails['type'] * AllocDetails['transno'] * AllocDetails['customerref'] */ $Errors = array(); $db = db($User, $Password); if (gettype($db) == 'integer') { $Errors[0] = NoAuthorisation; return $Errors; } $Errors = VerifyDebtorExists($AllocDetails['debtorno'], sizeof($Errors), $Errors, $db); /*Get the outstanding amount to allocate (all amounts in FX) from the transaction*/ if ($AllocDetails['type'] != '11' and $AllocDetails['type'] != 12) { $Errors[] = MustBeReceiptOrCreditNote; } $SQL = "SELECT id,\n\t\t\t\t\trate,\n\t\t\t\t\tovamount+ovgst+ovdiscount-alloc AS lefttoalloc\n\t\t\t\tFROM debtortrans\n\t\t\t\tWHERE debtorno='" . $AllocDetails['debtorno'] . "'\n\t\t\t\tAND type='" . $AllocDetails['type'] . "'\n\t\t\t\tAND transno='" . $AllocDetails['transno'] . "'"; $Result = api_DB_query($SQL, $db); $LeftToAllocRow = DB_fetch_array($Result); if (DB_num_rows($Result) == 0) { $Errors[0] = NoTransactionToAllocate; return $Errors; } if ($LeftToAllocRow['lefttoalloc'] < 0) { /* negative if it is a positive receipt to allocate against invoices */ /*Now look for invoices with the same customerref to allocate to */ $SQL = "SELECT id,\n\t\t\t\t\t\trate,\n\t\t\t\t\t\tovamount+ovgst+ovdiscount-alloc AS outstanding\n\t\t\t\t\tFROM debtortrans\n\t\t\t\t\tWHERE debtorno='" . $AllocDetails['debtorno'] . "'\n\t\t\t\t\tAND type=10\n\t\t\t\t\tAND reference='" . $AllocDetails['customerref'] . "'\n\t\t\t\t\tAND ovamount+ovgst+ovdiscount-alloc >0"; $Result = api_DB_query($SQL, $db); if (DB_num_rows($Result) == 0) { $Errors[0] = NoTransactionToAllocate; return $Errors; } /* The receipts will always be smaller than the invoice as there can be several receipts to make up payment for a single invocie - but not vice-versa - that's why there is no point iterating over the possibilities - in the words of McCloud "There can be only one"*/ $OSInvRow = DB_fetch_array($Result); if ($OSInvRow['rate'] == $LeftToAllocRow['rate'] and $OSInvRow['outstanding'] > 0) { if ($OSInvRow['outstanding'] + $LeftToAllocRow['lefttoalloc'] >= 0) { /*We can allocate the whole amount of the credit/receipt */ $AllocateAmount = -$LeftToAllocRow['lefttoalloc']; } else { /*We can only allocate the rest of the invoice outstanding */ $AllocateAmount = $OSInvRow['outstanding']; } DB_Txn_Begin($db); /*Now insert the allocation records */ $SQL = "INSERT INTO custallocns (amt,\n\t\t\t\t\t\t\t\t\t\t\t\tdatealloc,\n\t\t\t\t\t\t\t\t\t\t\t\ttransid_allocfrom,\n\t\t\t\t\t\t\t\t\t\t\t\ttransid_allocto)\n\t\t\t\t\t\t\t\t\tVALUE('" . $AllocateAmount . "',\n\t\t\t\t\t\t\t\t\t\t'" . Date('Y-m-d') . "',\n\t\t\t\t\t\t\t\t\t\t'" . $LeftToAllocRow['id'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OSInvRow['id'] . "')"; $Result = api_DB_query($SQL, $db, '', '', true); /*Now update the allocated amounts in the debtortrans for both transactions */ $SQL = "UPDATE debtortrans SET alloc=alloc-" . $AllocateAmount . "\n\t\t\t\t\t\tWHERE id = '" . $LeftToAllocRow['id'] . "'"; $Result = api_DB_query($SQL, $db, '', '', true); $SQL = "UPDATE debtortrans SET alloc=alloc+" . $AllocateAmount . "\n\t\t\t\t\t\tWHERE id = '" . $OSInvRow['id'] . "'"; $Result = api_DB_query($SQL, $db, '', '', true); } /*end if the exchange rates are the same so no diff on exchange */ /*end if it is a normal allocation of receipt to invoice*/ } elseif ($LeftToAllocRow['lefttoalloc'] > 0) { /* it is a payment - negative receipt - already checked type=12 need to find credit note to allocate to Now look for credit notes type 11 with the same customerref to allocate to */ $SQL = "SELECT id,\n\t\t\t\t\t\trate,\n\t\t\t\t\t\tovamount+ovgst+ovdiscount-alloc AS outstanding\n\t\t\t\t\tFROM debtortrans\n\t\t\t\t\tWHERE debtorno='" . $AllocDetails['debtorno'] . "'\n\t\t\t\t\tAND type=11\n\t\t\t\t\tAND reference='" . $AllocDetails['customerref'] . "'\n\t\t\t\t\tAND ovamount+ovgst+ovdiscount-alloc < -0.005"; $Result = api_DB_query($SQL, $db); if (DB_num_rows($Result) == 0) { // then we need to cast the net further afield and look for normal receipts to allocate to $SQL = "SELECT id,\n\t\t\t\t\t\trate,\n\t\t\t\t\t\tovamount+ovgst+ovdiscount-alloc AS outstanding\n\t\t\t\t\tFROM debtortrans\n\t\t\t\t\tWHERE debtorno='" . $AllocDetails['debtorno'] . "'\n\t\t\t\t\tAND type=12\n\t\t\t\t\tAND reference='" . $AllocDetails['customerref'] . "'\n\t\t\t\t\tAND ovamount+ovgst+ovdiscount-alloc < 0"; $Result = api_DB_query($SQL, $db); } if (DB_num_rows($Result) == 0) { //then no trans to allocate this to $Errors[0] = 'no transactions to allocate this to'; return $Errors; } $LeftToAllocate = $LeftToAllocRow['lefttoalloc']; DB_Txn_Begin($db); /* there could be several receipts to allocate against ... loop through until $LefToAllocate is exhausted */ while ($OSCreditRow = DB_fetch_array($Result)) { if ($OSCreditRow['rate'] == $LeftToAllocRow['rate'] and $LeftToAllocate > 0) { if ($OSCreditRow['outstanding'] + $LeftToAllocate <= 0) { /*We can allocate the whole amount of the receipt */ $AllocateAmount = $LeftToAllocate; $LeftToAllocate = 0; } else { /*We can only allocate the rest of the invoice outstanding */ $AllocateAmount = $OSCreditRow['outstanding']; $LeftToAllocate += $OSCreditRow['outstanding']; } /*Now insert the allocation records */ $SQL = "INSERT INTO custallocns (amt,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdatealloc,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransid_allocfrom,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransid_allocto)\n\t\t\t\t\t\t\t\t\t\tVALUE('" . $AllocateAmount . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . Date('Y-m-d') . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . $OSCreditRow['id'] . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . $LeftToAllocRow['id'] . "')"; $Result = api_DB_query($SQL, $db, '', '', true); /*Now update the allocated amounts in the debtortrans for both transactions */ $SQL = "UPDATE debtortrans SET alloc=alloc+" . $AllocateAmount . "\n\t\t\t\t\t\t\tWHERE id = '" . $LeftToAllocRow['id'] . "'"; $Result = api_DB_query($SQL, $db, '', '', true); $SQL = "UPDATE debtortrans SET alloc=alloc-" . $AllocateAmount . "\n\t\t\t\t\t\t\tWHERE id = '" . $OSCreditRow['id'] . "'"; $Result = api_DB_query($SQL, $db, '', '', true); } } //end loop around potential positive receipts not fully allocated already } if (sizeof($Errors) == 0) { $Result = DB_Txn_Commit($db); $Errors[0] = 0; } else { $Result = DB_Txn_Rollback($db); } return $Errors; }
//run the SQL from either of the above possibilites if (is_array($sql)) { $result = DB_Txn_Begin(); $tmpErr = _('Could not update unit of measure'); $tmpDbg = _('The sql that failed was') . ':'; foreach ($sql as $stmt) { $result = DB_query($stmt, $tmpErr, $tmpDbg, true); if (!$result) { $InputError = 1; break; } } if ($InputError != 1) { $result = DB_Txn_Commit(); } else { $result = DB_Txn_Rollback(); } } else { $result = DB_query($sql); } prnMsg($msg, 'success'); } unset($SelectedMeasureID); unset($_POST['SelectedMeasureID']); unset($_POST['MeasureName']); } elseif (isset($_GET['delete'])) { //the link to delete a selected record was clicked instead of the submit button // PREVENT DELETES IF DEPENDENT RECORDS IN 'stockmaster' // Get the original name of the unit of measure the ID is just a secure way to find the unit of measure $sql = "SELECT unitname FROM unitsofmeasure\n\t\tWHERE unitid = '" . $SelectedMeasureID . "'"; $result = DB_query($sql);
if (!($Result = DB_query($SQL, $db))) { $Error = _('Could not update exchange difference in General Ledger'); } $SQL = "INSERT INTO gltrans (\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\tamount\n\t\t \t\t\t\t) VALUES (\n\t\t\t\t\t\t\t'" . $_SESSION['Alloc']->TransType . "',\n\t\t\t\t\t\t\t'" . $_SESSION['Alloc']->TransNo . "',\n\t\t\t\t\t\t\t'" . $_SESSION['Alloc']->TransDate . "',\n\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t'" . $_SESSION['CompanyRecord']['debtorsact'] . "',\n\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t'" . -$MovtInDiffOnExch . "'\n\t\t\t\t\t\t)"; if (!($Result = DB_query($SQL, $db))) { $Error = _('Could not update debtors control in General Ledger'); } } } // //========[ COMMIT TRANSACTION ]=========== // if (empty($Error)) { $Result = DB_Txn_Commit($db); } else { $Result = DB_Txn_Rollback($db); prnMsg($Error, 'error'); } unset($_SESSION['Alloc']); unset($_POST['AllocTrans']); } } if (isset($_GET['AllocTrans'])) { if (isset($_SESSION['Alloc'])) { unset($_SESSION['Alloc']->Allocs); unset($_SESSION['Alloc']); } $_SESSION['Alloc'] = new Allocation(); $_POST['AllocTrans'] = $_GET['AllocTrans']; // Set AllocTrans when page first called $SQL = "SELECT systypes.typename,\n\t\t\t\tdebtortrans.type,\n\t\t\t\tdebtortrans.transno,\n\t\t\t\tdebtortrans.trandate,\n\t\t\t\tdebtortrans.debtorno,\n\t\t\t\tdebtorsmaster.name,\n\t\t\t\tdebtortrans.rate,\n\t\t\t\t(debtortrans.ovamount + debtortrans.ovgst + debtortrans.ovfreight + debtortrans.ovdiscount) as total,\n\t\t\t\tdebtortrans.diffonexch,\n\t\t\t\tdebtortrans.alloc,\n\t\t\t\tcurrencies.decimalplaces\n\t\t\tFROM debtortrans INNER JOIN systypes\n\t\t\tON debtortrans.type = systypes.typeid\n\t\t\tINNER JOIN debtorsmaster\n\t\t\tON debtortrans.debtorno = debtorsmaster.debtorno\n\t\t\tINNER JOIN currencies\n\t\t\tON debtorsmaster.currcode=currencies.currabrev\n\t\t\tWHERE debtortrans.id='" . $_POST['AllocTrans'] . "'";
function InvoiceSalesOrder($OrderNo, $User, $Password) { $Errors = array(); $db = db($User, $Password); if (gettype($db) == 'integer') { $Errors[] = NoAuthorisation; return $Errors; } $Errors = VerifyOrderHeaderExists($OrderNo, sizeof($Errors), $Errors, $db); if (sizeof($Errors) != 0) { return $Errors; } /*Does not deal with assembly items or serialise/lot track items - for use by POS */ /*Get Company Defaults */ $ReadCoyResult = api_DB_query("SELECT debtorsact,\n\t\t\t\t\t\t\t\t\t\t\t\tfreightact,\n\t\t\t\t\t\t\t\t\t\t\t\tgllink_debtors,\n\t\t\t\t\t\t\t\t\t\t\t\tgllink_stock\n\t\t\t\t\t\t\t\t\t\tFROM companies\n\t\t\t\t\t\t\t\t\t\tWHERE coycode=1", $db); $CompanyRecord = DB_fetch_array($ReadCoyResult); if (DB_error_no($db) != 0) { $Errors[] = NoCompanyRecord; } $OrderHeaderSQL = "SELECT salesorders.debtorno,\n\t\t\t\t \t\t\t\t debtorsmaster.name,\n\t\t\t\t\t\t\t\t salesorders.branchcode,\n\t\t\t\t\t\t\t\t salesorders.customerref,\n\t\t\t\t\t\t\t\t salesorders.orddate,\n\t\t\t\t\t\t\t\t salesorders.ordertype,\n\t\t\t\t\t\t\t\t salesorders.shipvia,\n\t\t\t\t\t\t\t\t custbranch.area,\n\t\t\t\t\t\t\t\t custbranch.taxgroupid,\n\t\t\t\t\t\t\t\t debtorsmaster.currcode,\n\t\t\t\t\t\t\t\t currencies.rate,\n\t\t\t\t\t\t\t\t salesorders.fromstkloc,\n\t\t\t\t\t\t\t\t custbranch.salesman\n\t\t\t\t\t\t\tFROM salesorders\n\t\t\t\t\t\t\tINNER JOIN debtorsmaster\n\t\t\t\t\t\t\tON salesorders.debtorno = debtorsmaster.debtorno\n\t\t\t\t\t\t\tINNER JOIN custbranch\n\t\t\t\t\t\t\tON salesorders.debtorno = custbranch.debtorno\n\t\t\t\t\t\t\tAND salesorders.branchcode = custbranch.branchcode\n\t\t\t\t\t\t\tINNER JOIN locations\n\t\t\t\t\t\t\tON locations.loccode=salesorders.fromstkloc\n\t\t\t\t\t\t\tINNER JOIN currencies\n\t\t\t\t\t\t\tON debtorsmaster.currcode=currencies.currabrev\n\t\t\t\t\t\t\tWHERE salesorders.orderno = '" . $OrderNo . "'"; $OrderHeaderResult = api_DB_query($OrderHeaderSQL, $db); if (DB_error_no($db) != 0) { $Errors[] = NoReadOrder; } $OrderHeader = DB_fetch_array($OrderHeaderResult); $TaxProvResult = api_DB_query("SELECT taxprovinceid FROM locations WHERE loccode='" . $OrderHeader['fromstkloc'] . "'", $db); if (DB_error_no($db) != 0) { $Errors[] = NoTaxProvince; } $myrow = DB_fetch_row($TaxProvResult); $DispTaxProvinceID = $myrow[0]; $LineItemsSQL = "SELECT stkcode,\n\t\t\t\t\t\t\t\tunitprice,\n\t\t\t\t\t\t\t\tquantity,\n\t\t\t\t\t\t\t\tdiscountpercent,\n\t\t\t\t\t\t\t\ttaxcatid,\n\t\t\t\t\t\t\t\tmbflag,\n\t\t\t\t\t\t\t\tmaterialcost+labourcost+overheadcost AS standardcost\n\t\t\t\t\t\tFROM salesorderdetails INNER JOIN stockmaster\n\t\t\t\t\t\tON salesorderdetails.stkcode = stockmaster.stockid\n\t\t\t\t\t\tWHERE orderno ='" . $OrderNo . "'\n\t\t\t\t\t\tAND completed=0"; $LineItemsResult = api_DB_query($LineItemsSQL, $db); if (DB_error_no($db) != 0 or DB_num_rows($LineItemsResult) == 0) { $Errors[] = NoReadOrderLines; return $Errors; } /*Start an SQL transaction */ $result = DB_Txn_Begin($db); /*Now Get the next invoice number - function in SQL_CommonFunctions*/ $InvoiceNo = GetNextTransNo(10, $db); $PeriodNo = GetCurrentPeriod($db); $TaxTotals = array(); $TotalFXNetInvoice = 0; $TotalFXTax = 0; $LineCounter = 0; while ($OrderLineRow = DB_fetch_array($LineItemsResult)) { $StandardCost = $OrderLineRow['standardcost']; $LocalCurrencyPrice = $OrderLineRow['unitprice'] * (1 - floatval($OrderLineRow['discountpercent'])) / $OrderHeader['rate']; $LineNetAmount = $OrderLineRow['unitprice'] * $OrderLineRow['quantity'] * (1 - floatval($OrderLineRow['discountpercent'])); /*Gets the Taxes and rates applicable to this line from the TaxGroup of the branch and TaxCategory of the item and the taxprovince of the dispatch location */ $SQL = "SELECT taxgrouptaxes.calculationorder,\n\t\t\t\t\t\t\ttaxauthorities.description,\n\t\t\t\t\t\t\ttaxgrouptaxes.taxauthid,\n\t\t\t\t\t\t\ttaxauthorities.taxglcode,\n\t\t\t\t\t\t\ttaxgrouptaxes.taxontax,\n\t\t\t\t\t\t\ttaxauthrates.taxrate\n\t\t\t\t\tFROM taxauthrates INNER JOIN taxgrouptaxes ON\n\t\t\t\t\t\ttaxauthrates.taxauthority=taxgrouptaxes.taxauthid\n\t\t\t\t\t\tINNER JOIN taxauthorities ON\n\t\t\t\t\t\ttaxauthrates.taxauthority=taxauthorities.taxid\n\t\t\t\t\tWHERE taxgrouptaxes.taxgroupid='" . $OrderHeader['taxgroupid'] . "'\n\t\t\t\t\tAND taxauthrates.dispatchtaxprovince='" . $DispTaxProvinceID . "'\n\t\t\t\t\tAND taxauthrates.taxcatid = '" . $OrderLineRow['taxcatid'] . "'\n\t\t\t\t\tORDER BY taxgrouptaxes.calculationorder"; $GetTaxRatesResult = api_DB_query($SQL, $db); if (DB_error_no($db) != 0) { $Errors[] = TaxRatesFailed; } $LineTaxAmount = 0; while ($myrow = DB_fetch_array($GetTaxRatesResult)) { if (!isset($TaxTotals[$myrow['taxauthid']]['FXAmount'])) { $TaxTotals[$myrow['taxauthid']]['FXAmount'] = 0; } $TaxAuthID = $myrow['taxauthid']; $TaxTotals[$myrow['taxauthid']]['GLCode'] = $myrow['taxglcode']; $TaxTotals[$myrow['taxauthid']]['TaxRate'] = $myrow['taxrate']; $TaxTotals[$myrow['taxauthid']]['TaxAuthDescription'] = $myrow['description']; if ($myrow['taxontax'] == 1) { $TaxAuthAmount = ($LineNetAmount + $LineTaxAmount) * $myrow['taxrate']; } else { $TaxAuthAmount = $LineNetAmount * $myrow['taxrate']; } $TaxTotals[$myrow['taxauthid']]['FXAmount'] += $TaxAuthAmount; /*Make an array of the taxes and amounts including GLcodes for later posting - need debtortransid so can only post once the debtor trans is posted - can only post debtor trans when all tax is calculated */ $LineTaxes[$LineCounter][$myrow['calculationorder']] = array('TaxCalculationOrder' => $myrow['calculationorder'], 'TaxAuthID' => $myrow['taxauthid'], 'TaxAuthDescription' => $myrow['description'], 'TaxRate' => $myrow['taxrate'], 'TaxOnTax' => $myrow['taxontax'], 'TaxAuthAmount' => $TaxAuthAmount); $LineTaxAmount += $TaxAuthAmount; } //end loop around Taxes $TotalFXNetInvoice += $LineNetAmount; $TotalFXTax += $LineTaxAmount; /*Now update SalesOrderDetails for the quantity invoiced and the actual dispatch dates. */ $SQL = "UPDATE salesorderdetails\n\t\t\t\t\tSET qtyinvoiced = qtyinvoiced + " . $OrderLineRow['quantity'] . ",\n\t\t\t\t\t\tactualdispatchdate = '" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\tcompleted='1'\n\t\t\t\t\tWHERE orderno = '" . $OrderNo . "'\n\t\t\t\t\tAND stkcode = '" . $OrderLineRow['stkcode'] . "'"; $Result = api_DB_query($SQL, $db, '', '', true); if ($OrderLineRow['mbflag'] == 'B' or $OrderLineRow['mbflag'] == 'M') { $Assembly = False; /* Need to get the current location quantity will need it later for the stock movement */ $SQL = "SELECT locstock.quantity\n\t\t\t\t\t\tFROM locstock\n\t\t\t\t\t\tWHERE locstock.stockid='" . $OrderLineRow['stkcode'] . "'\n\t\t\t\t\t\tAND loccode= '" . $OrderHeader['fromstkloc'] . "'"; $Result = api_DB_query($SQL, $db); if (DB_num_rows($Result) == 1) { $LocQtyRow = DB_fetch_row($Result); $QtyOnHandPrior = $LocQtyRow[0]; } else { /* There must be some error this should never happen */ $QtyOnHandPrior = 0; } $SQL = "UPDATE locstock\n\t\t\t\t\t\tSET quantity = locstock.quantity - " . $OrderLineRow['quantity'] . "\n\t\t\t\t\t\tWHERE locstock.stockid = '" . $OrderLineRow['stkcode'] . "'\n\t\t\t\t\t\tAND loccode = '" . $OrderHeader['fromstkloc'] . "'"; $Result = api_DB_query($SQL, $db, '', '', true); $SQL = "INSERT INTO stockmoves (stockid,\n\t\t\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\t\t\ttransno,\n\t\t\t\t\t\t\t\t\t\t\t\tloccode,\n\t\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\t\tdebtorno,\n\t\t\t\t\t\t\t\t\t\t\t\tbranchcode,\n\t\t\t\t\t\t\t\t\t\t\t\tprice,\n\t\t\t\t\t\t\t\t\t\t\t\tprd,\n\t\t\t\t\t\t\t\t\t\t\t\treference,\n\t\t\t\t\t\t\t\t\t\t\t\tqty,\n\t\t\t\t\t\t\t\t\t\t\t\tdiscountpercent,\n\t\t\t\t\t\t\t\t\t\t\t\tstandardcost,\n\t\t\t\t\t\t\t\t\t\t\t\tnewqoh)\n\t\t\t\t\t\tVALUES ('" . $OrderLineRow['stkcode'] . "',\n\t\t\t\t\t\t\t\t'10',\n\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['fromstkloc'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['branchcode'] . "',\n\t\t\t\t\t\t\t\t'" . $LocalCurrencyPrice . "',\n\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t'" . $OrderNo . "',\n\t\t\t\t\t\t\t\t'" . -$OrderLineRow['quantity'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderLineRow['discountpercent'] . "',\n\t\t\t\t\t\t\t\t'" . $StandardCost . "',\n\t\t\t\t\t\t\t\t'" . ($QtyOnHandPrior - $OrderLineRow['quantity']) . "' )"; $Result = api_DB_query($SQL, $db, '', '', true); } else { if ($OrderLineRow['mbflag'] == 'A') { /* its an assembly */ /*Need to get the BOM for this part and make stock moves for the components then update the Location stock balances */ $Assembly = True; $StandardCost = 0; /*To start with - accumulate the cost of the comoponents for use in journals later on */ $SQL = "SELECT bom.component,\n\t\t\t\t\t\t\t\tbom.quantity,\n\t\t\t\t\t\t\t\tstockmaster.materialcost+stockmaster.labourcost+stockmaster.overheadcost AS standard\n\t\t\t\t\t\t\tFROM bom INNER JOIN stockmaster\n\t\t\t\t\t\t\tON bom.component=stockmaster.stockid\n\t\t\t\t\t\t\tWHERE bom.parent='" . $OrderLineRow['stkcode'] . "'\n\t\t\t\t\t\t\tAND bom.effectiveto >= '" . Date('Y-m-d') . "'\n\t\t\t\t\t\t\tAND bom.effectiveafter < '" . Date('Y-m-d') . "'"; $AssResult = api_DB_query($SQL, $db); while ($AssParts = DB_fetch_array($AssResult, $db)) { $StandardCost += $AssParts['standard'] * $AssParts['quantity']; /* Need to get the current location quantity will need it later for the stock movement */ $SQL = "SELECT locstock.quantity\n\t\t\t\t\t\t\tFROM locstock\n\t\t\t\t\t\t\tWHERE locstock.stockid='" . $AssParts['component'] . "'\n\t\t\t\t\t\t\tAND loccode= '" . $OrderHeader['fromstkloc'] . "'"; $Result = api_DB_query($SQL, $db); if (DB_num_rows($Result) == 1) { $LocQtyRow = DB_fetch_row($Result); $QtyOnHandPrior = $LocQtyRow[0]; } else { /*There must be some error this should never happen */ $QtyOnHandPrior = 0; } if (empty($AssParts['standard'])) { $AssParts['standard'] = 0; } $SQL = "INSERT INTO stockmoves (stockid,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransno,\n\t\t\t\t\t\t\t\t\t\t\t\t\tloccode,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdebtorno,\n\t\t\t\t\t\t\t\t\t\t\t\t\tbranchcode,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprd,\n\t\t\t\t\t\t\t\t\t\t\t\t\treference,\n\t\t\t\t\t\t\t\t\t\t\t\t\tqty,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstandardcost,\n\t\t\t\t\t\t\t\t\t\t\t\t\tshow_on_inv_crds,\n\t\t\t\t\t\t\t\t\t\t\t\t\tnewqoh)\n\t\t\t\t\t\t\t\t\t\tVALUES ('" . $AssParts['component'] . "',\n\t\t\t\t\t\t\t\t\t\t\t\t 10,\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $OrderHeader['fromstkloc'] . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $DefaultDispatchDate . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $OrderHeader['debtorno'] . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $OrderHeader['branchcode'] . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . _('Assembly') . ': ' . $OrderLineRow['stkcode'] . ' ' . _('Order') . ': ' . $OrderNo . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . -$AssParts['quantity'] * $OrderLineRow['quantity'] . "',\n\t\t\t\t\t\t\t\t\t\t\t\t '" . $AssParts['standard'] . "',\n\t\t\t\t\t\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t\t\t\t\t\t '" . ($QtyOnHandPrior - $AssParts['quantity'] * $OrderLineRow['quantity']) . "'\t)"; $Result = DB_query($SQL, $db, '', '', true); $SQL = "UPDATE locstock\n\t\t\t\t\t\t\tSET quantity = locstock.quantity - " . $AssParts['quantity'] * $OrderLineRow['quantity'] . "\n\t\t\t\t\t\t\tWHERE locstock.stockid = '" . $AssParts['component'] . "'\n\t\t\t\t\t\t\tAND loccode = '" . $OrderHeader['fromlocstk'] . "'"; $Result = DB_query($SQL, $db, '', '', true); } /* end of assembly explosion and updates */ } } /* end of its an assembly */ if ($OrderLineRow['mbflag'] == 'A' or $OrderLineRow['mbflag'] == 'D') { /*it's a Dummy/Service item or an Assembly item - still need stock movement record * but quantites on hand are always nil */ $SQL = "INSERT INTO stockmoves (stockid,\n\t\t\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\t\t\ttransno,\n\t\t\t\t\t\t\t\t\t\t\t\tloccode,\n\t\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\t\tdebtorno,\n\t\t\t\t\t\t\t\t\t\t\t\tbranchcode,\n\t\t\t\t\t\t\t\t\t\t\t\tprice,\n\t\t\t\t\t\t\t\t\t\t\t\tprd,\n\t\t\t\t\t\t\t\t\t\t\t\treference,\n\t\t\t\t\t\t\t\t\t\t\t\tqty,\n\t\t\t\t\t\t\t\t\t\t\t\tdiscountpercent,\n\t\t\t\t\t\t\t\t\t\t\t\tstandardcost,\n\t\t\t\t\t\t\t\t\t\t\t\tnewqoh)\n\t\t\t\t\t\tVALUES ('" . $OrderLineRow['stkcode'] . "',\n\t\t\t\t\t\t\t\t'10',\n\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['fromstkloc'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['branchcode'] . "',\n\t\t\t\t\t\t\t\t'" . $LocalCurrencyPrice . "',\n\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t'" . $OrderNo . "',\n\t\t\t\t\t\t\t\t'" . -$OrderLineRow['quantity'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderLineRow['discountpercent'] . "',\n\t\t\t\t\t\t\t\t'" . $StandardCost . "',\n\t\t\t\t\t\t\t\t'0' )"; $Result = api_DB_query($SQL, $db, '', '', true); } /*Get the ID of the StockMove... */ $StkMoveNo = DB_Last_Insert_ID($db, 'stockmoves', 'stkmoveno'); /*Insert the taxes that applied to this line */ foreach ($LineTaxes[$LineCounter] as $Tax) { $SQL = "INSERT INTO stockmovestaxes (stkmoveno,\n\t\t\t\t\t\t\t\t\ttaxauthid,\n\t\t\t\t\t\t\t\t\ttaxrate,\n\t\t\t\t\t\t\t\t\ttaxcalculationorder,\n\t\t\t\t\t\t\t\t\ttaxontax)\n\t\t\t\t\t\tVALUES ('" . $StkMoveNo . "',\n\t\t\t\t\t\t\t'" . $Tax['TaxAuthID'] . "',\n\t\t\t\t\t\t\t'" . $Tax['TaxRate'] . "',\n\t\t\t\t\t\t\t'" . $Tax['TaxCalculationOrder'] . "',\n\t\t\t\t\t\t\t'" . $Tax['TaxOnTax'] . "')"; $Result = DB_query($SQL, $db, '', '', true); } /*Insert Sales Analysis records */ $SQL = "SELECT COUNT(*),\n\t\t\t\t\t\tsalesanalysis.stkcategory,\n\t\t\t\t\t\tsalesanalysis.area,\n\t\t\t\t\t\tsalesanalysis.salesperson,\n\t\t\t\t\t\tsalesanalysis.periodno,\n\t\t\t\t\t\tsalesanalysis.typeabbrev,\n\t\t\t\t\t\tsalesanalysis.cust,\n\t\t\t\t\t\tsalesanalysis.custbranch,\n\t\t\t\t\t\tsalesanalysis.stockid\n\t\t\t\t\tFROM salesanalysis,\n\t\t\t\t\t\tcustbranch,\n\t\t\t\t\t\tstockmaster\n\t\t\t\t\tWHERE salesanalysis.stkcategory=stockmaster.categoryid\n\t\t\t\t\tAND salesanalysis.stockid=stockmaster.stockid\n\t\t\t\t\tAND salesanalysis.cust=custbranch.debtorno\n\t\t\t\t\tAND salesanalysis.custbranch=custbranch.branchcode\n\t\t\t\t\tAND salesanalysis.area=custbranch.area\n\t\t\t\t\tAND salesanalysis.salesperson=custbranch.salesman\n\t\t\t\t\tAND salesanalysis.typeabbrev ='" . $OrderHeader['ordertype'] . "'\n\t\t\t\t\tAND salesanalysis.periodno='" . $PeriodNo . "'\n\t\t\t\t\tAND salesanalysis.cust " . LIKE . " '" . $OrderHeader['debtorno'] . "'\n\t\t\t\t\tAND salesanalysis.custbranch " . LIKE . " '" . $OrderHeader['branchcode'] . "'\n\t\t\t\t\tAND salesanalysis.stockid " . LIKE . " '" . $OrderLineRow['stkcode'] . "'\n\t\t\t\t\tAND salesanalysis.budgetoractual='1'\n\t\t\t\t\tGROUP BY salesanalysis.stockid,\n\t\t\t\t\t\tsalesanalysis.stkcategory,\n\t\t\t\t\t\tsalesanalysis.cust,\n\t\t\t\t\t\tsalesanalysis.custbranch,\n\t\t\t\t\t\tsalesanalysis.area,\n\t\t\t\t\t\tsalesanalysis.periodno,\n\t\t\t\t\t\tsalesanalysis.typeabbrev,\n\t\t\t\t\t\tsalesanalysis.salesperson"; $ErrMsg = _('The count of existing Sales analysis records could not run because'); $DbgMsg = _('SQL to count the no of sales analysis records'); $Result = DB_query($SQL, $db, $ErrMsg, $DbgMsg, true); $myrow = DB_fetch_row($Result); if ($myrow[0] > 0) { /*Update the existing record that already exists */ $SQL = "UPDATE salesanalysis\n\t\t\t\t\t\tSET amt=amt+" . filter_number_format($OrderLineRow['unitprice'] * $OrderLineRow['quantity'] / $OrderHeader['rate']) . ",\n\t\t\t\t\t\tqty=qty +" . $OrderLineRow['quantity'] . ",\n\t\t\t\t\t\tdisc=disc+" . filter_number_format($OrderLineRow['discountpercent'] * $OrderLineRow['unitprice'] * $OrderLineRow['quantity'] / $OrderHeader['rate']) . "\n\t\t\t\t\t\tWHERE salesanalysis.area='" . $myrow[2] . "'\n\t\t\t\t\t\tAND salesanalysis.salesperson='" . $myrow[3] . "'\n\t\t\t\t\t\tAND typeabbrev ='" . $OrderHeader['ordertype'] . "'\n\t\t\t\t\t\tAND periodno = '" . $PeriodNo . "'\n\t\t\t\t\t\tAND cust " . LIKE . " '" . $OrderHeader['debtorno'] . "'\n\t\t\t\t\t\tAND custbranch " . LIKE . " '" . $OrderHeader['branchcode'] . "'\n\t\t\t\t\t\tAND stockid " . LIKE . " '" . $OrderLineRow['stkcode'] . "'\n\t\t\t\t\t\tAND salesanalysis.stkcategory ='" . $myrow[1] . "'\n\t\t\t\t\t\tAND budgetoractual='1'"; } else { /* insert a new sales analysis record */ $SQL = "INSERT INTO salesanalysis (\ttypeabbrev,\n\t\t\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\t\t\tamt,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcost,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcust,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcustbranch,\n\t\t\t\t\t\t\t\t\t\t\t\t\tqty,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisc,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstockid,\n\t\t\t\t\t\t\t\t\t\t\t\t\tarea,\n\t\t\t\t\t\t\t\t\t\t\t\t\tbudgetoractual,\n\t\t\t\t\t\t\t\t\t\t\t\t\tsalesperson,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstkcategory )\n\t\t\t\t\t\t\t\tSELECT '" . $OrderHeader['ordertype'] . "',\n\t\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t'" . $OrderLineRow['unitprice'] * $OrderLineRow['quantity'] / $OrderHeader['rate'] . "',\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . "',\n\t\t\t\t\t\t\t\t\t'" . $OrderHeader['branchcode'] . "',\n\t\t\t\t\t\t\t\t\t'" . $OrderLineRow['quantity'] . "',\n\t\t\t\t\t\t\t\t\t'" . $OrderLineRow['discountpercent'] * $OrderLineRow['unitprice'] * $OrderLineRow['quantity'] / $OrderHeader['rate'] . "',\n\t\t\t\t\t\t\t\t\t'" . $OrderLineRow['stkcode'] . "',\n\t\t\t\t\t\t\t\t\tcustbranch.area,\n\t\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t\tcustbranch.salesman,\n\t\t\t\t\t\t\t\t\tstockmaster.categoryid\n\t\t\t\t\t\t\t\tFROM stockmaster, custbranch\n\t\t\t\t\t\t\t\tWHERE stockmaster.stockid = '" . $OrderLineRow['stkcode'] . "'\n\t\t\t\t\t\t\t\tAND custbranch.debtorno = '" . $OrderHeader['debtorno'] . "'\n\t\t\t\t\t\t\t\tAND custbranch.branchcode='" . $OrderHeader['branchcode'] . "'"; } $Result = api_DB_query($SQL, $db, '', '', true); if ($CompanyRecord['gllink_stock'] == 1 and $StandardCost != 0) { /*first the cost of sales entry - GL accounts are retrieved using the function GetCOGSGLAccount from includes/GetSalesTransGLCodes.inc */ $SQL = "INSERT INTO gltrans (type,\n\t\t\t\t\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\t\t\t\t\tamount)\n\t\t\t\t\t\t\t\t\tVALUES (10,\n\t\t\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . GetCOGSGLAccount($OrderHeader['area'], $OrderLineRow['stkcode'], $OrderHeader['ordertype'], $db) . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . " - " . $OrderLineRow['stkcode'] . " x " . $OrderLineRow['quantity'] . " @ " . $StandardCost . "',\n\t\t\t\t\t\t\t\t\t\t'" . $StandardCost * $OrderLineRow['quantity'] . "')"; $Result = api_DB_query($SQL, $db, '', '', true); /*now the stock entry - this is set to the cost act in the case of a fixed asset disposal */ $StockGLCode = GetStockGLCode($OrderLineRow['stkcode'], $db); $SQL = "INSERT INTO gltrans (type,\n\t\t\t\t\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\t\t\t\t\tamount)\n\t\t\t\t\t\t\t\t\tVALUES (10,\n\t\t\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $StockGLCode['stockact'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . " - " . $OrderLineRow['stkcode'] . " x " . $OrderLineRow['quantity'] . " @ " . $StandardCost . "',\n\t\t\t\t\t\t\t\t\t\t'" . -$StandardCost * $OrderLineRow['quantity'] . "')"; $Result = api_DB_query($SQL, $db, '', '', true); } /* end of if GL and stock integrated and standard cost !=0 and not an asset */ if ($CompanyRecord['gllink_debtors'] == 1 and $OrderLineRow['unitprice'] != 0) { //Post sales transaction to GL credit sales $SalesGLAccounts = GetSalesGLAccount($OrderHeader['area'], $OrderLineRow['stkcode'], $OrderHeader['ordertype'], $db); $SQL = "INSERT INTO gltrans (type,\n\t\t\t\t\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\t\t\t\t\tamount )\n\t\t\t\t\tVALUES ('10',\n\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t'" . $SalesGLAccounts['salesglcode'] . "',\n\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . " - " . $OrderLineRow['stkcode'] . " x " . $OrderLineRow['quantity'] . " @ " . $OrderLineRow['unitprice'] . "',\n\t\t\t\t\t\t'" . -$OrderLineRow['unitprice'] * $OrderLineRow['quantity'] / $OrderHeader['rate'] . "'\n\t\t\t\t\t)"; $Result = api_DB_query($SQL, $db, '', '', true); if ($OrderLineRow['discountpercent'] != 0) { $SQL = "INSERT INTO gltrans (type,\n\t\t\t\t\t\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\t\t\t\t\t\tamount)\n\t\t\t\t\t\t\tVALUES (10,\n\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t'" . $SalesGLAccounts['discountglcode'] . "',\n\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . " - " . $OrderLineRow['stkcode'] . " @ " . $OrderLineRow['discountpercent'] * 100 . "%',\n\t\t\t\t\t\t\t\t'" . $OrderLineRow['unitprice'] * $OrderLineRow['quantity'] * $OrderLineRow['discountpercent'] / $OrderHeader['rate'] . "')"; $Result = DB_query($SQL, $db, '', '', true); } /*end of if discount !=0 */ } /*end of if sales integrated with gl */ $LineCounter++; //needed for the array of taxes by line } /*end of OrderLine loop */ $TotalInvLocalCurr = ($TotalFXNetInvoice + $TotalFXTax) / $OrderHeader['rate']; if ($CompanyRecord['gllink_debtors'] == 1) { /*Now post the tax to the GL at local currency equivalent */ if ($CompanyRecord['gllink_debtors'] == 1 and $TaxAuthAmount != 0) { /*Loop through the tax authorities array to post each total to the taxauth glcode */ foreach ($TaxTotals as $Tax) { $SQL = "INSERT INTO gltrans (type,\n\t\t\t\t\t\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\t\t\t\t\t\tamount )\n\t\t\t\t\t\t\t\t\t\t\tVALUES (10,\n\t\t\t\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . $Tax['GLCode'] . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . "-" . $Tax['TaxAuthDescription'] . "',\n\t\t\t\t\t\t\t\t\t\t\t'" . -$Tax['FXAmount'] / $OrderHeader['rate'] . "' )"; $Result = api_DB_query($SQL, $db, '', '', true); } } /*Post debtors transaction to GL debit debtors, credit freight re-charged and credit sales */ if ($TotalInvLocalCurr != 0) { $SQL = "INSERT INTO gltrans (type,\n\t\t\t\t\t\t\t\t\t\t\ttypeno,\n\t\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\t\tperiodno,\n\t\t\t\t\t\t\t\t\t\t\taccount,\n\t\t\t\t\t\t\t\t\t\t\tnarrative,\n\t\t\t\t\t\t\t\t\t\t\tamount)\n\t\t\t\t\t\t\t\t\tVALUES ('10',\n\t\t\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $CompanyRecord['debtorsact'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $TotalInvLocalCurr . "')"; $Result = api_DB_query($SQL, $db, '', '', true); } EnsureGLEntriesBalance(10, $InvoiceNo, $db); } /*end of if Sales and GL integrated */ /*Update order header for invoice charged on */ $SQL = "UPDATE salesorders SET comments = CONCAT(comments,' Inv ','" . $InvoiceNo . "') WHERE orderno= '" . $OrderNo . "'"; $Result = api_DB_query($SQL, $db, '', '', true); /*Now insert the DebtorTrans */ $SQL = "INSERT INTO debtortrans (transno,\n\t\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\t\tdebtorno,\n\t\t\t\t\t\t\t\t\t\tbranchcode,\n\t\t\t\t\t\t\t\t\t\ttrandate,\n\t\t\t\t\t\t\t\t\t\tinputdate,\n\t\t\t\t\t\t\t\t\t\tprd,\n\t\t\t\t\t\t\t\t\t\treference,\n\t\t\t\t\t\t\t\t\t\ttpe,\n\t\t\t\t\t\t\t\t\t\torder_,\n\t\t\t\t\t\t\t\t\t\tovamount,\n\t\t\t\t\t\t\t\t\t\tovgst,\n\t\t\t\t\t\t\t\t\t\trate,\n\t\t\t\t\t\t\t\t\t\tshipvia)\n\t\t\t\t\t\t\t\t\tVALUES (\n\t\t\t\t\t\t\t\t\t\t'" . $InvoiceNo . "',\n\t\t\t\t\t\t\t\t\t\t10,\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['debtorno'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['branchcode'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['orddate'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . date('Y-m-d H-i-s') . "',\n\t\t\t\t\t\t\t\t\t\t'" . $PeriodNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['customerref'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['ordertype'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderNo . "',\n\t\t\t\t\t\t\t\t\t\t'" . $TotalFXNetInvoice . "',\n\t\t\t\t\t\t\t\t\t\t'" . $TotalFXTax . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['rate'] . "',\n\t\t\t\t\t\t\t\t\t\t'" . $OrderHeader['shipvia'] . "')"; $Result = api_DB_query($SQL, $db, '', '', true); $DebtorTransID = DB_Last_Insert_ID($db, 'debtortrans', 'id'); /*for each Tax - need to insert into debtortranstaxes */ foreach ($TaxTotals as $TaxAuthID => $Tax) { $SQL = "INSERT INTO debtortranstaxes (debtortransid,\n\t\t\t\t\t\t\t\t\t\t\t\ttaxauthid,\n\t\t\t\t\t\t\t\t\t\t\t\ttaxamount)\n\t\t\t\t\t\t\t\tVALUES ('" . $DebtorTransID . "',\n\t\t\t\t\t\t\t\t\t\t'" . $TaxAuthID . "',\n\t\t\t\t\t\t\t\t\t\t'" . $Tax['FXAmount'] / $OrderHeader['rate'] . "')"; $Result = api_DB_query($SQL, $db, '', '', true); } if (sizeof($Errors) == 0) { $Result = DB_Txn_Commit($db); $Errors[0] = 0; $Errors[1] = $InvoiceNo; } else { $Result = DB_Txn_Rollback($db); } return $Errors; }
$InputError = 1; } } else { //item insert failed so set some useful error info $InputError = 1; } if ($InputError == 1) { //this row failed so exit loop break; } $row++; } if ($InputError == 1) { //exited loop with errors so rollback prnMsg(_('Failed on row ' . $row . '. Batch import has been rolled back.'), 'error'); DB_Txn_Rollback(); } else { //all good so commit data transaction DB_Txn_Commit(); prnMsg(_('Batch Import of') . ' ' . $FileName . ' ' . _('has been completed. All transactions committed to the database.'), 'success'); if ($_POST['UpdateIfExists'] == 1) { prnMsg(_('Updated:') . ' ' . $UpdatedNum . ' ' . _('Insert:') . $InsertNum); } else { prnMsg(_('Exist:') . ' ' . $UpdatedNum . ' ' . _('Insert:') . $InsertNum); } } fclose($FileHandle); } elseif (isset($_POST['gettemplate']) || isset($_GET['gettemplate'])) { //download an import template echo '<br /><br /><br />"' . implode('","', $FieldHeadings) . '"<br /><br /><br />'; } else {