Merged changes from main CVS up to 2.1.5
[fa-stable.git] / includes / ui / ui_view.inc
index 5f28443035b08840dad758bd11bd46a6d371e546..78b54a0a9bcaab348697c421a9436d3bdbfcdba6 100644 (file)
@@ -25,7 +25,7 @@ function get_supplier_trans_view_str($type, $trans_no, $label="", $icon=false,
        elseif ($type == 21)
                $viewer .= "view_supp_credit.php";
        elseif ($type == 22)
-               $viewer = "view_supp_payment.php";
+               $viewer .= "view_supp_payment.php";
        elseif ($type == 25)
                $viewer .= "view_grn.php";
        else
@@ -117,8 +117,6 @@ function get_banking_trans_view_str($type, $trans_no, $label="",
                $viewer = "gl_payment_view.php";
        elseif ($type == 2)
                $viewer = "gl_deposit_view.php";
-       elseif ($type == 0)
-               return $label;
        else
                return null;
 
@@ -177,7 +175,23 @@ function get_dimensions_trans_view_str($type, $trans_no, $label="", $icon=false,
        $class='', $id='')
 {
        if ($type == 40)
-               $viewer = "dimensions/view_dimension.php?trans_no=$trans_no";
+               $viewer = "dimensions/view/view_dimension.php?trans_no=$trans_no";
+       else
+               return null;
+
+       if ($label == "")
+               $label = $trans_no;
+
+       return viewer_link($label, $viewer, $class, $id,  $icon);
+}
+/*
+       Journal entry or cost update postings link
+*/
+function get_journal_trans_view_str($type, $trans_no, $label="", $icon=false, 
+       $class='', $id='')
+{
+       if ($type == 0 || $type == 35)
+               $viewer = "gl/view/gl_trans_view.php?type_id=$type&trans_no=$trans_no";
        else
                return null;
 
@@ -216,6 +230,10 @@ function get_trans_view_str($type, $trans_no, $label="", $icon=false,
        if ($view_str != null)
                return $view_str;
 
+       $view_str = get_journal_trans_view_str($type, $trans_no, $label, $icon, $class, $id);
+       if ($view_str != null)
+               return $view_str;
+
        return null;
 }
 
@@ -239,9 +257,12 @@ function exchange_rate_display($from_currency, $to_currency, $date_, $edit_rate=
                if ($date_ == Today()) {
                        $rate = get_date_exchange_rate($currency, $date_);
                        if (!$rate) {
-                               $rate = get_ecb_rate($currency);
-                               if ($rate) 
-                                       add_exchange_rate($currency, $date_, $rate, $rate);
+                               $row = get_currency($currency);
+                               if ($row['auto_update']) {
+                                       $rate = retrieve_exrate($currency, $date_);
+                                       if ($rate) 
+                                               add_exchange_rate($currency, $date_, $rate, $rate);
+                               }
                        }
                }
                if (!$rate)
@@ -253,7 +274,7 @@ function exchange_rate_display($from_currency, $to_currency, $date_, $edit_rate=
                if ($edit_rate)
                        text_row(_("Exchange Rate:"), '_ex_rate', $rate, 8, 8, null, "", " $from_currency = 1 $to_currency"); 
                else
-               label_row(_("Exchange Rate:"),"<span id='_ex_rate'>$rate</span> $from_currency = 1 $to_currency" );
+               label_row(_("Exchange Rate:"),"<span style='vertical-align:top;' id='_ex_rate'>$rate</span> $from_currency = 1 $to_currency" );
                $Ajax->addUpdate('_ex_rate','_ex_rate', $rate);
        }
 }
@@ -337,7 +358,8 @@ function view_stock_status_cell($stock_id, $description=null)
 
 function display_debit_or_credit_cells($value)
 {
-       if ($value > 0)
+       $value = round2($value, user_price_dec());
+       if ($value >= 0)
        {
                amount_cell($value);
                label_cell("");
@@ -347,12 +369,6 @@ function display_debit_or_credit_cells($value)
                label_cell("");
                amount_cell(abs($value));
        }
-       else
-       {
-               //label_cell("");
-               amount_cell(0);
-               label_cell("");
-       }
 }
 
 //--------------------------------------------------------------------------------------
@@ -508,7 +524,109 @@ function display_quick_entries(&$cart, $id, $base, $type, $descr='')
                        $cart->clear_items();
                $qe = get_quick_entry($id);
                if ($descr != '') $qe['description'] .= ': '.$descr;
-               $qe_lines = get_quick_entry_lines($id);
+               $result = get_quick_entry_lines($id);
+               $totrate = 0;
+               while ($row = db_fetch($result))
+               {
+                       $qe_lines[] = $row;
+
+                       switch (strtolower($row['action'])) {
+                               case "t": // post taxes calculated on base amount
+                               case "t+": // ditto & increase base amount
+                               case "t-": // ditto & reduce base amount
+                                       if (substr($qe_line['action'],0,1) != 'T') 
+                                               $totrate += get_tax_type_default_rate($row['dest_id']);
+                       }
+               }
+               $first = true;
+               $taxbase = 0;
+               foreach($qe_lines as $qe_line)
+               {
+                       switch (strtolower($qe_line['action'])) {
+                               case "=": // post current base amount to GL account
+                                       $part = $base;
+                                       break;
+                               case "a": // post amount to GL account and reduce base
+                                       $part = $qe_line['amount'];
+                                       break;
+                               case "a+": // post amount to GL account and increase base
+                                       $part = $qe_line['amount']; $base += $part;
+                                       break;
+                               case "a-": // post amount to GL account and reduce base
+                                       $part = $qe_line['amount']; $base -= $part;
+                                       break;
+                               case "%":       // store acc*amount% to GL account
+                                       $part = round2($base * $qe_line['amount'] / 100, user_price_dec());
+                                       break;
+                               case "%+":      // ditto & increase base amount
+                                       $part = round2($base * $qe_line['amount'] / 100, user_price_dec());
+                                       $base += $part;
+                                       break;
+                               case "%-":      // ditto & reduce base amount
+                                       $part = round2($base * $qe_line['amount'] / 100, user_price_dec());
+                                       $base -= $part;
+                                       break;
+                               case "t": // post taxes calculated on base amount
+                               case "t+": // ditto & increase base amount
+                               case "t-": // ditto & reduce base amount
+                                       if ($first)
+                                       {
+                                               $taxbase = $base/($totrate+100);
+                                               $first = false;
+                                       }
+
+                                       if (substr($qe_line['action'],0,1) != 'T') 
+                                               $part = $taxbase;
+                                       else
+                                               $part = $base;
+                                       $item_tax = get_tax_type($qe_line['dest_id']);
+                                       if ($type == QE_SUPPINV && substr($qe_line['action'],0,1) != 'T')
+                                       {
+                                               $taxgroup = $cart->tax_group_id;
+                                               $rates = 0;
+                                               $res = get_tax_group_items($cart->tax_group_id);
+                                               while ($row = db_fetch($res))
+                                                       $rates += $row['rate'];
+                                               if ($rates == 0)
+                                                       continue 2;
+                                       }
+                                       $tax = round2($part * $item_tax['rate'],  user_price_dec());
+                                       if ($tax==0) continue 2;
+                                       $gl_code = ($type == QE_DEPOSIT || ($type == QE_JOURNAL && $base < 0)) 
+                                               ? $item_tax['sales_gl_code'] : $item_tax['purchasing_gl_code'];
+                                       if (!is_tax_gl_unique($gl_code)) {
+                                               display_error(_("Cannot post to GL account used by more than one tax type."));
+                                               break 2;
+                                       }
+                                       if ($type != QE_SUPPINV)
+                                               $cart->add_gl_item($gl_code, 
+                                                       $qe_line['dimension_id'], $qe_line['dimension2_id'], 
+                                                       $tax, $qe['description']);
+                                       else 
+                                       {
+                                               $acc_name = get_gl_account_name($gl_code);
+                                               $cart->add_gl_codes_to_trans($gl_code, 
+                                                       $acc_name, $qe_line['dimension_id'], 
+                                                       $qe_line['dimension2_id'], $tax, $qe['description']);
+                                       }
+                                       if (strpos($qe_line['action'], '+'))
+                                               $base += $tax;
+                                       elseif (strpos($qe_line['action'], '-'))
+                                               $base -= $tax;
+                                       continue 2;
+                       }
+                       if ($type != QE_SUPPINV)
+                               $cart->add_gl_item($qe_line['dest_id'], $qe_line['dimension_id'],
+                                       $qe_line['dimension2_id'], $part, $qe['description']);
+                       else 
+                       {
+                               $acc_name = get_gl_account_name($qe_line['dest_id']);
+                               $cart->add_gl_codes_to_trans($qe_line['dest_id'], 
+                                       $acc_name, $qe_line['dimension_id'], 
+                                       $qe_line['dimension2_id'], $part, $qe['description']);
+                       }
+               }
+/*             
                while ($qe_line = db_fetch($qe_lines))
                {
                        switch (strtolower($qe_line['action'])) {
@@ -538,18 +656,32 @@ function display_quick_entries(&$cart, $id, $base, $type, $descr='')
                                case "t": // post taxes calculated on base amount
                                case "t+": // ditto & increase base amount
                                case "t-": // ditto & reduce base amount
-                                       $taxes = get_taxes_for_item_tax($qe_line['dest_id']);
+                                       //$taxes = get_taxes_for_item_tax($qe_line['dest_id']);
+                                       if ($type == QE_SUPPINV)
+                                               $qe_line['dest_id'] = $cart->tax_group_id;
+                                       $taxes = array();
+                                       $res = get_tax_group_items($qe_line['dest_id']);
+                                       while ($row = db_fetch($res))
+                                               $taxes[] = $row;
                                        $tax_total = 0;
+                                       $totrate = 0;
+                                       // find total tax 
+                                       if (substr($qe_line['action'],0,1) != 'T') {
+                                               foreach ($taxes as $index => $item_tax) {
+                                                       $totrate += $item_tax['rate'];
+                                               }
+                                       }
+                                       $taxbase = $base/($totrate+100);
                                        foreach ($taxes as $index => $item_tax) {
-                                               if(substr($qe_line['action'],0,1) != 'T')
-                                                       $tax = round2($base * $item_tax['rate'] 
-                                                               / ($item_tax['rate'] + 100),  user_price_dec());
-                                               else
-                                                       $tax = round2($base * $item_tax['rate'] / 100,  user_price_dec());
-
+                                               $tax = round2($taxbase * $item_tax['rate'],  user_price_dec());
                                                $gl_code = ($type == QE_DEPOSIT || ($type == QE_JOURNAL && $base < 0)) 
                                                        ? $item_tax['sales_gl_code'] : $item_tax['purchasing_gl_code'];
                                                $tax_total += $tax;
+                                               if ($tax==0) continue;
+                                               if (!is_tax_gl_unique($gl_code)) {
+                                                       display_error(_("Cannot post to GL account used by more than one tax type."));
+                                                       break 3;
+                                               }
                                                if ($type != QE_SUPPINV)
                                                        $cart->add_gl_item($gl_code, 
                                                                $qe_line['dimension_id'], $qe_line['dimension2_id'], 
@@ -579,6 +711,7 @@ function display_quick_entries(&$cart, $id, $base, $type, $descr='')
                                        $qe_line['dimension2_id'], $part, $qe['description']);
                        }
                }
+*/             
        }       
        return $bank_amount;
 }
@@ -586,16 +719,12 @@ function display_quick_entries(&$cart, $id, $base, $type, $descr='')
 
 function get_js_open_window($width, $height)
 {
-       $js = "\n<script type=\"text/javascript\">\n"
-               . "<!--\n"
-               . "function openWindow(url, title)\n"
+       $js ="function openWindow(url, title)\n"
                . "{\n"
                . " var left = (screen.width - $width) / 2;\n"
                . " var top = (screen.height - $height) / 2;\n"
                . " return window.open(url, title, 'width=$width,height=$height,left='+left+',top='+top+',screenX='+left+',screenY='+top+',status=no,scrollbars=yes');\n"
-               . "}\n"
-               . "-->\n"
-               . "</script>\n";
+               . "}\n";
        return $js;
 }
 
@@ -621,11 +750,17 @@ function default_focus($name=null, $form_no=0) {
     }
        return $name;
 }
+/*
+       Reset focus to next control element (e.g. link).
+*/
+function reset_focus()
+{
+       unset($_POST['_focus']);
+}
 
 function get_js_png_fix()
 {
-       $js = "<script type=\"text/javascript\">\n"
-               . "function fixPNG(myImage)\n"
+       $js = "function fixPNG(myImage)\n"
                . "{\n"
                . " var arVersion = navigator.appVersion.split(\"MSIE\")\n"
                . " var version = parseFloat(arVersion[1])\n"
@@ -644,8 +779,7 @@ function get_js_png_fix()
         . "    + \"(src=\'\" + myImage.src + \"\', sizingMethod='scale');\\\"></span>\"\n"
                . "  myImage.outerHTML = strNewHTML\n"
        . " }\n"
-               . "}\n"
-               . "</script>\n";
+               . "}\n";
        return $js;
 }