6 include($path_to_root . "/includes/ui/allocation_cart.inc");
7 include_once($path_to_root . "/includes/session.inc");
8 include_once($path_to_root . "/includes/data_checks.inc");
9 include_once($path_to_root . "/sales/includes/sales_ui.inc");
10 include_once($path_to_root . "/sales/includes/sales_db.inc");
13 if ($use_popup_windows)
14 $js .= get_js_open_window(900, 500);
16 add_js_file('allocate.js');
18 page(_("Allocate Customer Payment or Credit Note"), false, false, "", $js);
20 //--------------------------------------------------------------------------------
22 function clear_allocations()
24 if (isset($_SESSION['alloc']))
26 unset($_SESSION['alloc']->allocs);
27 unset($_SESSION['alloc']);
29 session_register('alloc');
32 //--------------------------------------------------------------------------------
38 for ($counter = 0; $counter < $_POST["TotalNumberOfAllocs"]; $counter++)
41 if (!check_num('amount' . $counter))
43 display_error(_("The entry for one or more amounts is invalid."));
44 set_focus('amount'.$counter);
48 if (!check_num('amount' . $counter,0))
50 display_error(_("The entry for an amount to allocate was negative. A positive allocation amount is expected."));
51 set_focus('amount'.$counter);
55 /*Now check to see that the AllocAmt is no greater than the
56 amount left to be allocated against the transaction under review */
57 if (input_num('amount' . $counter) > $_POST['un_allocated' . $counter])
59 //$_POST['amount' . $counter] = $_POST['un_allocated' . $counter];
62 $_SESSION['alloc']->allocs[$counter]->current_allocated = input_num('amount' . $counter);
64 $total_allocated += input_num('amount' . $counter);
67 if ($total_allocated - $_SESSION['alloc']->amount > sys_prefs::allocation_settled_allowance())
69 display_error(_("These allocations cannot be processed because the amount allocated is more than the total amount left to allocate."));
70 //echo _("Total allocated:") . " " . $total_allocated ;
71 //echo " " . _("Total amount that can be allocated:") . " " . -$_SESSION['alloc']->TransAmt . "<BR>";
78 //-----------------------------------------------------------------------------------
80 function handle_process()
84 // clear all the allocations for this payment/credit
85 clear_cust_alloctions($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
87 // now add the new allocations
89 foreach ($_SESSION['alloc']->allocs as $allocn_item)
91 if ($allocn_item->current_allocated > 0)
93 add_cust_allocation($allocn_item->current_allocated,
94 $_SESSION['alloc']->type, $_SESSION['alloc']->trans_no,
95 $allocn_item->type, $allocn_item->type_no, $_SESSION['alloc']->date_);
97 update_debtor_trans_allocation($allocn_item->type, $allocn_item->type_no,
98 $allocn_item->current_allocated);
99 $total_allocated += $allocn_item->current_allocated;
103 } /*end of the loop through the array of allocations made */
105 update_debtor_trans_allocation($_SESSION['alloc']->type,
106 $_SESSION['alloc']->trans_no, $total_allocated);
108 commit_transaction();
113 //--------------------------------------------------------------------------------
115 if (isset($_POST['Process']))
120 $_POST['Cancel'] = 1;
124 //--------------------------------------------------------------------------------
126 if (isset($_POST['Cancel']))
129 meta_forward($path_to_root . "/sales/allocations/customer_allocation_main.php");
133 //--------------------------------------------------------------------------------
135 function get_allocations_for_transaction($type, $trans_no)
139 $debtor = get_customer_trans($trans_no, $type);
141 $_SESSION['alloc'] = new allocation($trans_no, $type, $debtor["debtor_no"],
142 $debtor["DebtorName"], $debtor["Total"], sql2date($debtor["tran_date"]));
144 /* Now populate the array of possible (and previous actual) allocations for this customer */
145 /*First get the transactions that have outstanding balances ie Total-alloc >0 */
147 $trans_items = get_allocatable_to_cust_transactions($_SESSION['alloc']->person_id);
149 while ($myrow = db_fetch($trans_items))
151 $_SESSION['alloc']->add_item($myrow["type"], $myrow["trans_no"],
152 sql2date($myrow["tran_date"]), sql2date($myrow["due_date"]),
153 $myrow["Total"], // trans total
154 $myrow["alloc"], // trans total allocated
155 0); // this allocation
159 /* Now get trans that might have previously been allocated to by this trans
160 NB existing entries where still some of the trans outstanding entered from
161 above logic will be overwritten with the prev alloc detail below */
163 $trans_items = get_allocatable_to_cust_transactions($_SESSION['alloc']->person_id, $trans_no, $type);
165 while ($myrow = db_fetch($trans_items))
167 $_SESSION['alloc']->add_or_update_item ($myrow["type"], $myrow["trans_no"],
168 sql2date($myrow["tran_date"]), sql2date($myrow["due_date"]),
169 $myrow["Total"], $myrow["alloc"] - $myrow["amt"], $myrow["amt"]);
173 //--------------------------------------------------------------------------------
175 function edit_allocations_for_transaction($type, $trans_no)
179 display_heading(sprintf(_("Allocation of %s # %d"), systypes::name($_SESSION['alloc']->type),$_SESSION['alloc']->trans_no));
181 display_heading($_SESSION['alloc']->person_name);
183 display_heading2(_("Date:") . " <b>" . $_SESSION['alloc']->date_ . "</b>");
184 display_heading2(_("Total:") . " <b>" . price_format($_SESSION['alloc']->amount) . "</b>");
188 start_form(false, true);
190 if (count($_SESSION['alloc']->allocs) > 0)
192 start_table($table_style);
194 $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
195 _("Other Allocations"), _("This Allocation"), _("Left to Allocate"), "", "");
199 $k = $counter = $total_allocated = 0;
201 foreach ($_SESSION['alloc']->allocs as $allocn_item)
203 alt_table_row_color($k);
205 label_cell(systypes::name($allocn_item->type));
206 label_cell(get_trans_view_str($allocn_item->type, $allocn_item->type_no));
207 label_cell($allocn_item->date_, "align=right");
208 label_cell($allocn_item->due_date, "align=right");
209 amount_cell($allocn_item->amount);
210 amount_cell($allocn_item->amount_allocated);
212 if (!check_num('amount' . $counter))
213 $_POST['amount' . $counter] = price_format($allocn_item->current_allocated);
214 amount_cells(null, 'amount' . $counter, $_POST['amount' . $counter]);
216 $un_allocated = round($allocn_item->amount - $allocn_item->amount_allocated, 6);
217 //hidden("un_allocated" . $counter, $un_allocated);
218 amount_cell($un_allocated);
220 label_cell("<a href='#' name='Alloc$counter' onclick='allocate_all(this.name.substr(5));return true;'>"
221 . _("All") . "</a>");
222 //label_cell("<a href='#' name='DeAll$counter' onclick='allocate_none(this.name.substr(5));return true;'>"
223 // . _("None") . "</a>");
224 label_cell("<a href='#' name='DeAll$counter' onclick='allocate_none(this.name.substr(5));return true;'>"
225 . _("None") . "</a>".hidden("un_allocated" . $counter, $un_allocated, false));
228 $total_allocated += input_num('amount' . $counter);
232 label_row(_("Total Allocated"), price_format($total_allocated),
233 "colspan=6 align=right", "nowrap align=right id='total_allocated'");
234 if ($_SESSION['alloc']->amount - $total_allocated < 0)
236 $font1 = "<font color=red>";
240 $font1 = $font2 = "";
241 $left_to_allocate = $_SESSION['alloc']->amount - $total_allocated;
242 $left_to_allocate = price_format($left_to_allocate);
243 label_row(_("Left to Allocate"), $font1 . $left_to_allocate . $font2,
244 "colspan=6 align=right ", "nowrap align=right id='left_to_allocate'");
247 hidden('TotalNumberOfAllocs', $counter);
248 // hidden('left_to_allocate', $left_to_allocate);
249 submit_center_first('UpdateDisplay', _("Update"));
250 submit('Process', _("Process"));
251 submit_center_last('Cancel', _("Back to Allocations"));
255 display_note(_("There are no unsettled transactions to allocate."), 0, 1);
256 submit_center('Cancel', _("Back to Allocations"));
262 //--------------------------------------------------------------------------------
264 if (isset($_GET['trans_no']) && isset($_GET['trans_type']))
266 get_allocations_for_transaction($_GET['trans_type'], $_GET['trans_no']);
269 if (isset($_SESSION['alloc']))
271 edit_allocations_for_transaction($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
274 //--------------------------------------------------------------------------------