4 include($path_to_root . "/includes/ui/allocation_cart.inc");
7 include_once($path_to_root . "/includes/session.inc");
9 include_once($path_to_root . "/includes/date_functions.inc");
11 include_once($path_to_root . "/includes/ui.inc");
12 include_once($path_to_root . "/includes/banking.inc");
14 include_once($path_to_root . "/sales/includes/sales_db.inc");
16 if ($use_popup_windows)
17 $js .= get_js_open_window(900, 500);
19 add_js_file('allocate.js');
21 page(_("Allocate Supplier Payment or Credit Note"), false, false, "", $js);
24 //--------------------------------------------------------------------------------
26 function clear_allocations()
28 if (isset($_SESSION['alloc']))
30 unset($_SESSION['alloc']->allocs);
31 unset($_SESSION['alloc']);
34 session_register("alloc");
37 //--------------------------------------------------------------------------------
43 for ($counter=0; $counter < $_POST["TotalNumberOfAllocs"]; $counter++)
46 if (!check_num('amount' . $counter, 0))
48 display_error(_("The entry for one or more amounts is invalid or negative."));
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_supp_alloctions($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
85 // now add the new allocations
87 foreach ($_SESSION['alloc']->allocs as $alloc_item)
89 if ($alloc_item->current_allocated > 0)
91 add_supp_allocation($alloc_item->current_allocated,
92 $_SESSION['alloc']->type, $_SESSION['alloc']->trans_no,
93 $alloc_item->type, $alloc_item->type_no, $_SESSION['alloc']->date_);
95 update_supp_trans_allocation($alloc_item->type, $alloc_item->type_no,
96 $alloc_item->current_allocated);
97 $total_allocated += $alloc_item->current_allocated;
100 } /*end of the loop through the array of allocations made */
101 update_supp_trans_allocation($_SESSION['alloc']->type,
102 $_SESSION['alloc']->trans_no, $total_allocated);
104 commit_transaction();
109 //--------------------------------------------------------------------------------
111 if (isset($_POST['Process']))
116 $_POST['Cancel'] = 1;
118 $Ajax->update('_page_body');
121 //--------------------------------------------------------------------------------
123 if (isset($_POST['Cancel']))
126 meta_forward($path_to_root . "/purchasing/allocations/supplier_allocation_main.php");
128 if (isset($_POST['UpdateDisplay']))
130 $Ajax->update('_page_body');
132 //--------------------------------------------------------------------------------
134 function get_allocations_for_transaction($type, $trans_no)
138 $supptrans = get_supp_trans($trans_no, $type);
140 $_SESSION['alloc'] = new allocation($trans_no, $type,
141 $supptrans["supplier_id"], $supptrans["supplier_name"],
142 $supptrans["Total"], sql2date($supptrans["tran_date"]));
144 /* Now populate the array of possible (and previous actual) allocations for this supplier */
145 /*First get the transactions that have outstanding balances ie Total-alloc >0 */
147 $trans_items = get_allocatable_to_supp_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"]),
153 sql2date($myrow["due_date"]),
154 $myrow["Total"], // trans total
155 $myrow["alloc"], // trans total allocated
156 0); // this allocation
160 /* Now get trans that might have previously been allocated to by this trans
161 NB existing entries where still some of the trans outstanding entered from
162 above logic will be overwritten with the prev alloc detail below */
164 $trans_items = get_allocatable_to_supp_transactions($_SESSION['alloc']->person_id, $trans_no, $type);
166 while ($myrow = db_fetch($trans_items))
168 $_SESSION['alloc']->add_or_update_item ($myrow["type"], $myrow["trans_no"],
169 sql2date($myrow["tran_date"]),
170 sql2date($myrow["due_date"]),
172 $myrow["alloc"] - $myrow["amt"], $myrow["amt"]);
176 //--------------------------------------------------------------------------------
178 function edit_allocations_for_transaction($type, $trans_no)
182 start_form(false, true);
184 display_heading(_("Allocation of") . " " . systypes::name($_SESSION['alloc']->type) . " # " . $_SESSION['alloc']->trans_no);
186 display_heading($_SESSION['alloc']->person_name);
188 display_heading2(_("Date:") . " <b>" . $_SESSION['alloc']->date_ . "</b>");
189 display_heading2(_("Total:") . " <b>" . price_format(-$_SESSION['alloc']->amount) . "</b>");
193 if (count($_SESSION['alloc']->allocs) > 0)
195 start_table($table_style);
196 $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
197 _("Other Allocations"), _("This Allocation"), _("Left to Allocate"),'');
200 $k = $counter = $total_allocated = 0;
202 foreach ($_SESSION['alloc']->allocs as $alloc_item)
204 alt_table_row_color($k);
206 label_cell(systypes::name($alloc_item->type));
207 label_cell(get_trans_view_str($alloc_item->type, $alloc_item->type_no));
208 label_cell($alloc_item->date_, "align=right");
209 label_cell($alloc_item->due_date, "align=right");
210 amount_cell($alloc_item->amount);
211 amount_cell($alloc_item->amount_allocated);
213 if (!isset($_POST['amount' . $counter]) || $_POST['amount' . $counter] == "")
214 $_POST['amount' . $counter] = price_format($alloc_item->current_allocated);
215 amount_cells(null, "amount" . $counter, price_format('amount' . $counter));
217 $un_allocated = round($alloc_item->amount - $alloc_item->amount_allocated, 6);
218 //hidden("un_allocated" . $counter, $un_allocated);
219 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>".hidden("un_allocated" . $counter, $un_allocated, false));
225 // label_cell("<a href='#' onclick='forms[0].amount$counter.value=forms[0].un_allocated$counter.value; return true;'>" . _("All") . "</a>");
226 // label_cell("<a href='#' onclick='forms[0].amount$counter.value=0; return true;'>" . _("None") . "</a>");
229 $total_allocated += input_num('amount' . $counter);
233 label_row(_("Total Allocated"), number_format2($total_allocated,user_price_dec()),
234 "colspan=6 align=right", "align=right id='total_allocated'");
235 if (-$_SESSION['alloc']->amount - $total_allocated < 0)
237 $font1 = "<font color=red>";
241 $font1 = $font2 = "";
242 $left_to_allocate = price_format(-$_SESSION['alloc']->amount - $total_allocated);
243 label_row(_("Left to Allocate"), $font1 . $left_to_allocate . $font2, "colspan=6 align=right",
244 "nowrap align=right id='left_to_allocate'");
247 hidden('TotalNumberOfAllocs', $counter);
248 // hidden('left_to_allocate', $left_to_allocate);
250 submit('UpdateDisplay', _("Update"), true, '', true);
252 submit('Process', _("Process"), true, '', true);
257 display_note(_("There are no unsettled transactions to allocate."), 0, 1);
261 submit('Cancel', _("Back to Allocations"), true, '', true);
262 echo "</center><br><br>";
267 //--------------------------------------------------------------------------------
269 if (isset($_GET['trans_no']) && isset($_GET['trans_type']))
271 get_allocations_for_transaction($_GET['trans_type'], $_GET['trans_no']);
274 if (isset($_SESSION['alloc']))
276 edit_allocations_for_transaction($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
279 //--------------------------------------------------------------------------------