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/date_functions.inc");
9 include_once($path_to_root . "/includes/ui.inc");
10 include_once($path_to_root . "/includes/banking.inc");
11 include_once($path_to_root . "/sales/includes/sales_db.inc");
14 if ($use_popup_windows)
15 $js .= get_js_open_window(900, 500);
17 add_js_file('allocate.js');
19 page(_("Allocate Supplier Payment or Credit Note"), false, false, "", $js);
21 //--------------------------------------------------------------------------------
23 function clear_allocations()
25 if (isset($_SESSION['alloc']))
27 unset($_SESSION['alloc']->allocs);
28 unset($_SESSION['alloc']);
30 session_register("alloc");
32 //--------------------------------------------------------------------------------
38 for ($counter = 0; $counter < $_POST["TotalNumberOfAllocs"]; $counter++)
40 if (!check_num('amount' . $counter, 0))
42 display_error(_("The entry for one or more amounts is invalid or negative."));
43 set_focus('amount'.$counter);
47 /*Now check to see that the AllocAmt is no greater than the
48 amount left to be allocated against the transaction under review */
49 if (input_num('amount' . $counter) > $_POST['un_allocated' . $counter])
51 //$_POST['amount' . $counter] = $_POST['un_allocated' . $counter];
54 $_SESSION['alloc']->allocs[$counter]->current_allocated = input_num('amount' . $counter);
56 $total_allocated += input_num('amount' . $counter);
59 if ($total_allocated + $_SESSION['alloc']->amount > sys_prefs::allocation_settled_allowance())
61 display_error(_("These allocations cannot be processed because the amount allocated is more than the total amount left to allocate."));
62 //echo _("Total allocated:") . " " . $total_allocated ;
63 //echo " " . _("Total amount that can be allocated:") . " " . -$_SESSION['alloc']->TransAmt . "<BR>";
70 //-----------------------------------------------------------------------------------
72 function handle_process()
76 // clear all the allocations for this payment/credit
77 clear_supp_alloctions($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
79 // now add the new allocations
81 foreach ($_SESSION['alloc']->allocs as $alloc_item)
83 if ($alloc_item->current_allocated > 0)
85 add_supp_allocation($alloc_item->current_allocated,
86 $_SESSION['alloc']->type, $_SESSION['alloc']->trans_no,
87 $alloc_item->type, $alloc_item->type_no, $_SESSION['alloc']->date_);
89 update_supp_trans_allocation($alloc_item->type, $alloc_item->type_no,
90 $alloc_item->current_allocated);
91 $total_allocated += $alloc_item->current_allocated;
94 } /*end of the loop through the array of allocations made */
95 update_supp_trans_allocation($_SESSION['alloc']->type,
96 $_SESSION['alloc']->trans_no, $total_allocated);
103 //--------------------------------------------------------------------------------
105 if (isset($_POST['Process']))
110 $_POST['Cancel'] = 1;
114 //--------------------------------------------------------------------------------
116 if (isset($_POST['Cancel']))
119 meta_forward($path_to_root . "/purchasing/allocations/supplier_allocation_main.php");
121 //--------------------------------------------------------------------------------
123 function get_allocations_for_transaction($type, $trans_no)
127 $supptrans = get_supp_trans($trans_no, $type);
129 $_SESSION['alloc'] = new allocation($trans_no, $type,
130 $supptrans["supplier_id"], $supptrans["supplier_name"],
131 $supptrans["Total"], sql2date($supptrans["tran_date"]));
133 /* Now populate the array of possible (and previous actual) allocations for this supplier */
134 /*First get the transactions that have outstanding balances ie Total-alloc >0 */
136 $trans_items = get_allocatable_to_supp_transactions($_SESSION['alloc']->person_id);
138 while ($myrow = db_fetch($trans_items))
140 $_SESSION['alloc']->add_item($myrow["type"], $myrow["trans_no"],
141 sql2date($myrow["tran_date"]),
142 sql2date($myrow["due_date"]),
143 $myrow["Total"], // trans total
144 $myrow["alloc"], // trans total allocated
145 0); // this allocation
149 /* Now get trans that might have previously been allocated to by this trans
150 NB existing entries where still some of the trans outstanding entered from
151 above logic will be overwritten with the prev alloc detail below */
153 $trans_items = get_allocatable_to_supp_transactions($_SESSION['alloc']->person_id, $trans_no, $type);
155 while ($myrow = db_fetch($trans_items))
157 $_SESSION['alloc']->add_or_update_item ($myrow["type"], $myrow["trans_no"],
158 sql2date($myrow["tran_date"]),
159 sql2date($myrow["due_date"]),
161 $myrow["alloc"] - $myrow["amt"], $myrow["amt"]);
165 //--------------------------------------------------------------------------------
167 function edit_allocations_for_transaction($type, $trans_no)
171 start_form(false, true);
173 display_heading(_("Allocation of") . " " . systypes::name($_SESSION['alloc']->type) . " # " . $_SESSION['alloc']->trans_no);
175 display_heading($_SESSION['alloc']->person_name);
177 display_heading2(_("Date:") . " <b>" . $_SESSION['alloc']->date_ . "</b>");
178 display_heading2(_("Total:") . " <b>" . price_format(-$_SESSION['alloc']->amount) . "</b>");
182 div_start('alloc_tbl');
183 if (count($_SESSION['alloc']->allocs) > 0)
185 start_table($table_style);
186 $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
187 _("Other Allocations"), _("This Allocation"), _("Left to Allocate"),'');
190 $k = $counter = $total_allocated = 0;
192 foreach ($_SESSION['alloc']->allocs as $alloc_item)
194 alt_table_row_color($k);
196 label_cell(systypes::name($alloc_item->type));
197 label_cell(get_trans_view_str($alloc_item->type, $alloc_item->type_no));
198 label_cell($alloc_item->date_, "align=right");
199 label_cell($alloc_item->due_date, "align=right");
200 amount_cell($alloc_item->amount);
201 amount_cell($alloc_item->amount_allocated);
203 $_POST['amount' . $counter] = price_format($alloc_item->current_allocated);
204 amount_cells(null, "amount" . $counter, price_format('amount' . $counter));
206 $un_allocated = round($alloc_item->amount - $alloc_item->amount_allocated, 6);
207 amount_cell($un_allocated);
208 label_cell("<a href='#' name=Alloc$counter onclick='allocate_all(this.name.substr(5));return true;'>"
209 . _("All") . "</a>");
210 label_cell("<a href='#' name=DeAll$counter onclick='allocate_none(this.name.substr(5));return true;'>"
211 . _("None") . "</a>".hidden("un_allocated" . $counter, $un_allocated, false));
214 $total_allocated += input_num('amount' . $counter);
218 label_row(_("Total Allocated"), number_format2($total_allocated,user_price_dec()),
219 "colspan=6 align=right", "align=right id='total_allocated'");
220 if (-$_SESSION['alloc']->amount - $total_allocated < 0)
222 $font1 = "<font color=red>";
226 $font1 = $font2 = "";
227 $left_to_allocate = price_format(-$_SESSION['alloc']->amount - $total_allocated);
228 label_row(_("Left to Allocate"), $font1 . $left_to_allocate . $font2, "colspan=6 align=right",
229 "nowrap align=right id='left_to_allocate'");
232 hidden('TotalNumberOfAllocs', $counter);
234 submit_center_first('UpdateDisplay', _("Refresh"), _('Start again allocation of selected amount'), true);
235 submit('Process', _("Process"), true, _('Process allocations'), true);
236 submit_center_last('Cancel', _("Back to Allocations"),
237 _('Abandon allocations and return to selection of allocatable amounts'), true);
241 display_note(_("There are no unsettled transactions to allocate."), 0, 1);
242 submit_center('Cancel', _("Back to Allocations"), true,
243 _('Abandon allocations and return to selection of allocatable amounts'), true);
250 //--------------------------------------------------------------------------------
252 if (isset($_GET['trans_no']) && isset($_GET['trans_type']))
254 get_allocations_for_transaction($_GET['trans_type'], $_GET['trans_no']);
256 if(get_post('UpdateDisplay'))
258 $trans_no = $_SESSION['alloc']->trans_no;
259 $type = $_SESSION['alloc']->type;
261 get_allocations_for_transaction($type, $trans_no);
262 $Ajax->activate('alloc_tbl');
265 if (isset($_SESSION['alloc']))
267 edit_allocations_for_transaction($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
270 //--------------------------------------------------------------------------------