Registration of changes on GL tax acounts into tax_details
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 22 Jan 2009 16:31:35 +0000 (16:31 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 22 Jan 2009 16:31:35 +0000 (16:31 +0000)
gl/includes/db/gl_db_banking.inc
gl/includes/db/gl_db_trans.inc
purchasing/includes/db/invoice_db.inc
taxes/tax_calc.inc

index 0f232513da17ebacd8c8fc2c4bfbf2b35b2138b5..251d38058285134ad2eca73e9471777b4de09bf7 100644 (file)
@@ -135,10 +135,14 @@ function add_bank_transaction($trans_type, $from_account, $items, $date_,
                        $date_, $gl_item->amount, $person_type_id, $person_id, 
                                $currency, "Cannot insert a destination bank transaction");
        }
+               // store tax details if the gl account is a tax account
+
+               $amount = $gl_item->amount;
+               add_gl_tax_details($gl_item->code_id, $trans_type, $trans_no, $amount);
        }
 
        // do the source account postings
-    add_gl_trans($trans_type, $trans_no, $date_, $bank_gl_account, 0, 0, "",
+    add_gl_trans($trans_type, $trans_no, $date_, $bank_gl_account, 0, 0, $memo_,
        -$total, null, $person_type_id, $person_id);
 
        add_comments($trans_type, $trans_no, $date_, $memo_);
index af74ee3c86900e993d2dcfae9c7df86377883fe0..b93c75e20256058e568127dd82a679e3e270034a 100644 (file)
@@ -200,7 +200,24 @@ function get_budget_trans_from_to($from_date, $to_date, $account, $dimension=0,
 }
 
 //--------------------------------------------------------------------------------
+//     Stores GL journal/bank transaction on tax account for tax report
+//
+function add_gl_tax_details($gl_code, $trans_type, $trans_id, $amount)
+{
+       $tax_type = is_tax_account($gl_code);
+       if(!$tax_type) return;  // $gl_code is not tax account
+
+       $tax = get_tax_type($tax_type);
+       if ($gl_code == $tax['sales_gl_code'])
+               add_customer_trans_tax_detail_item($trans_type, $trans_id, 
+                       $tax['id'], $tax['rate'], 0, -$amount);
+       else
+               add_supp_invoice_tax_item($trans_type, $trans_id, 
+                       $tax['id'], $tax['rate'], 0, $amount);
+                       
+}
 
+//--------------------------------------------------------------------------------
 function add_journal_entries($items, $date_, $ref, $reverse, $memo_=null)
 {
        begin_transaction();
@@ -223,8 +240,11 @@ function add_journal_entries($items, $date_, $ref, $reverse, $memo_=null)
                        0, "", get_company_currency(),
                        "Cannot insert a destination bank transaction");
        }
+               // store tax details if the gl account is a tax account
+               add_gl_tax_details($journal_item->code_id, 
+                       $trans_type, $trans_id, $journal_item->amount);
        }
-
+       
        add_comments($trans_type, $trans_id, $date_, $memo_);
 
        references::save($trans_type, $trans_id, $ref);
@@ -252,6 +272,9 @@ function add_journal_entries($items, $date_, $ref, $reverse, $memo_=null)
                                0, "", get_company_currency(),
                                "Cannot insert a destination bank transaction");
                }
+                       // store tax details if the gl account is a tax account
+                       add_gl_tax_details($journal_item->code_id, 
+                               $trans_type, $trans_id, -$journal_item->amount);
        }
 
        add_comments($trans_type, $trans_id_reverse, $reversingDate, $memo_);
index 4980529770f87249f67ec2078ab0025dac4e7361..8f057bfc9551d4af1242e48e94865f5ab48be060 100644 (file)
@@ -175,6 +175,10 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b
 
                add_supp_invoice_gl_item($trans_type, $invoice_id, $entered_gl_code->gl_code,
                        $entered_gl_code->amount, $memo_);
+
+               // store tax details if the gl account is a tax account
+               add_gl_tax_details($entered_gl_code->gl_code, 
+                       $trans_type, $invoice_id, $entered_gl_code->amount);
     }
     foreach ($supp_trans->grn_items as $entered_grn)
     {
index acc8f0f0633d468aadd47b528f3ad2262b717bd9..a9bf26e624ba5d6913c48596b26950ab329e0914 100644 (file)
@@ -214,6 +214,68 @@ function get_tax_for_items($items, $prices, $shipping_cost, $tax_group, $tax_inc
 
        return $ret_tax_array;
 }
+//
+//     Get all taxes for given tax_type_id. This can be used when 
+//     no tax group exemptions are active (local sales).
+//     To be used in quick entries.
+//
+function get_taxes_for_item_tax($tax_type_id)
+{
+       $item_tax_type = get_item_tax_type($tax_type_id);
+       
+       // if the item is exempt from all taxes then return 0
+       if ($item_tax_type["exempt"])
+               return null;
+               
+       // get the exemptions for this item tax type
+       $item_tax_type_exemptions_db = get_item_tax_type_exemptions($tax_type_id);
+       
+       // read them all into an array to minimize db querying
+       $item_tax_type_exemptions = array();
+       while ($item_tax_type_exemp = db_fetch($item_tax_type_exemptions_db))
+       {
+               $item_tax_type_exemptions[] = $item_tax_type_exemp["tax_type_id"];
+       }
+       
+       $ret_tax_array = array();
+
+       $tax_rates = get_all_tax_types_simple();
+       // if any of the taxes are in the exemptions, then skip
+       while($tax_rate = db_fetch($tax_rates)) 
+       { 
+               
+               $skip = false;                  
+               
+               // if it's in the exemptions, skip
+               foreach ($item_tax_type_exemptions as $exemption) 
+               {
+                       if (($tax_rate['id'] == $exemption)) 
+                       {
+                       $skip = true;
+                       break;
+                       }
+               }
+               
+               if (!$skip) 
+               {
+                       $index = $tax_rate['id'];
+                       $ret_tax_array[$index] = $tax_rate;
+               }
+       }
+       
+       return $ret_tax_array;
+}
 
+function is_tax_account($account_code)
+{
+       $sql= "SELECT id FROM ".TB_PREF."tax_types WHERE 
+               sales_gl_code='$account_code' OR purchasing_gl_code='$account_code'";
+       $result = db_query($sql, "checking account is tax account");
+       if (db_num_rows($result) > 0) {
+               $acct = db_fetch($result);
+               return $acct['id'];
+       } else
+               return false;
+}
 
 ?>
\ No newline at end of file