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);
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."));
47 if (!check_num('amount' . $counter,0))
49 display_error(_("The entry for an amount to allocate was negative. A positive allocation amount is expected."));
53 /*Now check to see that the AllocAmt is no greater than the
54 amount left to be allocated against the transaction under review */
55 if (input_num('amount' . $counter) > $_POST['un_allocated' . $counter])
57 //$_POST['amount' . $counter] = $_POST['un_allocated' . $counter];
60 $_SESSION['alloc']->allocs[$counter]->current_allocated = input_num('amount' . $counter);
62 $total_allocated += input_num('amount' . $counter);
65 if ($total_allocated - $_SESSION['alloc']->amount > sys_prefs::allocation_settled_allowance())
67 display_error(_("These allocations cannot be processed because the amount allocated is more than the total amount left to allocate."));
68 //echo _("Total allocated:") . " " . $total_allocated ;
69 //echo " " . _("Total amount that can be allocated:") . " " . -$_SESSION['alloc']->TransAmt . "<BR>";
76 //-----------------------------------------------------------------------------------
78 function handle_process()
82 // clear all the allocations for this payment/credit
83 clear_cust_alloctions($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
85 // now add the new allocations
87 foreach ($_SESSION['alloc']->allocs as $allocn_item)
89 if ($allocn_item->current_allocated > 0)
91 add_cust_allocation($allocn_item->current_allocated,
92 $_SESSION['alloc']->type, $_SESSION['alloc']->trans_no,
93 $allocn_item->type, $allocn_item->type_no, $_SESSION['alloc']->date_);
95 update_debtor_trans_allocation($allocn_item->type, $allocn_item->type_no,
96 $allocn_item->current_allocated);
97 $total_allocated += $allocn_item->current_allocated;
101 } /*end of the loop through the array of allocations made */
103 update_debtor_trans_allocation($_SESSION['alloc']->type,
104 $_SESSION['alloc']->trans_no, $total_allocated);
106 commit_transaction();
111 //--------------------------------------------------------------------------------
113 if (isset($_POST['Process']))
118 $_POST['Cancel'] = 1;
122 //--------------------------------------------------------------------------------
124 if (isset($_POST['Cancel']))
127 meta_forward($path_to_root . "/sales/allocations/customer_allocation_main.php");
131 //--------------------------------------------------------------------------------
133 function get_allocations_for_transaction($type, $trans_no)
137 $debtor = get_customer_trans($trans_no, $type);
139 $_SESSION['alloc'] = new allocation($trans_no, $type, $debtor["debtor_no"],
140 $debtor["DebtorName"], $debtor["Total"], sql2date($debtor["tran_date"]));
142 /* Now populate the array of possible (and previous actual) allocations for this customer */
143 /*First get the transactions that have outstanding balances ie Total-alloc >0 */
145 $trans_items = get_allocatable_to_cust_transactions($_SESSION['alloc']->person_id);
147 while ($myrow = db_fetch($trans_items))
149 $_SESSION['alloc']->add_item($myrow["type"], $myrow["trans_no"],
150 sql2date($myrow["tran_date"]), sql2date($myrow["due_date"]),
151 $myrow["Total"], // trans total
152 $myrow["alloc"], // trans total allocated
153 0); // this allocation
157 /* Now get trans that might have previously been allocated to by this trans
158 NB existing entries where still some of the trans outstanding entered from
159 above logic will be overwritten with the prev alloc detail below */
161 $trans_items = get_allocatable_to_cust_transactions($_SESSION['alloc']->person_id, $trans_no, $type);
163 while ($myrow = db_fetch($trans_items))
165 $_SESSION['alloc']->add_or_update_item ($myrow["type"], $myrow["trans_no"],
166 sql2date($myrow["tran_date"]), sql2date($myrow["due_date"]),
167 $myrow["Total"], $myrow["alloc"] - $myrow["amt"], $myrow["amt"]);
171 //--------------------------------------------------------------------------------
173 function edit_allocations_for_transaction($type, $trans_no)
177 start_form(false, true);
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 if (count($_SESSION['alloc']->allocs) > 0)
190 start_table($table_style);
192 $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
193 _("Other Allocations"), _("This Allocation"), _("Left to Allocate"), "", "");
197 $k = $counter = $total_allocated = 0;
199 foreach ($_SESSION['alloc']->allocs as $allocn_item)
201 alt_table_row_color($k);
203 label_cell(systypes::name($allocn_item->type));
204 label_cell(get_trans_view_str($allocn_item->type, $allocn_item->type_no));
205 label_cell($allocn_item->date_, "align=right");
206 label_cell($allocn_item->due_date, "align=right");
207 amount_cell($allocn_item->amount);
208 amount_cell($allocn_item->amount_allocated);
210 if (!check_num('amount' . $counter))
211 $_POST['amount' . $counter] = price_format($allocn_item->current_allocated);
212 amount_cells(null, 'amount' . $counter, $_POST['amount' . $counter]);
214 $un_allocated = round($allocn_item->amount - $allocn_item->amount_allocated, 6);
215 hidden("un_allocated" . $counter, $un_allocated);
216 amount_cell($un_allocated);
218 label_cell("<a href='#' name=Alloc$counter onclick='allocate_all(this.name.substr(5));return true;'>"
219 . _("All") . "</a>");
220 label_cell("<a href='#' name=DeAll$counter onclick='allocate_none(this.name.substr(5));return true;'>"
221 . _("None") . "</a>");
224 $total_allocated += input_num('amount' . $counter);
228 label_row(_("Total Allocated"), price_format($total_allocated),
229 "colspan=6 align=right", "nowrap align=right");
230 if ($_SESSION['alloc']->amount - $total_allocated < 0)
232 $font1 = "<font color=red>";
236 $font1 = $font2 = "";
237 $left_to_allocate = $_SESSION['alloc']->amount - $total_allocated;
238 $left_to_allocate = price_format($left_to_allocate);
239 label_row(_("Left to Allocate"), $font1 . $left_to_allocate . $font2,
240 "colspan=6 align=right ", "nowrap align=right");
243 hidden('TotalNumberOfAllocs', $counter);
244 hidden('left_to_allocate', $left_to_allocate);
245 submit_center_first('UpdateDisplay', _("Update"));
246 submit('Process', _("Process"));
250 display_note(_("There are no unsettled transactions to allocate."), 0, 1);
253 submit_center_last('Cancel', _("Back to Allocations"));
258 //--------------------------------------------------------------------------------
260 if (isset($_GET['trans_no']) && isset($_GET['trans_type']))
262 get_allocations_for_transaction($_GET['trans_type'], $_GET['trans_no']);
265 if (isset($_SESSION['alloc']))
267 edit_allocations_for_transaction($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
270 //--------------------------------------------------------------------------------