1<?php 2/********************************************************************** 3 Copyright (C) FrontAccounting, LLC. 4 Released under the terms of the GNU General Public License, GPL, 5 as published by the Free Software Foundation, either version 3 6 of the License, or (at your option) any later version. 7 This program is distributed in the hope that it will be useful, 8 but WITHOUT ANY WARRANTY; without even the implied warranty of 9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 10 See the License here <http://www.gnu.org/licenses/gpl-3.0.html>. 11***********************************************************************/ 12$page_security = 'SA_SALESPAYMNT'; 13$path_to_root = ".."; 14include_once($path_to_root . "/includes/ui/allocation_cart.inc"); 15include_once($path_to_root . "/includes/session.inc"); 16include_once($path_to_root . "/includes/date_functions.inc"); 17include_once($path_to_root . "/includes/ui.inc"); 18include_once($path_to_root . "/includes/banking.inc"); 19include_once($path_to_root . "/includes/data_checks.inc"); 20include_once($path_to_root . "/sales/includes/sales_db.inc"); 21include_once($path_to_root . "/reporting/includes/reporting.inc"); 22 23$js = ""; 24if ($use_popup_windows) { 25 $js .= get_js_open_window(900, 500); 26} 27if ($use_date_picker) { 28 $js .= get_js_date_picker(); 29} 30add_js_file('payalloc.js'); 31 32page(_($help_context = "Customer Payment Entry"), false, false, "", $js); 33 34//---------------------------------------------------------------------------------------------- 35 36check_db_has_customers(_("There are no customers defined in the system.")); 37 38check_db_has_bank_accounts(_("There are no bank accounts defined in the system.")); 39 40//---------------------------------------------------------------------------------------- 41if (isset($_GET['customer_id'])) 42{ 43 $_POST['customer_id'] = $_GET['customer_id']; 44} 45 46if (!isset($_POST['bank_account'])) { // first page call 47 $_SESSION['alloc'] = new allocation(ST_CUSTPAYMENT, 0, get_post('customer_id')); 48 49 if (isset($_GET['SInvoice'])) { 50 // get date and supplier 51 $inv = get_customer_trans($_GET['SInvoice'], ST_SALESINVOICE); 52 $dflt_act = get_default_bank_account($inv['curr_code']); 53 $_POST['bank_account'] = $dflt_act['id']; 54 if($inv) { 55 $_SESSION['alloc']->person_id = $_POST['customer_id'] = $inv['debtor_no']; 56 $_SESSION['alloc']->read(); 57 $_POST['DateBanked'] = sql2date($inv['tran_date']); 58 foreach($_SESSION['alloc']->allocs as $line => $trans) { 59 if ($trans->type == ST_SALESINVOICE && $trans->type_no == $_GET['SInvoice']) { 60 $un_allocated = $trans->amount - $trans->amount_allocated; 61 if ($un_allocated){ 62 $_SESSION['alloc']->allocs[$line]->current_allocated = $un_allocated; 63 $_POST['amount'] = $_POST['amount'.$line] = price_format($un_allocated); 64 } 65 break; 66 } 67 } 68 unset($inv); 69 } else 70 display_error(_("Invalid sales invoice number.")); 71 } 72} 73 74if (list_updated('BranchID')) { 75 // when branch is selected via external editor also customer can change 76 $br = get_branch(get_post('BranchID')); 77 $_POST['customer_id'] = $br['debtor_no']; 78 $_SESSION['alloc']->person_id = $br['debtor_no']; 79 $Ajax->activate('customer_id'); 80} 81 82if (!isset($_POST['customer_id'])) { 83 $_SESSION['alloc']->person_id = $_POST['customer_id'] = get_global_customer(false); 84 $_SESSION['alloc']->read(); 85} 86if (!isset($_POST['DateBanked'])) { 87 $_POST['DateBanked'] = new_doc_date(); 88 if (!is_date_in_fiscalyear($_POST['DateBanked'])) { 89 $_POST['DateBanked'] = end_fiscalyear(); 90 } 91} 92 93 94if (isset($_GET['AddedID'])) { 95 $payment_no = $_GET['AddedID']; 96 97 display_notification_centered(_("The customer payment has been successfully entered.")); 98 99 submenu_print(_("&Print This Receipt"), ST_CUSTPAYMENT, $payment_no."-".ST_CUSTPAYMENT, 'prtopt'); 100 101 submenu_view(_("&View this Customer Payment"), ST_CUSTPAYMENT, $payment_no); 102 103 submenu_option(_("Enter Another &Customer Payment"), "/sales/customer_payments.php"); 104 submenu_option(_("Enter Other &Deposit"), "/gl/gl_bank.php?NewDeposit=Yes"); 105 submenu_option(_("Enter Payment to &Supplier"), "/purchasing/supplier_payment.php"); 106 submenu_option(_("Enter Other &Payment"), "/gl/gl_bank.php?NewPayment=Yes"); 107 submenu_option(_("Bank Account &Transfer"), "/gl/bank_transfer.php"); 108 109 display_note(get_gl_view_str(ST_CUSTPAYMENT, $payment_no, _("&View the GL Journal Entries for this Customer Payment"))); 110 111 display_footer_exit(); 112} 113elseif (isset($_GET['UpdatedID'])) { 114 $payment_no = $_GET['UpdatedID']; 115 116 display_notification_centered(_("The customer payment has been successfully updated.")); 117 118 submenu_print(_("&Print This Receipt"), ST_CUSTPAYMENT, $payment_no."-".ST_CUSTPAYMENT, 'prtopt'); 119 120 display_note(get_gl_view_str(ST_CUSTPAYMENT, $payment_no, _("&View the GL Journal Entries for this Customer Payment"))); 121 122// hyperlink_params($path_to_root . "/sales/allocations/customer_allocate.php", _("&Allocate this Customer Payment"), "trans_no=$payment_no&trans_type=12"); 123 124 hyperlink_no_params($path_to_root . "/sales/inquiry/customer_inquiry.php?", _("Select Another Customer Payment for &Edition")); 125 126 hyperlink_no_params($path_to_root . "/sales/customer_payments.php", _("Enter Another &Customer Payment")); 127 128 display_footer_exit(); 129} 130 131//---------------------------------------------------------------------------------------------- 132 133function can_process() 134{ 135 global $Refs; 136 137 if (!get_post('customer_id')) 138 { 139 display_error(_("There is no customer selected.")); 140 set_focus('customer_id'); 141 return false; 142 } 143 144 if (!get_post('BranchID')) 145 { 146 display_error(_("This customer has no branch defined.")); 147 set_focus('BranchID'); 148 return false; 149 } 150 151 if (!isset($_POST['DateBanked']) || !is_date($_POST['DateBanked'])) { 152 display_error(_("The entered date is invalid. Please enter a valid date for the payment.")); 153 set_focus('DateBanked'); 154 return false; 155 } elseif (!is_date_in_fiscalyear($_POST['DateBanked'])) { 156 display_error(_("The entered date is not in fiscal year.")); 157 set_focus('DateBanked'); 158 return false; 159 } 160 161 if (!$Refs->is_valid($_POST['ref'])) { 162 display_error(_("You must enter a reference.")); 163 set_focus('ref'); 164 return false; 165 } 166 167 //Chaitanya : 13-OCT-2011 - To support Edit feature 168 if (isset($_POST['trans_no']) && $_POST['trans_no'] == 0 && (!is_new_reference($_POST['ref'], ST_CUSTPAYMENT))) { 169 display_error(_("The entered reference is already in use.")); 170 set_focus('ref'); 171 return false; 172 } 173 //Avoid duplicate reference while modifying 174 elseif ($_POST['ref'] != $_POST['old_ref'] && !is_new_reference($_POST['ref'], ST_CUSTPAYMENT)) 175 { 176 display_error( _("The entered reference is already in use.")); 177 set_focus('ref'); 178 return false; 179 } 180 181 if (!check_num('amount', 0)) { 182 display_error(_("The entered amount is invalid or negative and cannot be processed.")); 183 set_focus('amount'); 184 return false; 185 } 186 187 if (isset($_POST['charge']) && !check_num('charge', 0)) { 188 display_error(_("The entered amount is invalid or negative and cannot be processed.")); 189 set_focus('charge'); 190 return false; 191 } 192 if (isset($_POST['charge']) && input_num('charge') > 0) { 193 $charge_acct = get_company_pref('bank_charge_act'); 194 if (get_gl_account($charge_acct) == false) { 195 display_error(_("The Bank Charge Account has not been set in System and General GL Setup.")); 196 set_focus('charge'); 197 return false; 198 } 199 } 200 201// if (isset($_POST['_ex_rate']) && !check_num('_ex_rate', 0.000001)) 202// { 203// display_error(_("The exchange rate must be numeric and greater than zero.")); 204// set_focus('_ex_rate'); 205// return false; 206// } 207 208 if (@$_POST['discount'] == "") 209 { 210 $_POST['discount'] = 0; 211 } 212 213 if (!check_num('discount')) { 214 display_error(_("The entered discount is not a valid number.")); 215 set_focus('discount'); 216 return false; 217 } 218 219 //if ((input_num('amount') - input_num('discount') <= 0)) { 220 if (input_num('amount') <= 0) { 221 display_error(_("The balance of the amount and discount is zero or negative. Please enter valid amounts.")); 222 set_focus('discount'); 223 return false; 224 } 225 226 if (isset($_POST['bank_amount']) && input_num('bank_amount')<=0) 227 { 228 display_error(_("The entered payment amount is zero or negative.")); 229 set_focus('bank_amount'); 230 return false; 231 } 232 233 if (!db_has_currency_rates(get_customer_currency($_POST['customer_id']), $_POST['DateBanked'], true)) 234 return false; 235 236 $_SESSION['alloc']->amount = input_num('amount'); 237 238 if (isset($_POST["TotalNumberOfAllocs"])) 239 return check_allocations(); 240 else 241 return true; 242} 243 244//---------------------------------------------------------------------------------------------- 245 246if (isset($_POST['_customer_id_button'])) { 247// unset($_POST['branch_id']); 248 $Ajax->activate('BranchID'); 249} 250//if (isset($_POST['_DateBanked_changed'])) { 251// $Ajax->activate('_ex_rate'); 252//} 253 254//---------------------------------------------------------------------------------------------- 255 256if (get_post('AddPaymentItem') && can_process()) { 257 258 new_doc_date($_POST['DateBanked']); 259 260 $new_pmt = !$_SESSION['alloc']->trans_no; 261 //Chaitanya : 13-OCT-2011 - To support Edit feature 262 $payment_no = write_customer_payment($_SESSION['alloc']->trans_no, $_POST['customer_id'], $_POST['BranchID'], 263 $_POST['bank_account'], $_POST['DateBanked'], $_POST['ref'], 264 input_num('amount'), input_num('discount'), $_POST['memo_'], 0, input_num('charge'), input_num('bank_amount', input_num('amount'))); 265 266 $_SESSION['alloc']->trans_no = $payment_no; 267 $_SESSION['alloc']->write(); 268 269 unset($_SESSION['alloc']); 270 meta_forward($_SERVER['PHP_SELF'], $new_pmt ? "AddedID=$payment_no" : "UpdatedID=$payment_no"); 271} 272 273//---------------------------------------------------------------------------------------------- 274 275function read_customer_data() 276{ 277 global $Refs; 278 279 $myrow = get_customer_habit($_POST['customer_id']); 280 281 $_POST['HoldAccount'] = $myrow["dissallow_invoices"]; 282 $_POST['pymt_discount'] = $myrow["pymt_discount"]; 283 //Chaitanya : 13-OCT-2011 - To support Edit feature 284 //If page is called first time and New entry fetch the nex reference number 285 if (!$_SESSION['alloc']->trans_no && !isset($_POST['charge'])) 286 $_POST['ref'] = $Refs->get_next(ST_CUSTPAYMENT); 287} 288 289//---------------------------------------------------------------------------------------------- 290$new = 1; 291$old_ref = 0; 292 293//Chaitanya : 13-OCT-2011 - To support Edit feature 294if (isset($_GET['trans_no']) && $_GET['trans_no'] > 0 ) 295{ 296 $_POST['trans_no'] = $_GET['trans_no']; 297 298 $new = 0; 299 $myrow = get_customer_trans($_POST['trans_no'], ST_CUSTPAYMENT); 300 $_POST['customer_id'] = $myrow["debtor_no"]; 301 $_POST['customer_name'] = $myrow["DebtorName"]; 302 $_POST['BranchID'] = $myrow["branch_code"]; 303 $_POST['bank_account'] = $myrow["bank_act"]; 304 $_POST['ref'] = $myrow["reference"]; 305 $old_ref = $myrow["reference"]; 306 $charge = get_cust_bank_charge(ST_CUSTPAYMENT, $_POST['trans_no']); 307 $_POST['charge'] = price_format($charge); 308 $_POST['DateBanked'] = sql2date($myrow['tran_date']); 309 $_POST["amount"] = price_format($myrow['Total'] - $myrow['ov_discount']); 310 $_POST["bank_amount"] = price_format($myrow['bank_amount']+$charge); 311 $_POST["discount"] = price_format($myrow['ov_discount']); 312 $_POST["memo_"] = get_comments_string(ST_CUSTPAYMENT,$_POST['trans_no']); 313 314 //Prepare allocation cart 315 if (isset($_POST['trans_no']) && $_POST['trans_no'] > 0 ) 316 $_SESSION['alloc'] = new allocation(ST_CUSTPAYMENT,$_POST['trans_no']); 317 else 318 { 319 $_SESSION['alloc'] = new allocation(ST_CUSTPAYMENT,0); 320 $Ajax->activate('alloc_tbl'); 321 } 322} 323 324//---------------------------------------------------------------------------------------------- 325$new = !$_SESSION['alloc']->trans_no; 326start_form(); 327 328 hidden('trans_no'); 329 hidden('old_ref', $old_ref); 330 331 start_outer_table(TABLESTYLE2, "width='60%'", 5); 332 333 table_section(1); 334 335 bank_accounts_list_row(_("Into Bank Account:"), 'bank_account', null, true); 336 337 if ($new) 338 customer_list_row(_("From Customer:"), 'customer_id', null, false, true); 339 else { 340 label_cells(_("From Customer:"), $_SESSION['alloc']->person_name, "class='label'"); 341 hidden('customer_id', $_POST['customer_id']); 342 } 343 344 if (db_customer_has_branches($_POST['customer_id'])) { 345 customer_branches_list_row(_("Branch:"), $_POST['customer_id'], 'BranchID', null, false, true, true); 346 } else { 347 hidden('BranchID', ANY_NUMERIC); 348 } 349 350 if (list_updated('customer_id') || ($new && list_updated('bank_account'))) { 351 $_SESSION['alloc']->set_person($_POST['customer_id'], PT_CUSTOMER); 352 $_SESSION['alloc']->read(); 353 $_POST['memo_'] = $_POST['amount'] = $_POST['discount'] = ''; 354 $Ajax->activate('alloc_tbl'); 355 } 356 357 read_customer_data(); 358 359 set_global_customer($_POST['customer_id']); 360 if (isset($_POST['HoldAccount']) && $_POST['HoldAccount'] != 0) 361 display_warning(_("This customer account is on hold.")); 362 $display_discount_percent = percent_format($_POST['pymt_discount']*100) . "%"; 363 364 table_section(2); 365 366 date_row(_("Date of Deposit:"), 'DateBanked', '', true, 0, 0, 0, null, true); 367 368 ref_row(_("Reference:"), 'ref','' , null, '', ST_CUSTPAYMENT); 369 370 table_section(3); 371 372 $comp_currency = get_company_currency(); 373 $cust_currency = $_SESSION['alloc']->set_person($_POST['customer_id'], PT_CUSTOMER); 374 if (!$cust_currency) 375 $cust_currency = $comp_currency; 376 $_SESSION['alloc']->currency = $bank_currency = get_bank_account_currency($_POST['bank_account']); 377 378 if ($cust_currency != $bank_currency) 379 { 380 amount_row(_("Payment Amount:"), 'bank_amount', null, '', $bank_currency); 381 } 382 383 amount_row(_("Bank Charge:"), 'charge', null, '', $bank_currency); 384 385 end_outer_table(1); 386 387 div_start('alloc_tbl'); 388 show_allocatable(false); 389 div_end(); 390 391 start_table(TABLESTYLE, "width='60%'"); 392 393 label_row(_("Customer prompt payment discount :"), $display_discount_percent); 394 395 amount_row(_("Amount of Discount:"), 'discount', null, '', $cust_currency); 396 397 amount_row(_("Amount:"), 'amount', null, '', $cust_currency); 398 399 textarea_row(_("Memo:"), 'memo_', null, 22, 4); 400 end_table(1); 401 402 if ($new) 403 submit_center('AddPaymentItem', _("Add Payment"), true, '', 'default'); 404 else 405 submit_center('AddPaymentItem', _("Update Payment"), true, '', 'default'); 406 407 br(); 408 409end_form(); 410end_page(); 411?> 412