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, $_SESSION['alloc']->date_);
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);
92 // Exchange Variations Joe Hunt 2008-09-20 ////////////////////////////////////////
94 exchange_variation($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no,
95 $alloc_item->type, $alloc_item->type_no, $_SESSION['alloc']->date_,
96 $alloc_item->current_allocated, payment_person_types::supplier());
98 ///////////////////////////////////////////////////////////////////////////
99 $total_allocated += $alloc_item->current_allocated;
102 } /*end of the loop through the array of allocations made */
103 update_supp_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 . "/purchasing/allocations/supplier_allocation_main.php");
129 //--------------------------------------------------------------------------------
131 function get_allocations_for_transaction($type, $trans_no)
135 $supptrans = get_supp_trans($trans_no, $type);
137 $_SESSION['alloc'] = new allocation($trans_no, $type,
138 $supptrans["supplier_id"], $supptrans["supplier_name"],
139 $supptrans["Total"], sql2date($supptrans["tran_date"]));
141 /* Now populate the array of possible (and previous actual) allocations for this supplier */
142 /*First get the transactions that have outstanding balances ie Total-alloc >0 */
144 $trans_items = get_allocatable_to_supp_transactions($_SESSION['alloc']->person_id);
146 while ($myrow = db_fetch($trans_items))
148 $_SESSION['alloc']->add_item($myrow["type"], $myrow["trans_no"],
149 sql2date($myrow["tran_date"]),
150 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_supp_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"]),
167 sql2date($myrow["due_date"]),
169 $myrow["alloc"] - $myrow["amt"], $myrow["amt"]);
173 //--------------------------------------------------------------------------------
175 function edit_allocations_for_transaction($type, $trans_no)
179 start_form(false, true);
181 display_heading(_("Allocation of") . " " . systypes::name($_SESSION['alloc']->type) . " # " . $_SESSION['alloc']->trans_no);
183 display_heading($_SESSION['alloc']->person_name);
185 display_heading2(_("Date:") . " <b>" . $_SESSION['alloc']->date_ . "</b>");
186 display_heading2(_("Total:") . " <b>" . price_format(-$_SESSION['alloc']->amount) . "</b>");
190 div_start('alloc_tbl');
191 if (count($_SESSION['alloc']->allocs) > 0)
193 start_table($table_style);
194 $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
195 _("Other Allocations"), _("This Allocation"), _("Left to Allocate"),'');
198 $k = $counter = $total_allocated = 0;
200 foreach ($_SESSION['alloc']->allocs as $alloc_item)
202 alt_table_row_color($k);
204 label_cell(systypes::name($alloc_item->type));
205 label_cell(get_trans_view_str($alloc_item->type, $alloc_item->type_no));
206 label_cell($alloc_item->date_, "align=right");
207 label_cell($alloc_item->due_date, "align=right");
208 amount_cell($alloc_item->amount);
209 amount_cell($alloc_item->amount_allocated);
211 $_POST['amount' . $counter] = price_format($alloc_item->current_allocated);
212 amount_cells(null, "amount" . $counter, price_format('amount' . $counter));
214 $un_allocated = round($alloc_item->amount - $alloc_item->amount_allocated, 6);
215 amount_cell($un_allocated);
216 label_cell("<a href='#' name=Alloc$counter onclick='allocate_all(this.name.substr(5));return true;'>"
217 . _("All") . "</a>");
218 label_cell("<a href='#' name=DeAll$counter onclick='allocate_none(this.name.substr(5));return true;'>"
219 . _("None") . "</a>".hidden("un_allocated" . $counter, $un_allocated, false));
222 $total_allocated += input_num('amount' . $counter);
226 label_row(_("Total Allocated"), number_format2($total_allocated,user_price_dec()),
227 "colspan=6 align=right", "align=right id='total_allocated'");
228 if (-$_SESSION['alloc']->amount - $total_allocated < 0)
230 $font1 = "<font color=red>";
234 $font1 = $font2 = "";
235 $left_to_allocate = price_format(-$_SESSION['alloc']->amount - $total_allocated);
236 label_row(_("Left to Allocate"), $font1 . $left_to_allocate . $font2, "colspan=6 align=right",
237 "nowrap align=right id='left_to_allocate'");
240 hidden('TotalNumberOfAllocs', $counter);
242 submit_center_first('UpdateDisplay', _("Refresh"), _('Start again allocation of selected amount'), true);
243 submit('Process', _("Process"), true, _('Process allocations'), true);
244 submit_center_last('Cancel', _("Back to Allocations"),
245 _('Abandon allocations and return to selection of allocatable amounts'), true);
249 display_note(_("There are no unsettled transactions to allocate."), 0, 1);
250 submit_center('Cancel', _("Back to Allocations"), true,
251 _('Abandon allocations and return to selection of allocatable amounts'), true);
258 //--------------------------------------------------------------------------------
260 if (isset($_GET['trans_no']) && isset($_GET['trans_type']))
262 get_allocations_for_transaction($_GET['trans_type'], $_GET['trans_no']);
264 if(get_post('UpdateDisplay'))
266 $trans_no = $_SESSION['alloc']->trans_no;
267 $type = $_SESSION['alloc']->type;
269 get_allocations_for_transaction($type, $trans_no);
270 $Ajax->activate('alloc_tbl');
273 if (isset($_SESSION['alloc']))
275 edit_allocations_for_transaction($_SESSION['alloc']->type, $_SESSION['alloc']->trans_no);
278 //--------------------------------------------------------------------------------