Small cleanup
[fa-stable.git] / includes / ui / allocation_cart.inc
index 6945a4b717cc85adc852df737a45583b92641339..377456b15e262e6b6718c91944da2add925eab9a 100644 (file)
@@ -22,6 +22,7 @@ class allocation
        var $type;
        var $person_id = '';
        var $person_name = '';
        var $type;
        var $person_id = '';
        var $person_name = '';
+       var $person_type;       // true - supplier, otherwise customer
        var $date_;
        var $amount = 0; /*Total amount of the transaction in FX */
        
        var $date_;
        var $amount = 0; /*Total amount of the transaction in FX */
        
@@ -80,40 +81,45 @@ class allocation
                }
         return $this->add_item($type, $type_no, $date_, $due_date, 
                $amount, $amount_allocated, $current_allocated);
                }
         return $this->add_item($type, $type_no, $date_, $due_date, 
                $amount, $amount_allocated, $current_allocated);
-       }                                               
+       }
 
        //
        //      Read payment or credit current/available allocations to cart.
        //
 
        //
        //      Read payment or credit current/available allocations to cart.
        //
+       // FIXME - read all transactions below twice seems to be suboptimal
+       //
        function read($type = null, $trans_no = 0) 
        {
                if ($type == null) {    // re-read
                        $type = $this->type;
                        $trans_no = $this->trans_no;
                }
        function read($type = null, $trans_no = 0) 
        {
                if ($type == null) {    // re-read
                        $type = $this->type;
                        $trans_no = $this->trans_no;
                }
-               
-               $sup = $type == 21 || $type == 22;
+               if ($type == ST_BANKPAYMENT || $type == ST_BANKDEPOSIT) {
+                       $bank_trans = db_fetch(get_bank_trans($type, $trans_no));
+                       $this->person_type = $bank_trans['person_type_id'] == PT_SUPPLIER;
+               } else
+                       $this->person_type = $type == ST_SUPPCREDIT || $type == ST_SUPPAYMENT;
                $this->allocs = array();
 
                if ($trans_no) {
                $this->allocs = array();
 
                if ($trans_no) {
-                       $trans = $sup ? get_supp_trans($trans_no, $type) 
+                       $trans = $this->person_type ? get_supp_trans($trans_no, $type) 
                                : get_customer_trans($trans_no, $type);
 
                                : get_customer_trans($trans_no, $type);
 
-                       $this->person_id = $trans[$sup ? 'supplier_id':'debtor_no'];
-                       $this->person_name = $trans[$sup ? "supplier_name":"DebtorName"];
+                       $this->person_id = $trans[$this->person_type ? 'supplier_id':'debtor_no'];
+                       $this->person_name = $trans[$this->person_type ? "supplier_name":"DebtorName"];
                        $this->amount = $trans["Total"];
                        $this->date_ = sql2date($trans["tran_date"]);
                } 
                else {
                        $this->amount = $trans["Total"];
                        $this->date_ = sql2date($trans["tran_date"]);
                } 
                else {
-                       $this->person_id = get_post($sup ? 'supplier_id':'customer_id');
-                       $this->date_ = get_post($sup ? 'DatePaid':'DateBanked', Today());
+                       $this->person_id = get_post($this->person_type ? 'supplier_id':'customer_id');
+                       $this->date_ = get_post($this->person_type ? 'DatePaid':'DateBanked', Today());
                }
 
        /* Now populate the array of possible (and previous actual) allocations 
                for this customer/supplier. First get the transactions that have 
                outstanding balances ie Total-alloc >0 */
 
                }
 
        /* Now populate the array of possible (and previous actual) allocations 
                for this customer/supplier. First get the transactions that have 
                outstanding balances ie Total-alloc >0 */
 
-               if ($sup)
+               if ($this->person_type)
                        $trans_items = get_allocatable_to_supp_transactions($this->person_id);
                else
                        $trans_items = get_allocatable_to_cust_transactions($this->person_id);
                        $trans_items = get_allocatable_to_supp_transactions($this->person_id);
                else
                        $trans_items = get_allocatable_to_cust_transactions($this->person_id);
@@ -127,20 +133,19 @@ class allocation
                                $myrow["alloc"], // trans total allocated
                                0); // this allocation
                }
                                $myrow["alloc"], // trans total allocated
                                0); // this allocation
                }
-
                if ($trans_no == 0) return; // this is new payment
 
        /* Now get trans that might have previously been allocated to by this trans
        NB existing entries where still some of the trans outstanding entered from
        above logic will be overwritten with the prev alloc detail below */
 
                if ($trans_no == 0) return; // this is new payment
 
        /* Now get trans that might have previously been allocated to by this trans
        NB existing entries where still some of the trans outstanding entered from
        above logic will be overwritten with the prev alloc detail below */
 
-               if ($sup)
+               if ($this->person_type)
                        $trans_items = get_allocatable_to_supp_transactions($this->person_id, 
                                $trans_no, $type);
                else
                        $trans_items = get_allocatable_to_cust_transactions($this->person_id, 
                                $trans_no, $type);
                        $trans_items = get_allocatable_to_supp_transactions($this->person_id, 
                                $trans_no, $type);
                else
                        $trans_items = get_allocatable_to_cust_transactions($this->person_id, 
                                $trans_no, $type);
-       
+
                while ($myrow = db_fetch($trans_items))
                {
                        $this->add_or_update_item ($myrow["type"], $myrow["trans_no"],
                while ($myrow = db_fetch($trans_items))
                {
                        $this->add_or_update_item ($myrow["type"], $myrow["trans_no"],
@@ -155,11 +160,9 @@ class allocation
        //
        function write()
        {
        //
        function write()
        {
-               $sup = $this->type == 21 || $this->type == 22;
-
                begin_transaction();
 
                begin_transaction();
 
-               if ($sup)
+               if ($this->person_type)
                        clear_supp_alloctions($this->type, $this->trans_no, $this->date_);
                else
                        clear_cust_alloctions($this->type, $this->trans_no, $this->date_);
                        clear_supp_alloctions($this->type, $this->trans_no, $this->date_);
                else
                        clear_cust_alloctions($this->type, $this->trans_no, $this->date_);
@@ -170,7 +173,7 @@ class allocation
                {
                        if ($alloc_item->current_allocated > 0)
                        {
                {
                        if ($alloc_item->current_allocated > 0)
                        {
-                               if ($sup) {
+                               if ($this->person_type) {
                                        add_supp_allocation($alloc_item->current_allocated,
                                                $this->type, $this->trans_no,
                                        $alloc_item->type, $alloc_item->type_no, $this->date_);
                                        add_supp_allocation($alloc_item->current_allocated,
                                                $this->type, $this->trans_no,
                                        $alloc_item->type, $alloc_item->type_no, $this->date_);
@@ -186,12 +189,10 @@ class allocation
                                                $alloc_item->type_no, $alloc_item->current_allocated);
                                }
                                // Exchange Variations Joe Hunt 2008-09-20 ////////////////////
                                                $alloc_item->type_no, $alloc_item->current_allocated);
                                }
                                // Exchange Variations Joe Hunt 2008-09-20 ////////////////////
-
                                exchange_variation($this->type, $this->trans_no,
                                        $alloc_item->type, $alloc_item->type_no, $this->date_,
                                        $alloc_item->current_allocated,
                                exchange_variation($this->type, $this->trans_no,
                                        $alloc_item->type, $alloc_item->type_no, $this->date_,
                                        $alloc_item->current_allocated,
-                                       $sup ? payment_person_types::supplier() 
-                                               : payment_person_types::customer());
+                                       $this->person_type ? PT_SUPPLIER : PT_CUSTOMER);
                                
 
                                //////////////////////////////////////////////////////////////
                                
 
                                //////////////////////////////////////////////////////////////
@@ -199,13 +200,13 @@ class allocation
                        }
 
                }  /*end of the loop through the array of allocations made */
                        }
 
                }  /*end of the loop through the array of allocations made */
-               if ($sup)
+               if ($this->person_type)
                        update_supp_trans_allocation($this->type, $this->trans_no, 
                                $total_allocated);
                else
                        update_debtor_trans_allocation($this->type,     $this->trans_no, 
                                $total_allocated);
                        update_supp_trans_allocation($this->type, $this->trans_no, 
                                $total_allocated);
                else
                        update_debtor_trans_allocation($this->type,     $this->trans_no, 
                                $total_allocated);
-       
+
                commit_transaction();
 
        }
                commit_transaction();
 
        }
@@ -248,13 +249,13 @@ class allocation_item
 
 function show_allocatable($show_totals) {
 
 
 function show_allocatable($show_totals) {
 
-       global $table_style;
+       global $systypes_array;
        
     $k = $counter = $total_allocated = 0;
 
        if (count($_SESSION['alloc']->allocs)) 
        {
        
     $k = $counter = $total_allocated = 0;
 
        if (count($_SESSION['alloc']->allocs)) 
        {
-               start_table($table_style);
+               start_table(TABLESTYLE, "width=60%");
                $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
                        _("Other Allocations"), _("This Allocation"), _("Left to Allocate"),'','');
                table_header($th);
                $th = array(_("Transaction Type"), _("#"), _("Date"), _("Due Date"), _("Amount"),
                        _("Other Allocations"), _("This Allocation"), _("Left to Allocate"),'','');
                table_header($th);
@@ -262,7 +263,7 @@ function show_allocatable($show_totals) {
                foreach ($_SESSION['alloc']->allocs as $alloc_item)
            {
                        alt_table_row_color($k);
                foreach ($_SESSION['alloc']->allocs as $alloc_item)
            {
                        alt_table_row_color($k);
-               label_cell(systypes::name($alloc_item->type));
+               label_cell($systypes_array[$alloc_item->type]);
                        label_cell(get_trans_view_str($alloc_item->type, $alloc_item->type_no));
                label_cell($alloc_item->date_, "align=right");
                label_cell($alloc_item->due_date, "align=right");
                        label_cell(get_trans_view_str($alloc_item->type, $alloc_item->type_no));
                label_cell($alloc_item->date_, "align=right");
                label_cell($alloc_item->due_date, "align=right");
@@ -273,7 +274,7 @@ function show_allocatable($show_totals) {
                amount_cells(null, "amount" . $counter, price_format('amount' . $counter));
 
                $un_allocated = round($alloc_item->amount - $alloc_item->amount_allocated, 6);
                amount_cells(null, "amount" . $counter, price_format('amount' . $counter));
 
                $un_allocated = round($alloc_item->amount - $alloc_item->amount_allocated, 6);
-               amount_cell($un_allocated);
+               amount_cell($un_allocated, false,'', 'maxval'.$counter);
                        label_cell("<a href='#' name=Alloc$counter onclick='allocate_all(this.name.substr(5));return true;'>"
                                 . _("All") . "</a>");
                        label_cell("<a href='#' name=DeAll$counter onclick='allocate_none(this.name.substr(5));return true;'>"
                        label_cell("<a href='#' name=Alloc$counter onclick='allocate_all(this.name.substr(5));return true;'>"
                                 . _("All") . "</a>");
                        label_cell("<a href='#' name=DeAll$counter onclick='allocate_none(this.name.substr(5));return true;'>"
@@ -289,7 +290,9 @@ function show_allocatable($show_totals) {
                        "colspan=6 align=right", "align=right id='total_allocated'", 3);
                        $amount = $_SESSION['alloc']->amount;
 
                        "colspan=6 align=right", "align=right id='total_allocated'", 3);
                        $amount = $_SESSION['alloc']->amount;
 
-                       if ($_SESSION['alloc']->type == 21 || $_SESSION['alloc']->type == 22) 
+                       if ($_SESSION['alloc']->type == ST_SUPPCREDIT
+                               || $_SESSION['alloc']->type == ST_SUPPAYMENT
+                               ||  $_SESSION['alloc']->type == ST_BANKPAYMENT)
                                $amount = -$amount;
                        
                        if ($amount - $total_allocated < 0)
                                $amount = -$amount;
                        
                        if ($amount - $total_allocated < 0)
@@ -312,6 +315,8 @@ function show_allocatable($show_totals) {
 
 function check_allocations()
 {
 
 function check_allocations()
 {
+       global $SysPrefs;
+
        $total_allocated = 0;
 
        for ($counter = 0; $counter < $_POST["TotalNumberOfAllocs"]; $counter++)
        $total_allocated = 0;
 
        for ($counter = 0; $counter < $_POST["TotalNumberOfAllocs"]; $counter++)
@@ -325,9 +330,11 @@ function check_allocations()
 
                  /*Now check to see that the AllocAmt is no greater than the
                 amount left to be allocated against the transaction under review */
 
                  /*Now check to see that the AllocAmt is no greater than the
                 amount left to be allocated against the transaction under review */
-                if (input_num('amount' . $counter) > get_post('un_allocated' . $counter))
+                if (input_num('amount' . $counter) > input_num('un_allocated' . $counter))
                 {
                 {
-                    //$_POST['amount' . $counter] = $_POST['un_allocated' . $counter];
+                       display_error(_("At least one transaction is overallocated."));
+                       set_focus('amount'.$counter);
+                       return false;
                 }
 
                 $_SESSION['alloc']->allocs[$counter]->current_allocated = input_num('amount' . $counter);
                 }
 
                 $_SESSION['alloc']->allocs[$counter]->current_allocated = input_num('amount' . $counter);
@@ -336,10 +343,12 @@ function check_allocations()
        }
 
        $amount = $_SESSION['alloc']->amount;
        }
 
        $amount = $_SESSION['alloc']->amount;
-       if ($_SESSION['alloc']->type == 21 || $_SESSION['alloc']->type == 22) 
+       
+
+       if (in_array($_SESSION['alloc']->type, array(ST_BANKPAYMENT, ST_SUPPCREDIT, ST_SUPPAYMENT)))
                $amount = -$amount;
 
                $amount = -$amount;
 
-       if ($total_allocated - $amount  > sys_prefs::allocation_settled_allowance())
+       if ($total_allocated - ($amount + input_num('discount'))  > $SysPrefs->allocation_settled_allowance())
        {
                display_error(_("These allocations cannot be processed because the amount allocated is more than the total amount left to allocate."));
                return false;
        {
                display_error(_("These allocations cannot be processed because the amount allocated is more than the total amount left to allocate."));
                return false;