'notes', 'email_id' => 'emails' ); function EcmReceipt() { parent::SugarBean(); $this->setupCustomFields('EcmReceipts'); foreach ($this->field_defs as $field) { $this->field_name_map[$field['name']] = $field; } } var $new_schema = true; function get_summary_text() { return "$this->name"; } function create_list_query($order_by, $where, $show_deleted = 0) { // Fill in the assigned_user_name $custom_join = $this->custom_fields->getJOIN(); $query = "SELECT "; $query .= "ecmreceipts.* ,users.user_name as assigned_user_name"; if ($custom_join) { $query .= $custom_join['select']; } $query .= " FROM ecmreceipts LEFT JOIN users ON ecmreceipts.assigned_user_id=users.id"; $query .= " "; if ($custom_join) { $query .= $custom_join['join']; } $where_auto = '1=1'; if ($show_deleted == 0) { $where_auto = " $this->table_name.deleted=0 "; } else if ($show_deleted == 1) { $where_auto = " $this->table_name.deleted=1 "; } if ($where != "") $query .= "where $where AND " . $where_auto; else $query .= "where " . $where_auto; if (substr_count($order_by, '.') > 0) { $query .= " ORDER BY $order_by"; } else if ($order_by != "") $query .= " ORDER BY $order_by"; else $query .= " ORDER BY ecmreceipts.name"; return $query; } function create_export_query($order_by, $where) { $custom_join = $this->custom_fields->getJOIN(); $query = "SELECT ecmreceipts.*, users.user_name assigned_user_name"; if ($custom_join) { $query .= $custom_join['select']; } $query .= " FROM ecmreceipts "; $query .= " LEFT JOIN users ON ecmreceipts.assigned_user_id=users.id"; if ($custom_join) { $query .= $custom_join['join']; } $query .= ""; $where_auto = " ecmreceipts.deleted=0 "; if ($where != "") $query .= " where $where AND " . $where_auto; else $query .= " where " . $where_auto; if ($order_by != "") $query .= " ORDER BY $order_by"; else $query .= " ORDER BY ecmreceipts.name"; return $query; } function fill_in_additional_list_fields() { } function fill_in_additional_detail_fields() { //FILL IN THE ASSIGNED_USER_NAME $this->assigned_user_name = get_assigned_user_name($this->assigned_user_id); $this->created_by_name = get_assigned_user_name($this->created_by); $this->modified_by_name = get_assigned_user_name($this->modified_user_id); $result = $this->db->query("SELECT status FROM ecmreceipts WHERE id='$this->id'"); if ($result) $row = $this->db->fetchByAssoc($result); if (is_resource($result)) { $row = $this->db->fetchByAssoc($result); if ($row) { $this->status = $row['status']; } } $db = $GLOBALS['db']; if (isset($this->id)) { $w = $db->query("select document_no, id from ecmreceipts where ecmreceipt_id='" . $this->id . "' and deleted='0'"); while ($r = $db->fetchByAssoc($w)) { $invs[] = "" . $r['document_no'] . ""; } $this->ecmreceipt_name = @implode(", ", $invs); } } function get_list_view_data() { global $current_language; $this->fill_in_additional_detail_fields(); $app_list_strings = return_app_list_strings_language($current_language); $mod_strings = return_module_language($current_language, 'EcmReceipts'); $the_array = parent::get_list_view_data(); // THE NEW LISTVIEW CODE ONLY FETCHES COLUMNS THAT WE'RE DISPLAYING AND NOT ALL // THE COLUMNS SO WE NEED THESE CHECKS. $the_array['NAME'] = (($this->name == "") ? "blank" : $this->name); //$the_array['STATUS_IMG'] = ""; $the_array['STATUS'] = EcmReceipt::CreateImgStatus($this->id, $this->status); $the_array['TOTAL'] = format_number($this->total); /* $the_array['PDF_URL'] = ' '; $the_array['PDF_URL'] .= ' '; $the_array['PDF_URL'] .= ' '; if($_REQUEST['module'] != "Home" && $_REQUEST['module'] != "EcmReceipts") $the_array['PDF_URL'] .= ''; */ $this->retrieve($this->id); $the_array['OPTIONS'] = $this->ListIconsView(); $total = 0; $db = $GLOBALS['db']; if ((isset($this->currency_value)) && ($this->currency_value != 0)) $the_array['SUBTOTAL'] = $this->subtotal * $this->currency_value; else $the_array['SUBTOTAL'] = $this->subtotal; if ($this->ecmreceipt_id) { $w = $db->query("select price,ecmvat_value,quantity,ecmreceiptitem_id from ecmreceiptitems where ecmreceipt_id='" . $this->id . "'"); while ($r = $db->fetchByAssoc($w)) { $total+=$r['price'] * $r['quantity'] + round($r['price'] * $r['quantity'] * $r['ecmvat_value'] / 100, 2); $rr = $db->fetchByAssoc($db->query("select price,quantity,ecmvat_value from ecmreceiptitems where id='" . $r['ecmreceiptitem_id'] . "'")); $total-=$rr['price'] * $rr['quantity'] + round($rr['price'] * $rr['quantity'] * $rr['ecmvat_value'] / 100, 2); } } else { $w = $db->query("select price,ecmvat_value,quantity,ecmreceiptitem_id from ecmreceiptitems where ecmreceipt_id='" . $this->id . "'"); while ($r = $db->fetchByAssoc($w)) { $total+=($r['price'] * $r['quantity']) + round(($r['price'] * $r['quantity'] * $r['ecmvat_value'] / 100), 2); } } $w = $db->query("select document_no, id from ecmreceipts where ecmreceipt_id='" . $this->id . "' and deleted='0'"); while ($r = $db->fetchByAssoc($w)) { $invs[] = "" . $r['document_no'] . ""; } $the_array['CORRECT'] = @implode(", ", $invs); $the_array['TOTAL'] = format_number($total - $this->discount); $r = $db->fetchByAssoc($db->query("select paid from ecmpayments_ecmreceipts where ecmreceipt_id='" . $this->id . "' and deleted='0'")); if ($r['paid'] == 1) $the_array['PAID'] = "Yes"; else $the_array['PAID'] = "No"; $the_array['NUMBER'] = ''; return $the_array; } function getEmailTemplateId($what) { $GLOBALS['db'] = new MysqlManager(); $GLOBALS['db']->connect(); $query = "SELECT `id` FROM `email_templates` WHERE `name` LIKE 'InvoiceTemplate" . $what . "%' LIMIT 1"; $result = $GLOBALS['db']->query($query); if (is_resource($result)) { $row = $GLOBALS['db']->fetchByAssoc($result); if (is_array($row)) { return $row['id']; } } return ''; } function createSendEmailLink() { require_once('modules/EcmEmails/EcmEmailsDataCreator.php'); $eedc = new EcmEmailsDataCreator(); if (isset($this->contact_id) && $this->contact_id != '') { $eedc->addToModule('Contacts', $this->contact_id); $eedc->setEmailTemplateId($this->getEmailTemplateId("Contact")); } else { $eedc->addToModule('Accounts', $this->parent_id); $eedc->setEmailTemplateId($this->getEmailTemplateId("Account")); } global $current_user; $eedc->setFromModule('Users', $current_user->id); $eedc->addAssigned('Accounts', $this->parent_id); $eedc->addAssigned('Contacts', $this->contact_id); $eedc->addAssigned('EcmDocumentTemplates', $this->template_id); $eedc->addAssigned('Users', ''); $eedc->addAssigned($this->module_dir, $this->id); $eedc->addAttachmentBySugar($this->createPdfFileName(), $this->module_dir, "previewPDF", array("record" => $this->id, "method" => "S", "to_pdf" => "1"), array("method" => "I")); return $eedc->createJavaScriptAction(); } static function CreateImgStatus($id, $status) { global $app_list_strings; return ''; } function createPdfFileName($format = true) { $arr1 = array('\\', '/', ':', '*', '?', '"', '<', '>', '|', ' '); $arr2 = array('', '', '', '', '', '\'', '[', ']', '', '_'); $tmp = $this->document_no; if ($format) { if ($this->type == "normal") $tmp = str_replace($arr1, $arr2, 'Invoice_' . $tmp . '.pdf'); else if ($this->type == "correct") $tmp = str_replace($arr1, $arr2, 'Correct_' . $tmp . '__to_Invoice_' . $this->ecmreceipt->document_no . '.pdf'); } else $tmp = 'Receipt ' . $tmp . '.pdf'; //$mod = return_module_language($current_language, 'EcmReceipts'); //return urlencode( // return $mod['LBL_PDF_INVOICE_FILE_NAME'].$tmp.'.pdf';//); return $tmp; //); } /** BUILDS A GENERIC SEARCH BASED ON THE QUERY STRING USING OR. DO NOT INCLUDE ANY $THIS-> BECAUSE THIS IS CALLED ON WITHOUT HAVING THE CLASS INSTANTIATED. */ function build_generic_where_clause($the_query_string) { $where_clauses = array(); $the_query_string = PearDatabase::receipt(from_html($the_query_string)); array_push($where_clauses, "ecmreceipts.name like '$the_query_string%'"); $the_where = ""; foreach ($where_clauses as $clause) { if ($the_where != "") $the_where .= " or "; $the_where .= $clause; } return $the_where; } function set_notification_body($xtpl, $simplemodule) { global $mod_strings, $app_list_strings; $xtpl->assign("NAME", $simplemodule->name); $xtpl->assign("DESCRIPTION", $simplemodule->description); return $xtpl; } function bean_implements($interface) { switch ($interface) { case 'ACL':return true; } return false; } function create_new_list_query($order_by, $where, $filter = array(), $params = array(), $show_deleted = 0, $join_type = '', $return_array = false, $parentbean, $singleSelect = false) { echo ''; return parent::create_new_list_query($order_by, $where, $filter, $params, $show_deleted, $join_type, $return_array, $parentbean, $singleSelect); } function generateOptions($icon, $module = '', $action = '') { global $app_strings, $mod_strings; $tmp = ''; if ($icon == "desc") { //$tmp=Hint($this->id,$this->description); } if ($icon == 'pdf') { //pdf if ($this->ACLAccess('pdf_toolbar')) { $tmp = ''; } else { $tmp = ''; } } else if ($icon == 'download') { //download if ($this->ACLAccess('pdf_toolbar')) { $tmp = ''; } else { $tmp = ''; } } else if ($icon == 'duplicate') { //duplicate $tmp = ''; } else if ($icon == 'edit') { //edit if ($this->ACLAccess('edit') && $this->status == "registered") $tmp = ''; else $tmp = ''; } else if ($icon == 'send_email') { //send_email if ($this->status == "accepted") $tmp = ''; else $tmp = ''; } else if ($icon == 'correct') { if ($this->status != "registered") $tmp = ''; else $tmp = ''; } else if ($icon == 'view') { $tmp = ''; } return $tmp; } function ListIconsView() { if (isset($_REQUEST['module']) && $_REQUEST['module'] != '' && isset($_REQUEST['action'])) { $module = $_REQUEST['module']; $action = $_REQUEST['action']; $glue = " "; $viewIcons = array(); if ($module == $this->module_dir) { //This module, action ListView or index $viewIcons = array('desc', 'send_email', 'download', 'correct', 'pdf', 'duplicate', 'edit'); if ($this->status == "registered") $viewIcons = array('desc', 'send_email', 'download', 'correct', 'pdf', 'duplicate', 'edit'); } else if ($module == "Home") { //This is for a Home module for Dashlets $glue = " "; $viewIcons = array('send_email', 'download', 'correct', 'pdf', 'duplicate', 'edit'); if ($this->status == "registered") $viewIcons = array('send_email', 'download', 'correct', 'pdf', 'duplicate', 'edit'); } else { //this is for subpanels, popups $glue = " "; $viewIcons = array('send_email', 'download', 'correct', 'pdf', 'duplicate', 'edit'); if ($this->status == "registered") $viewIcons = array('send_email', 'download', 'correct', 'pdf', 'duplicate', 'edit'); } $arr = array(); foreach ($viewIcons as $value) { $tmp = $this->generateOptions($value); if ($tmp != '') $arr[] = $tmp; } return '' . implode($glue, $arr) . ''; } return ''; } function save($check_notify = FALSE) { global $current_user; //echo var_export($this->number, true). PHP_EOL; //echo var_export($this->document_no, true). PHP_EOL; if (($this->fetched_row && $this->fetched_row['template_id'] != $this->template_id) || (empty($this->id) || $this->id == '')) { if (true) { //$this->type == "normal") { $this->number = $this->generateNumber(); $this->document_no = $this->formatNumber(); } else { $this->number = $this->generateNumberCorrect(); $this->document_no = $this->formatNumberCorrect(); } } //add 0 $date = substr($this->number,0,8); $number = substr($this->number,8,strlen($this->number)); if (strlen($number)<5) { while(strlen($number)!=5) $number = '0'.$number; } $this->number = $date.$number; //echo var_export($this->number, true). PHP_EOL; //echo var_export($this->document_no, true). PHP_EOL; //exit; $this->status = 'accepted'; $this->ecmpaymentcondition_text = EcmReceipt::getTranslation('EcmPaymentConditions', $this->ecmpaymentcondition_id, $this->ecmlanguage); $this->ecmdeliverycondition_text = EcmReceipt::getTranslation('EcmDeliveryConditions', $this->ecmdeliverycondition_id, $this->ecmlanguage); $return_id = parent::save($check_notify); // dump('xarr', $this->toArray()); $this->savePositions($return_id); // return $return_id; //delete document temp reservations include_once("modules/EcmStockOperations/EcmStockOperation.php"); $op = new EcmStockOperation(); $op->removeDocumentReservations($_REQUEST['temp_id']); $rdsc = $GLOBALS[db]->fetchByAssoc($GLOBALS[db]->query("select discount,type from ecmreceipts where id='" . $return_id . "'")); if ($rdsc['type'] == "correct") { $total = 0; $w = $GLOBALS[db]->query("select price,quantity,ecmvat_value,ecmreceiptitem_id from ecmreceiptitems where ecmreceipt_id='" . $return_id . "' and deleted='0'"); while ($r = $GLOBALS[db]->fetchByAssoc($w)) { $total+=round($r['price'] * $r['quantity'] * (1 + $r['ecmvat_value'] / 100), 2); $rr = $GLOBALS[db]->fetchByAssoc($GLOBALS[db]->query("select price,quantity,ecmvat_value from ecmreceiptitems where id='" . $r['ecmreceiptitem_id'] . "'")); $total-=round($rr['price'] * $rr['quantity'] * (1 + $r['ecmvat_value'] / 100), 2); } $GLOBALS[db]->query("update ecmreceipts set total=" . $total . " where id='" . $return_id . "'"); } else { $total = 0; $w = $GLOBALS[db]->query("select price, quantity, ecmvat_value, ecmreceiptitem_id from ecmreceiptitems where ecmreceipt_id = '" . $return_id . "' and deleted='0'"); while ($r = $GLOBALS[db]->fetchByAssoc($w)) { // $total+=round($r['price'] * $r['quantity'] * (1 + $r['ecmvat_value'] / 100), 2); $total += round($r['price'] * $r['quantity'], 2); } $GLOBALS[db]->query("update ecmreceipts set total=" . $total . "-discount where id='" . $return_id . "'"); } return $return_id; } // ***************************Start Managing Positions************************* // function constructInsertQuery($data, $table = '') { if ($table == '' && isset($this->object_name) && $this->object_name != '') { $table = strtolower($this->object_name) . "items"; } else return ""; $keys = array(); $values = array(); foreach ($data as $key => $value) { $keys[] = $key; if (is_array($value)) $values[] = $value[1] . str_replace("'", "\'", $value[0]) . $value[1]; else $values[] = "'" . str_replace("'", "\'", $value) . "'"; } $q = "insert into `$table` (`"; $q .= implode('`, `', $keys); $q .= "`) values ("; $q .= implode(", ", $values); $q .= ");"; return $q; } function savePositions($id = null, $position_list = null) { global $current_user, $timedate; if ($_REQUEST['out_id']) $this->wz_id = $_REQUEST['out_id']; if ($position_list == null) $position_list = $this->position_list; if ($id == null) $id = $this->id; if (count($position_list) > 0) $this->deleteAssignedPositions($id); $arr = array(); $position = 0; $t_position_list = $position_list; for ($i = 0; $i < count($t_position_list); $i++) { if (mysql_num_rows($GLOBALS[db]->query("select id from ecmreceiptitems where ecmproduct_id='" . $t_position_list[$i]['id'] . "' and ecmreceipt_id='" . $this->ecmreceipt_id . "' and price='" . $t_position_list[$i]['price'] . "' and quantity='" . $t_position_list[$i]['quantity'] . "' and deleted='0'")) > 0) { unset($position_list[$i]); } } $m = 0; if (count($position_list) > 0) { foreach ($position_list as $pr) { $plist[$m] = $pr; $m++; } $position_list = $plist; } for ($i = 0; $i < count($position_list); $i++) { if ($position_list[$i]['name'] == '') continue; $p = $position_list[$i]; require_once("modules/EcmVats/EcmVat.php"); $vats = new EcmVat(); $vats->retrieve($p['vat_id']); $p['vat_name'] = $vats->name; require_once("modules/Currencies/Currency.php"); $curr = new Currency(); $curr->retrieve($p['currency_id']); $p['currency_name'] = $curr->name; if (!empty($p['category_id']) || $p['category_id'] == '') { require_once("modules/EcmProducts/EcmProduct.php"); $pr = new EcmProduct(); $pr->retrieve($p['id']); $p['category_id'] = $pr->product_category_id; } $lv = return_app_list_strings_language($this->ecmlanguage); $arr = array( 'id' => create_guid(), 'date_entered' => array('NOW()', ''), 'date_modified' => array('NOW()', ''), 'modified_user_id' => $current_user->id, 'assigned_user_id' => $current_user->id, 'created_by' => $current_user->id, 'deleted' => '0', strtolower($this->object_name) . '_id' => $id, 'ecmproduct_id' => $p['id'], 'position' => $position, 'code' => $p['code'], 'name' => $p['name'], 'quantity' => ((empty($p['quantity']) || $p['quantity'] == '') ? 0 : $p['quantity']), 'startprice' => $p['startprice'], 'subprice' => $p['subprice'], 'price' => $p['price'], 'price' => ((empty($p['price']) || $p['price'] == '') ? 0 : $p['price']), 'purchase_price' => $purchase_price, 'discount' => ((empty($p['discount']) || $p['discount'] == '') ? 0 : $p['discount']), 'subtotal' => $p['subtotal'], 'total' => $p['total'], 'dd_unit_id' => $p['unit_id'], 'dd_unit_name' => $lv['ecmproducts_unit_dom'][$p['unit_id']], 'ecmvat_id' => $p['vat_id'], 'ecmvat_name' => $p['vat_name'], 'ecmvat_value' => $p['vat_value'], 'ecmproductcategory_id' => $p['category_id'], 'currency_id' => $p['currency_id'], 'currency_name' => $p['currency_name'], 'tax_code' => $p['tax_code'], 'recipient_code' => $p['recipient_code'], 'netto_weight' => floatval(str_replace(",", ".", str_replace(".", "", $p['netto_weight']))), 'brutto_weight' => floatval(str_replace(",", ".", str_replace(".", "", $p['brutto_weight']))), 'ecmstockdocout_id' => $p['ecmstockdocout_id'], 'product_type' => $p['type'], 'parent_doc_id' => $p['parent_doc_id'], 'parent_doc_type' => $p['parent_doc_type'], 'parent_doc_item_id' => $p['parent_doc_item_id'], ); if ($p['item_id'] && $p['item_id'] != "undefined") $arr['ecmreceiptitem_id'] = $p['item_id']; $query = $this->constructInsertQuery($arr); $this->db->query($query); /* echo '
P:' . var_export($p, true) . PHP_EOL . PHP_EOL;
              echo '
A:' . var_export($arr, true) . PHP_EOL . PHP_EOL;

              continue;
              exit;
             */

            if ($p['parent_doc_type'] == "EcmStockDocOuts") {
                // add fv-wz relation
                $GLOBALS['db']->query("INSERT INTO ecmreceipts_ecmstockdocouts VALUES ('" . create_guid() . "','" . date("Y-m-d H:i:s") . "','0','" . $this->id . "', '" . $p['ecmstockdocout_id'] . "')");
            } else {
                // no, stock operation
                // product must be article

                /*
                  echo 'P:' . var_export($p, true) . PHP_EOL;
                  echo 'ID:' . $id . PHP_EOL;
                  echo 'ARR:' . var_export($arr, true)  . PHP_EOL;
                  exit;
                 */

               // if ($p['type'] == 'article') {
                    //$this->addProducts($p, $id, $arr['id']);

                    if ($p['parent_doc_type'] == "EcmSales") {
                        //remove Sale Product reservation
                        include_once("modules/EcmStockOperations/EcmStockOperation.php");

                        $op = new EcmStockOperation();
                        $op->removeSaleProductReservations($p['parent_doc_item_id']);

                        //add relation
                        $GLOBALS['db']->query("INSERT INTO ecmreceipts_ecmsales VALUES ('" . create_guid() . "','" . date("Y-m-d H:i:s") . "','0','" . $this->id . "', '" . $p['parent_doc_id'] . "')");
                    }
                //}
            }

            $position++;
        }
    }

    function deleteProductFromStockIn($stock_in_id, $product_id, $qty) {
        $z = "update ecmstockoperations set quantity=quantity-" . $qty . " where id='" . $stock_in_id . "' and product_id='" . $product_id . "' and deleted=0";
        $GLOBALS['db']->query($z);
    }

    function addProductToStockOut($stock_in_id, $product_id, $quantity, $price, $date, $id, $stock_id, $itemid) {
        require_once("modules/EcmStockOperations/EcmStockOperation.php");
        $o = new EcmStockOperation();
        $o->unformat_all_fields();

        require_once("modules/EcmProducts/EcmProduct.php");
        $o->product_id = $product_id;
        $p = new EcmProduct();
        $p->retrieve($product_id);
        $o->product_code = $p->code;
        $o->product_name = $p->name;

        require_once("modules/EcmStocks/EcmStock.php");
        $o->stock_id = $stock_id;
        $s = new EcmStock();
        $s->retrieve($stock_id);
        $o->stock_name = $s->name;

        $o->parent_id = $id;
        $r = $GLOBALS['db']->fetchByAssoc($GLOBALS['db']->query("select document_no from ecmreceipts where id='" . $id . "'"));
        $o->parent_name = $r['document_no'];
        $o->parent_type = "EcmReceipts";

        $o->quantity = $quantity;
        $o->price = floatval($price);
        $o->in_id = $stock_in_id;
        $o->documentitem_id = $itemid;
        $o->type = 1;
        $o->save();

        require_once("modules/EcmStockStates/EcmStockState.php");
        $ss = new EcmStockState();
        $ss->UpdateStockState($o->stock_id, $o->product_id);
    }

    function addProducts($p, $id, $itemid) {
        $arr = array();

        $wq = "select quantity as qty,id,price from ecmstockoperations where deleted='0' and type='0' and used=0 and in_id IS NULL and stock_id='" . $this->stock_id . "' and product_id='" . $p['id'] . "'";

        $w = $GLOBALS['db']->query($wq);

        while ($rrr = $GLOBALS['db']->fetchByAssoc($w)) {
            $wwq = "select quantity from ecmstockoperations where in_id='" . $rrr['id'] . "' and type='1' and in_id IS NOT NULL and stock_id='" . $this->stock_id . "' and product_id='" . $p['id'] . "' and deleted='0'";

            $ww = $GLOBALS['db']->query($wwq);

            $rqty = 0;
            while ($rrp = $GLOBALS['db']->fetchByAssoc($ww)) {
                $rqty+=$rrp['quantity'];
            }

            $qty = $rrr['qty'] - $rqty;

            if ($qty > 0) {
                $arr[] = array("qty" => $qty, "id" => $rrr['id'], "price" => $rrr['price']);
            }
        }

        $rr = array();
        $used_qty = 0;
        $stop = 0;

        foreach ($arr as $value) {
            if ($p['quantity'] - $used_qty <= $value['qty']) {
                $rr[] = array("id" => $value['id'], "qty" => $p['quantity'] - $used_qty, "price" => $value['price']);
                $stop = 1;
            } else {
                $rr[] = array("id" => $value['id'], "qty" => $value['qty'], "price" => $value['price']);
                $used_qty+=$value['qty'];
            }
            if ($stop) {
                $stop = 0;
                break;
            }
        }

        $qq = 0;
        $pp = 0;
        $avg_pq = 0;
        $avg_q = 0;

        foreach ($rr as $r) {
            if (!$_REQUEST['correct_id']) {
                $this->addProductToStockOut($r['id'], $p['id'], $r['qty'], $r['price'], $this->register_date, $id, $this->stock_id, $itemid);

                $avg_pq+=$r['qty'] * $r['price'];
                $avg_q+=$r['qty'];
            }
        }

        if (!$_REQUEST['correct_id']) {
            $GLOBALS['db']->query("update ecmreceiptitems set purchase_price = '" . ($avg_pq / $avg_q) . "' where id = '" . $itemid . "'");
        }
    }

    function getPosition($position, $stockOperations = false) {
        if (!is_array($position))
            return '';
            
        //echo '
' . var_export($position, true);
        //exit;

        global $timedate;

        $return_array = array();

        if(false == $stockOperations) {
            $return_array['iid'] = $position['id'];
            $return_array['id'] = $position['ecmproduct_id'];
            $return_array['position'] = $position['position'];
            $return_array['code'] = $position['code'];
            $return_array['name'] = $position['name'];
            $return_array['quantity'] = $position['quantity'];
            $return_array['price'] = $position['price'];
            $return_array['discount'] = $position['discount'];
            $return_array['total'] = $position['total'];
            $return_array['unit_id'] = $position['dd_unit_id'];
            $return_array['unit_name'] = $position['dd_unit_name'];
            $return_array['vat_id'] = $position['ecmvat_id'];
            $return_array['vat_name'] = $position['ecmvat_name'];
            $return_array['vat_value'] = $position['ecmvat_value'];
            $return_array['category_id'] = $position['ecmproductcategory_id'];
            $return_array['currency_id'] = $position['currency_id'];
            $return_array['currency_name'] = $position['currency_name'];
            $return_array['tax_code'] = $position['tax_code'];
            $return_array['recipient_code'] = $position['recipient_code'];
            $return_array['netto_weight'] = $position['netto_weight'];
            $return_array['brutto_weight'] = $position['brutto_weight'];
            $return_array['ecmstockdocout_id'] = $position['ecmstockdocout_id'];
            $return_array['type'] = $position['product_type'];
            $return_array['parent_doc_id'] = $position['parent_doc_id'];
            $return_array['parent_doc_type'] = $position['parent_doc_type'];
            $return_array['parent_doc_item_id'] = $position['product_parent_doc_item_id'];

            //mh
            $return_array['origin_country_code'] = $position['origin_country_code'];
            $return_array['product_code'] = $position['product_code'];
            
            // 16-04-13
            $return_array['startprice'] = $position['startprice'];
            $return_array['subprice'] = $position['subprice'];
            $return_array['subtotal'] = $position['subtotal'];
            
            // 01-07-13
            $return_array['pricehelper'] = $position['startprice'] * (1 + $position['ecmvat_value'] / 100);
            
            if ($_REQUEST['isCorrect'] == "true") {
                $return_array['item_id'] = $position['id'];
            } else {
                $return_array['item_id'] = $position['ecmreceiptitem_id'];
            }
        } else {
            $return_array['iid'] = $position['id'];
            $return_array['id'] = $position['product_id'];
            //$return_array['position'] = $position['position'];
            $return_array['code'] = $position['code'];
            $return_array['name'] = $position['product_name'];
            $return_array['quantity'] = $position['quantity'];
            $return_array['price'] = $position['price'];
            //$return_array['discount'] = $position['discount'];
            //$return_array['total'] = $position['total'];
            //$return_array['unit_id'] = $position['dd_unit_id'];
            $return_array['unit_name'] = $position['unit_name'];
            //$return_array['vat_id'] = $position['ecmvat_id'];
            //$return_array['vat_name'] = $position['ecmvat_name'];
            //$return_array['vat_value'] = $position['ecmvat_value'];
            //$return_array['category_id'] = $position['ecmproductcategory_id'];
            //$return_array['currency_id'] = $position['currency_id'];
            //$return_array['currency_name'] = $position['currency_name'];
            //$return_array['tax_code'] = $position['tax_code'];
            //$return_array['recipient_code'] = $position['recipient_code'];
            //$return_array['netto_weight'] = $position['netto_weight'];
            //$return_array['brutto_weight'] = $position['brutto_weight'];
            //$return_array['ecmstockdocout_id'] = $position['ecmstockdocout_id'];
            //$return_array['type'] = $position['product_type'];
            //$return_array['parent_doc_id'] = $position['parent_doc_id'];
            //$return_array['parent_doc_type'] = $position['parent_doc_type'];
            //$return_array['parent_doc_item_id'] = $position['product_parent_doc_item_id'];

            //mh
            //$return_array['origin_country_code'] = $position['origin_country_code'];
            //$return_array['product_code'] = $position['product_code'];
            //
            //if ($_REQUEST['isCorrect'] == "true") {
            //    $return_array['item_id'] = $position['id'];
            //} else {
            //    $return_array['item_id'] = $position['ecmreceiptitem_id'];
            //}

            $return_array['in_name'] = $position['in_name'];
            $return_array['in_type'] = $position['in_type'];
        }

        return $return_array;
    }

    function getPositionList($array = false, $stockOperations = false) {
        if (isset($this->id) && $this->id != '') {
            $query = '';

            if (false == $stockOperations) {
                // $query = 'SELECT p.`origin_country_code`, p.`product_code`, ii.* FROM `ecmproducts` AS p JOIN `ecmreceiptitems` AS ii ON p.`id` = ii.`ecmproduct_id` WHERE ii.`ecmreceipt_id` = \'' . $this->id . '\' ORDER BY ii.`position` ASC';
                $query = 'SELECT ii.* FROM `ecmproducts` AS p JOIN `ecmreceiptitems` AS ii ON p.`id` = ii.`ecmproduct_id` WHERE ii.`ecmreceipt_id` = \'' . $this->id . '\' ORDER BY ii.`position` ASC';
            } else {
                //$query = 'SELECT p.`origin_country_code`, p.`product_code`, ii.* FROM `ecmproducts` AS p JOIN `ecmreceiptitems` AS ii ON p.`id` = ii.`ecmproduct_id` WHERE ii.`ecmreceipt_id` = \'' . $this->id . '\' ORDER BY ii.`position` ASC';
                //$query = 'SELECT soo.`parent_name` AS in_name, p.`unit_name`, so.*, p.`product_code` FROM `ecmstockoperations` AS so JOIN `ecmstockoperations` AS soo ON soo.`id` = so.`in_id` JOIN `ecmproducts` AS p ON p.`id` = so.`product_id` WHERE so.`parent_id` = \'' . $this->id . '\';';
                $query = 'SELECT so.*, soo.`parent_name` AS `in_name`, soo.`parent_type` AS `in_type`, p.`index_dbf` AS `code`, p.`unit_name` FROM `ecmstockoperations` AS so JOIN `ecmstockoperations` AS soo ON soo.`id` = so.`in_id` JOIN `ecmproducts` AS p ON p.`id` = so.`product_id` WHERE so.`parent_id` = \'' . $this->id . '\';';
            }

            // echo $query; exit;

            $r = $this->db->query($query);
            $return_array = array();

            if ($r) {
                while ($w = $this->db->fetchByAssoc($r)) {
                    $return_array [] = $this->getPosition($w, $stockOperations);
                }

                $json = getJSONobj();
                
                // var_dump($return_array);exit;
                return $array ? $return_array : $json->encode($return_array);
            }
        }

        return $array ? false : '[]';
    }

    function deleteAssignedPositions() {
        if (isset($this->id) && $this->id != '') {
            $query = "DELETE FROM `" . strtolower($this->object_name) . "items` WHERE `" . strtolower($this->object_name) . "_id`='" . $this->id . "'";
            $r = $this->db->query($query);
            if ($r)
                return true;
        }
        return false;
    }

//***************************End Managing Positions*************************//

    static function getTranslation($module, $id, $language) {
        if (isset($id) && $id != '' && isset($module) && $module != '') {
            global $beanList, $beanFiles;
            $file = $beanFiles[$beanList[$module]];
            if (file_exists($file)) {
                require_once($file);
                $bean = new $beanList[$module]();
                $bean->retrieve($id);
                if (isset($bean->id) && $bean->id != '') {
                    if (isset($bean->translations[$language]) && $bean->translations[$language] != '')
                        return $bean->translations[$language];
                }
            }
        }
        return null;
    }

    function getTemplateList() {
        global $db;
        $query = "select `id`,`name` from `ecmdocumenttemplates` where `deleted`='0' order by `name`";

        $result = $db->query($query);

        $arr = array();

        if ($result)
            while ($row = $db->fetchByAssoc($result))
                $arr[$row['id']] = $row['name'];

        return $arr;
    }

    function setTemplate() {

        if (!isset($this->template_id) || $this->template_id == '')
            return null;

        if (isset($this->template))
            return $this->template;



        require_once('modules/EcmDocumentTemplates/EcmDocumentTemplate.php');

        $this->template = new EcmDocumentTemplate();

        //$this->template->retrieve($this->template_id);
        $this->template->retrieve($this->template_id, true, false);


        if (isset($this->template->id) && $this->template->id != '') {

            $this->template->format_all_fields();
        }
        else
            $this->template = null;



        return $this->template;
    }

    function generateNumber() {
        $this->setTemplate();
        $this->number = isset($this->template) ? $this->template->generateNumber($this->table_name) : '';
        return $this->number;
    }

    function generateInvoiceNumber() {
        global $db;
        $year = date('y');

        $q = 'SELECT r.`inside_inv_number` AS n FROM `ecmreceipts` AS r WHERE r.`inside_inv_number` LIKE \'%/' . $year . '/p\' AND `deleted` = 0 ORDER BY r.`inside_inv_number` DESC;';
        
        
        $res = $db->query($q);

        if (mysql_num_rows($res) == 0) {
            return '1/' . $year . '/p';
        }
        
        $row = $db->fetchByAssoc($res);

        $last = $row['n'];

        $last = explode('/', $last);

        $last = trim($last[0]);
        $last = intval($last);

        $new = $last + 1;
        
        return trim($new . '/' . $year . '/p');
    }

    function formatNumber() {
        $this->setTemplate();
        $this->document_no = isset($this->template) ? $this->template->formatNumber($this->number, $this->module_dir) : '';
        return $this->document_no;
    }

    function generateNumberCorrect() {
        $this->setTemplate();
        $this->number = $this->template->generateNumberCorrect($this->table_name);
        return $this->number;
    }

    function formatNumberCorrect() {
        $this->setTemplate();
        $this->document_no = $this->template->formatNumberCorrect($this->number, $this->module_dir);
        return $this->document_no;
    }

    function formatDocumentNumber($documentNumber = '', $code = '') {
        return isset($this->template) ? $this->template->formatDocumentNumber($documentNumber, $code) : '';
    }

    function DrawPositions($pdf = null) {
        global $mod_strings;

        $currency = new Currency();
        $currency->retrieve($this->currency_id);
        $this->currency_symbol = $currency->iso4217;

        if (!isset($this->position_list) || !is_array($this->position_list))
            $this->position_list = $this->getPositionList(true);
        $calc = $this->calculate($this->position_list, true);
        //$this->position_list = $this->formatPositions($this->position_list);

        $calc['total'] .= ' ' . $this->currency_symbol;
        $calc['subtotal'] .= ' ' . $this->currency_symbol;
        if ($calc['discount']) {
            $calc['total2'] .= ' ' . $this->currency_symbol;
            $calc['discount']['value'] .= ' ' . $this->currency_symbol;
        }

        if (isset($calc['vats']) && is_array($calc['vats']) && count($calc['vats']) > 0)
            foreach ($calc['vats'] as $key => $value)
                $calc['vats'][$key] .= ' ' . $this->currency_symbol;

        $name_w = 22;
        //if($calc['draw_discount']) $name_w -= 8;
        //if($calc['draw_vat']) $name_w -= 8;
        $table = array();
        $table [0]['position'] = array('width' => 4, 'value' => $mod_strings['LBL_PDF_LIST_POSITION'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 8);
        $table [0]['description'] = array('width' => $name_w, 'value' => $mod_strings['LBL_PDF_LIST_DESCRIPTION'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        $table [0]['tax_code'] = array('width' => 8, 'value' => $mod_strings['LBL_PDF_LIST_TAX_CODE'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        $table [0]['quantity'] = array('width' => 7, 'value' => $mod_strings['LBL_PDF_LIST_QUANTITY'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        $table [0]['unit'] = array('width' => 5, 'value' => $mod_strings['LBL_PDF_LIST_UNIT'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 8);
        $table [0]['unit_price'] = array('width' => 10, 'value' => $mod_strings['LBL_PDF_LIST_PRICE'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        $table [0]['unit_price_total'] = array('width' => 12, 'value' => $mod_strings['LBL_PDF_LIST_TOTAL_PRICE'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        //if($calc['draw_discount']) $table [0]['discount'] = array('width' => 8, 'value' => $mod_strings['LBL_PDF_LIST_DISCOUNT'], 'border' => 0, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        //if($calc['draw_vat']) {
        $table [0]['vat_id'] = array('width' => 5, 'value' => $mod_strings['LBL_PDF_LIST_VAT'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        $table [0]['vat_value'] = array('width' => 13, 'value' => $mod_strings['LBL_PDF_LIST_VAT_VALUE'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        //}
        $table [0]['total'] = array('width' => 14, 'value' => $mod_strings['LBL_PDF_LIST_TOTAL'], 'border' => 1, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
        $pdf->DrawTable($table, array(0));
        $pdf->Ln(0);


        $i = 1;

        $table = array();
        if ($this->position_list != '')
            foreach ($this->position_list as $p) {
                $table [$i]['position'] = array('width' => 4, 'value' => $i, 'border' => 1, 'align' => 'R', 'font-size' => 7);
                $table [$i]['description'] = array('width' => $name_w, 'value' => htmlspecialchars_decode($p['name']), 'border' => 1, 'align' => 'L', 'font-size' => 7);
                $table [$i]['tax_code'] = array('width' => 8, 'value' => $p['tax_code'], 'border' => 1, 'align' => 'C', 'font-size' => 7);
                $table [$i]['quantity'] = array('width' => 7, 'value' => $p['quantity'], 'border' => 1, 'align' => 'C', 'font-size' => 7);
                $table [$i]['unit'] = array('width' => 5, 'value' => $GLOBALS['app_list_strings']['ecmproducts_unit_dom'][$p['unit']], 'border' => 1, 'align' => 'C', 'font-size' => 7);
                $table [$i]['unit_price'] = array('width' => 10, 'value' => $p['price'], 'border' => 1, 'align' => 'R', 'font-size' => 7);
                $price_total = $p['price'] * $p['quantity'];
                $table [$i]['unit_price_total'] = array('width' => 12, 'value' => ($price_total), 'border' => 1, 'align' => 'R', 'font-size' => 7);
                //if($calc['draw_discount']) $table [$i]['discount'] = array('width' => 8, 'value' => $p['discount'], 'border' => 0, 'align' => 'R', 'font-size' => 7 );
                //if($calc['draw_vat']){
                $table [$i]['vat_id'] = array('width' => 5, 'value' => ($p['vat_value']), 'border' => 1, 'align' => 'R', 'font-size' => 7);
                $vat_value = $p['vat_value'] / 100 * $p['price'] * $p['quantity'];
                $table [$i]['vat_value'] = array('width' => 13, 'value' => ($vat_value), 'border' => 1, 'align' => 'R', 'font-size' => 7);

                //}
                $table [$i]['total'] = array('width' => 14, 'value' => ($price_total + $vat_value), 'border' => 1, 'align' => 'R', 'font-size' => 7);
                $totals[$p['vat_id']]['price']+=$price_total;
                $totals[$p['vat_id']]['total']+=$price_total + $vat_value;
                $totals[$p['vat_id']]['vat']+=$vat_value;
                $i++;
            }

        $pdf->DrawTable($table, array(0));
        //total, vat, subtotal

        $pdf->Ln(4);
        $pr = ($pdf->fw - $pdf->lMargin - $pdf->rMargin) / 100;
        //$pdf->SetX($pdf->fw-$pdf->rMargin-$pr*34);
        $table = array();

        if ($calc['vats']) {
            /* $table [] = array(
              'subtotal1' => array('width' => 42, 'value' => $mod_strings['LBL_PDF_TOTAL'], 'background' => array(255,255,255), 'border' => 1, 'overflow' => 1, 'align' => 'L', 'font-size' => 7),
              'subtotal2' => array('width' => 14, 'value' => $calc['subtotal'].' PLN', 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7), );
             */
            foreach ($calc['vats'] as $key => $value) {
                $r = $GLOBALS[db]->fetchByAssoc($GLOBALS[db]->query("select id,name,value from ecmvats where id='" . $key . "'"));
                $vvn = $r['name'];
                $table [] = array(
                    'vat1' => array('width' => 10, 'value' => $mod_strings['LBL_PDF_VAT'] . ' (' . $vvn . ')', 'background' => array(255, 255, 255), 'border' => 1, 'overflow' => 1, 'align' => 'L', 'font-size' => 7),
                    'netto_total' => array('width' => 12, 'value' => format_number($totals[$r['id']]['price']), 'background' => array(255, 255, 255), 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7),
                    'vat_rate' => array('width' => 5, 'value' => format_number($r['value']), 'background' => array(255, 255, 255), 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7),
                    'vat_total' => array('width' => 13, 'value' => format_number($totals[$r['id']]['vat']), 'background' => array(255, 255, 255), 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7),
                    'vat2' => array('width' => 14, 'value' => format_number($totals[$r['id']]['total']), 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7),);
            }
        }

        if (isset($calc['discount'])) {
            $table [] = array(
                'total21' => array('width' => 66, 'value' => $mod_strings['LBL_PDF_TOTAL'], 'background' => array(255, 255, 255), 'border' => 0, 'overflow' => 1, 'align' => 'L', 'font-size' => 7, 'font-style' => 'b'),
                'total22' => array('width' => 34, 'value' => $calc['total2'], 'border' => 0, 'overflow' => 1, 'align' => 'R', 'font-size' => 7),);
            $table [] = array(
                'discount1' => array('width' => 86, 'value' => $mod_strings['LBL_PDF_DISCOUNT'] . ' ' . $calc['discount']['procent'], 'background' => array(255, 255, 255), 'border' => 0, 'overflow' => 1, 'align' => 'L', 'font-size' => 7, 'font-style' => 'b'),
                'discount2' => array('width' => 14, 'value' => $calc['discount']['value'], 'border' => 0, 'overflow' => 1, 'align' => 'R', 'font-size' => 7),);
        }
        $table [] = array(
            'total1' => array('width' => 40, 'value' => $mod_strings['LBL_PDF_END_TOTAL'], 'border' => 1, 'overflow' => 1, 'align' => 'L', 'font-size' => 7, 'font-style' => 'b'),
            'total2' => array('width' => 14, 'value' => $calc['total'], 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7, 'font-style' => 'b'),);
        $pdf->SetX(103);
        $pdf->DrawTable($table);
        $pdf->Ln(1);

        //$table=array();
        //$pdf->DrawTable($table);
    }

    /**
     * @var $pdf
     * @var $type => pdf_type
     */
    function DrawMainPDF($pdf, $type = null) {
        switch ($type = strtolower($type ? : $this->pdf_type)) {
            default:
                include($this->template->getTemplateFile('subheader.php'));
                include($this->template->getTemplateFile('subfooter.php'));

                break;
            case 'inv':
            case 'exp':
                include($this->template->getTemplateFile('subheader_' . $type . '.php'));
                include($this->template->getTemplateFile('subfooter_' . $type . '.php'));

                break;
        }

        return;
    }

    function getPDF($id = null, $method = 'I', $name = null, $type = null) {
        global $sugar_config;

        if ($id != null) {

            $this->retrieve($id);

            if ($this->id == '')
                return;
        }

        global $mod_strings;

        require_once('modules/EcmTexts/EcmText.php');

        if (isset($this->ecmlanguage) && $this->ecmlanguage != '') {
            $data = EcmText::LoadText(null, null, "EcmReceipts", $this->ecmlanguage);
            if (isset($data[0]) && isset($data[0]['data']) && isset($data[0]['data']['labels'])) {
                $data = $data[0]['data']['labels'];
                foreach ($data as $key => $value) {
                    $mod_strings[$value['label']] = $value['translation'];
                }
            }
        }

        $this->format_all_fields();

        $this->setTemplate();

        //$type = $_REQUEST['type'];

        if (isset($this->template->id) && $this->template->id != '') {
            if ($type == 'inv') {
                //create new number if invoice not exists
                if (!$this->inside_inv_number) {
                    $this->inside_inv_number = $this->generateInvoiceNumber();
                
                    $q = 'UPDATE `ecmreceipts` SET `inside_inv_number` = \'' . $this->inside_inv_number. '\' WHERE `id` = \'' . $this->id . '\'';
                    $GLOBALS['db']->query($q);
                }
            }
            
            $this->template->setPDF($this->template_id);
            $this->template->pdf->SetAutoPageBreak(true, 40);

            $this->DrawMainPDF($this->template->pdf, $type);

            $this->template->outputPDF((($name) ? $name : $this->createPdfFileName()), $method);
        }
    }

    function calculate($position_list, $format = false) {
        global $db;

        if (!is_array($position_list))
            return false;

        $result = array(
            'total' => 0.0,
            'subtotal' => 0.0,
            //
            'vats' => array(),
            'draw_vat' => false,
            //
            //'discounts' => array(),
            'draw_discount' => false,
            //
            'weight_netto' => 0.0,
        );

        $vats = array();
        //$discounts = array();
        
        foreach ($position_list as $position) {
            //echo '
' . var_export($position, true) . '
'; //exit; $wq = 'SELECT `weight_netto` FROM `ecmproducts` AS p WHERE p.`id` = \'' . $position['id'] . '\';'; $wr = $db->query($wq); $w = $db->fetchByAssoc($wr); $result['weight_netto'] += $w['weight_netto'] * $position['quantity']; if (!isset($vats[$position['vat_id']])) { $vats[$position['vat_id']]['b'] = $vats[$position['vat_id']]['n'] = 0; } //$position['total'] = floatval($position['price']) * floatval($position['quantity']); $vats[$position['vat_id']]['b'] += floatval($position['total']); $result['subtotal'] += floatval($position['total']); if (!$result['draw_discount'] && floatval($position['discount']) > 0) { $result['draw_discount'] = true; } } $result['total'] = $result['subtotal']; // Calculate vats. if (false == $this->to_is_vat_free) { $vats2 = $vats;//array(); foreach ($vats2 as $key => &$value) { $qv = 'SELECT v.`value` FROM `ecmvats` AS v WHERE v.`id` = \'' . $key . '\';'; $rv = $db->query($qv); $r = $db->fetchByAssoc($rv); $vva = $r['value']; $vats2[$key]['n'] = floatval($value['b']) / (1 + (floatval($vva) / 100)); $result['total'] += $vats2[$key]['n'];//floatval($value) * (floatval($vva) / 100); /* if (true == $format) { $vats2[$key]['n'] = format_number($vats2[$key]['n']); } */ } $this->total = $result['total']; asort($vats2, SORT_NUMERIC); $result['vats'] = $vats2; if (count($result['vats']) > 1) { $result['draw_vat'] = true; } } /* $discount = $this->discount; if (!is_float($discount)) { $discount = unformat_number($discount); } if (isset($discount) && $discount != 0 && $discount != '') { $result['discount'] = array( 'procent' => format_number(floatval($discount)) . '%', 'value' => $result['subtotal'] * $discount / 100, ); $result['total2'] = $result['total']; $result['total'] = $result['total'] - $result['discount']['value']; } */ if (true == $format) { /* if (isset($result['discount']) && isset($result['discount']['value']) && $result['discount']['value'] != '' && $result['discount']['value'] != 0) { $result['discount']['value'] = format_number($result['discount']['value']); $result['total2'] = format_number($result['total2']); } */ $result['total'] = format_number($result['total']); $result['subtotal'] = format_number($result['subtotal']); $result['weight_netto'] = format_number($result['weight_netto']); foreach($result['vats'] as $key => &$value) { $value['n'] = format_number($value['n']); $value['b'] = format_number($value['b']); } } //echo '
calculate: ' . var_export($result, true);
        //exit;
        
        return $result;
    }

    function formatPositions($position_list) {

        if (!is_array($position_list) || count($position_list) == 0)
            return false;

        global $app_list_strings;


        require_once('modules/Currencies/Currency.php');
        foreach ($position_list as $key => $value) {


            $position_list[$key]['category_id'] = $app_list_strings['ecmproducts_category_dom'][$value['category_id']];

            //$position_list[$key]['vat_id'] = format_number($value['vat_id']).'%';

            $position_list[$key]['discount'] = format_number($value['discount']) . '%';

            if (isset($currency) && ($currency->id == $this->currency_id)) {

            } else {
                $currency = new Currency();
                $currency->retrieve($this->currency_id);
            }
            $position_list[$key]['price'] = format_number($value['price']) . ' ' . $currency->iso4217;

            $position_list[$key]['total'] = format_number($value['total']) . ' ' . $currency->iso4217;

            $this->currency_symbol = $currency->iso4217;
        }
        return $position_list;
    }

    function loadParser() {
        $this->template->mfp->clear();
        $this->template->mfp->add("EcmQuotes", "quote_", $this);
        $this->template->mfp->add("Users", "user_", $this->setUser());
        if ($this->setAccount() != null)
            $this->template->mfp->add("Accounts", 'account_', $this->account);
        if ($this->setContact() != null)
            $this->template->mfp->add("Contacts", 'contact_', $this->contact);
        $this->template->mfp->add("EcmDocumentTemplates", "documenttemplate_", $this->template);
    }

    function loadParserarray($name = '') {
        require_once('modules/EcmDocumentTemplates/ModuleFieldsParser/ModuleFieldsParser.php');
        $mfp = new ModuleFieldsParser();
        $mfp->clear();

        global $app_list_strings;

        $mfp->add("EcmReceipts", "receipt_", '', $app_list_strings['moduleList']['EcmInvoiceOuts']);
        $mfp->add("Users", "user_", '', $app_list_strings['moduleList']['Users']);
        $mfp->add("Accounts", 'account_', '', $app_list_strings['moduleList']['Accounts']);
        $mfp->add("Contacts", 'contact_', '', $app_list_strings['moduleList']['Contacts']);
        $mfp->add("EcmDocumentTemplates", "documenttemplate_", '', $app_list_strings['moduleList']['EcmDocumentTemplates']);

        if ($name == '') {
            $mfp_arr = array(
                'header' => $mfp->getFormHTML(false, 'header'),
                'footer' => $mfp->getFormHTML(false, 'footer'),
                'ads' => $mfp->getFormHTML(false, 'ads'),
            );
        }
        else
            $mfp_arr = $mfp->getFormHTML(false, $name);
        return $mfp_arr;
    }

    function setAccount() {
        require_once('modules/Accounts/Account.php');
        $this->account = new Account();
        $this->account->retrieve($this->parent_id);
        return $this->account;
    }

    function setContact() {
        require_once('modules/Contacts/Contact.php');
        $us = new Contact();
        $us->retrieve($this->contact_id);
        $this->contact = $us;
        return $this->contact;
    }

    function setUser() {
        if (is_object($this->user))
            return $this->user;
        require_once('modules/Users/User.php');
        $us = new User();
        global $current_user;
        $us->retrieve(($this->assigned_user_id) ? $this->assigned_user_id : $current_user->id);
        if (isset($us->id) && $us->id != '') {
            $this->user = $us;
        }
        else
            $this->user = null;
        return $this->user;
    }

    function doNotAccepted() {
        global $current_user;
        $cq = $current_user->getPreference('confirm_receipts');
        if (isset($cq) && $cq) {
            $query = "UPDATE `ecmreceipts` SET `status` = 'not_accepted',`accepted` = '0' WHERE CONVERT( `id` USING utf8 ) = '" . $this->id . "' LIMIT 1 ;";
            $result = $this->db->query($query);
            if ($result) {
                $this->status = 'not_accepted';
                $this->accepted = 0;
            }
        }
    }

    function loadEcmReceipt() {
        $this->ecmreceipt = new EcmReceipt();
        if (isset($this->ecmreceipt_id) && $this->ecmreceipt_id != '') {
            $this->ecmreceipt->retrieve($this->ecmreceipt_id);
        }
    }

    function slownieEN($kw) {

    }

    function slowniePL($kw) {
        $t_a = array('', 'sto', 'dwieście', 'trzysta', 'czterysta', 'pięćset', 'sześćset', 'siedemset', 'osiemset', 'dziewięćset');
        $t_b = array('', 'dziesięć', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'pięćdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewięćdziesiąt');
        $t_c = array('', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć');
        $t_d = array('dziesięć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedmnaście', 'osiemnaście', 'dziewiętnaście');

        $t_kw_15 = array('septyliard', 'septyliardów', 'septyliardy');
        $t_kw_14 = array('septylion', 'septylionów', 'septyliony');
        $t_kw_13 = array('sekstyliard', 'sekstyliardów', 'sekstyliardy');
        $t_kw_12 = array('sekstylion', 'sekstylionów', 'sepstyliony');
        $t_kw_11 = array('kwintyliard', 'kwintyliardów', 'kwintyliardy');
        $t_kw_10 = array('kwintylion', 'kwintylionów', 'kwintyliony');
        $t_kw_9 = array('kwadryliard', 'kwadryliardów', 'kwaryliardy');
        $t_kw_8 = array('kwadrylion', 'kwadrylionów', 'kwadryliony');
        $t_kw_7 = array('tryliard', 'tryliardów', 'tryliardy');
        $t_kw_6 = array('trylion', 'trylionów', 'tryliony');
        $t_kw_5 = array('biliard', 'biliardów', 'biliardy');
        $t_kw_4 = array('bilion', 'bilionów', 'bilony');
        $t_kw_3 = array('miliard', 'miliardów', 'miliardy');
        $t_kw_2 = array('milion', 'milionów', 'miliony');
        $t_kw_1 = array('tysiąc', 'tysięcy', 'tysiące');
        //$t_kw_0 = array('złoty','złotych','złote');
        $t_kw_0 = array('', '', '');

        if ($kw != '') {
            $kw = (substr_count($kw, ',') == 0) ? $kw . ',00' : $kw;
            $tmp = explode(",", $kw);
            $ln = strlen($tmp[0]);
            $tmp_a = ($ln % 3 == 0) ? (floor($ln / 3) * 3) : ((floor($ln / 3) + 1) * 3);
            for ($i = $ln; $i < $tmp_a; $i++) {
                $l_pad .= '0';
                $kw_w = $l_pad . $tmp[0];
            }
            $kw_w = ($kw_w == '') ? $tmp[0] : $kw_w;
            $paczki = (strlen($kw_w) / 3) - 1;
            $p_tmp = $paczki;
            for ($i = 0; $i <= $paczki; $i++) {
                $t_tmp = 't_kw_' . $p_tmp;
                $p_tmp--;
                $p_kw = substr($kw_w, ($i * 3), 3);
                $kw_w_s = ($p_kw{1} != 1) ? $t_a[$p_kw{0}] . ' ' . $t_b[$p_kw{1}] . ' ' . $t_c[$p_kw{2}] : $t_a[$p_kw{0}] . ' ' . $t_d[$p_kw{2}];
                if (($p_kw{0} == 0) && ($p_kw{2} == 1) && ($p_kw{1} < 1))
                    $ka = ${$t_tmp}[0]; //mozliwe ze $p_kw{1}!=1
                else if (($p_kw{2} > 1 && $p_kw{2} < 5) && $p_kw{1} != 1)
                    $ka = ${$t_tmp}[2];
                else
                    $ka = ${$t_tmp}[1];
                $kw_slow.=$kw_w_s . ' ' . $ka . ' ';
            }
        }
        if ($kw < 1000000 && eregi("milion", $kw_slow)) {

            $kw_slow = substr($kw_slow, 11, strlen($kw_slow));
        }
        $text = $kw_slow . ' ' . str_replace("PLN", "", str_replace("USD", "", $tmp[1])) . '/100.';
        return $text;
    }

    //add mz 2012-05-21
    //for subpanels
    //public function get_parent_for_subpanel() {
    //  return "SELECT
    //}
    //end mz
}