'notes' ); var $parent_name; var $parent_id; var $shipping_address_name; var $shipping_address_street; var $shipping_address_postalcode; var $shipping_address_city; var $shipping_address_country; var $parent_iln; var $order_no; var $delivery_date; var $so_id; var $pdf_text; var $ecommerce_invoices; var $currency_id; function EcmStockDocOut() { parent::SugarBean(); $this->setupCustomFields('EcmStockDocOuts'); 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 .= "ecmstockdocouts.* ,users.user_name as assigned_user_name"; if ($custom_join) { $query .= $custom_join ['select']; } $query .= " FROM ecmstockdocouts LEFT JOIN users ON ecmstockdocouts.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 ecmstockdocouts.name"; return $query; } function create_export_query($order_by, $where) { $custom_join = $this->custom_fields->getJOIN(); $query = "SELECT ecmstockdocouts.*, users.user_name assigned_user_name"; if ($custom_join) { $query .= $custom_join ['select']; } $query .= " FROM ecmstockdocouts "; $query .= " LEFT JOIN users ON ecmstockdocouts.assigned_user_id=users.id"; if ($custom_join) { $query .= $custom_join ['join']; } $query .= ""; $where_auto = " ecmstockdocouts.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 ecmstockdocouts.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); } 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, 'EcmStockDocOuts'); $the_array = parent::get_list_view_data(); // get stocks if ($this->ecmproduct_id != '') { //add subpanel data $tmp = $this->getPriceFromDocument($this->ecmproduct_id); $the_array ['QUANTITY'] = format_number($tmp['quantity']); $the_array ['PRICE_NETTO'] = format_number($tmp['price_netto']); $the_array ['TOTAL_NETTO'] = $tmp['total_netto']; } $this->retrieve($this->id); $u = new User (); $u->retrieve($this->created_by); $a = new EcmSale(); $a->retrieve($this->so_id); $the_array ['ZS'] = "" . $a->document_no . ""; $the_array ['CREATED_BY'] = '' . $u->first_name . ' ' . $u->last_name . ''; $the_array ['PARENT_NAME'] = '' . $this->parent_name . ''; unset ($u); $the_array ['STOCK_NAME'] = $this->stock_name; $out = $this->db->query("SELECT document_no,id FROM ecminvoiceouts WHERE wz_id like '%" . $this->id . "%' and deleted=0 and canceled=0"); $dane = $this->db->fetchByAssoc($out); $the_array ['INVOICE_DOC'] = '' . $dane['document_no'] . ''; $the_array ['NUMBER'] = '' . $this->document_no . ''; $the_array['DOCUMENT_AUTOINCREMENT'] = date('d.m.Y', strtotime($this->register_date)); // create image options $op = ''; $the_array ['OPTIONS'] = $op; return $the_array; } function getPriceFromDocument($product) { $zap = $this->db->query("select quantity,price_netto,total_netto from ecmstockdocoutitems where id='" . $product . "'"); $dane = $this->db->fetchByAssoc($zap); return $dane; } function getStatusMenuInfo($inJSON = true) { global $app_list_strings; $arr = array(); foreach ($app_list_strings ['ecmstockdocouts_status_dom'] as $key => $value) { $arr [$key] = array( 'enabled' => '
' . $value . '
', 'disabled' => '
' . $value . '
' ); } $json = getJSONobj(); if ($inJSON) return str_replace('"', '\"', $json->encode($arr)); else return $arr; } function create_new_list_query($order_by, $where, $filter = array(), $params = array(), $show_deleted = 0, $join_type = '', $return_array = false, $parentbean, $singleSelect = false) { echo ''; echo ''; return parent::create_new_list_query($order_by, $where, $filter, $params, $show_deleted, $join_type, $return_array, $parentbean, $singleSelect); } static function CreateImgStatus($id, $status) { global $app_list_strings; return ''; } /** * 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::quote(from_html($the_query_string)); array_push($where_clauses, "ecmstockdocouts.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 save($check_notify = FALSE) { global $current_user; require_once('modules/Accounts/Account.php'); $ac = new Account (); $ac->retrieve($this->parent_id); // generate number // add mz // get number format 2015-05-26 require_once('modules/EcmSysInfos/EcmSysInfo.php'); $EcmSysInfo = new EcmSysInfo (); $template = $EcmSysInfo->getFormatNumberForModule('EcmStockDocOuts'); global $current_user; if ($template != "") { require_once('include/ECM/EcmDocumentNumberGenerator/EcmDocumentNumberGenerator.inc.php'); $dng = new EcmDocumentNumberGenerator ('EcmStockDocOuts', $this->register_date); $this->document_no = $dng->parseNumber($template, $this->stock_id); } if ($this->parent_address_street == '' && $this->parent_address_city == '' && $this->parent_address_postalcode == '') { $this->parent_address_street = $ac->billing_address_street; $this->parent_address_city = $ac->billing_address_city; $this->parent_address_postalcode = $ac->billing_address_postalcode; $this->parent_address_country = $ac->billing_address_country; } $this->parent_nip = $ac->to_vatid; $aa = explode('/', $this->document_no); $this->document_autoincrement = date("Ymd", strtotime($this->register_date)) . '' . sprintf('%04d', (string)((int)$aa[0])); if ($EcmSysInfo->getDatabaseName() == 'preDb_0dcc87940d3655fa574b253df04ca1c3') { $this->ads_text = '2503793'; } unset ($EcmSysInfo); $return_id = parent::save($check_notify); $this->savePositions($return_id); // update total $db = $GLOBALS ['db']; $r = $db->fetchByAssoc($db->query("SELECT sum(total_netto) as sum_netto, sum(total_brutto) as sum_brutto FROM ecmstockdocoutitems WHERE ecmstockdocout_id='$this->id' and deleted='0'")); $db->query("UPDATE ecmstockdocouts SET total_brutto='" . $r ['sum_brutto'] . "', total_netto='" . $r ['sum_netto'] . "' WHERE id='$this->id'"); $this->calculateTotals($this->id); return $return_id; } function calculateTotals($id) { $vats_summary = ''; $total_netto = 0; $total_brutto = 0; $total_vat = 0; $res = $GLOBALS ['db']->query("select ROUND(sum(total_netto),2) AS total_netto,ROUND(sum((total_netto*ecmvat_value)/100),2) AS total_vat, ROUND(sum(((total_netto*ecmvat_value)/100)+total_netto),2) AS total_brutto,ecmvat_value from ecmstockdocoutitems where ecmstockdocout_id='" . $id . "' group by ecmvat_id"); while ($cc = $GLOBALS ['db']->fetchByAssoc($res)) { $total_netto += $cc ['total_netto']; $total_brutto += $cc ['total_brutto']; $total_vat += $cc ['total_vat']; $vats_summary .= $cc ['ecmvat_value'] . '%:' . $cc ['total_netto'] . ':' . $cc ['total_vat'] . ':' . $cc ['total_brutto'] . ','; } $res = $GLOBALS ['db']->query("update ecmstockdocouts set vats_summary='" . $vats_summary . "',total_netto='" . $total_netto . "',total_vat='" . $total_vat . "', total_brutto='" . $total_brutto . "' where id='" . $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 ($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; for ($i = 0; $i < count($position_list); $i++) { if ($position_list [$i] ['name'] == '') continue; $p = $position_list [$i]; require_once("modules/EcmProducts/EcmProduct.php"); $pr = new EcmProduct (); $pr->retrieve($p ['product_id']); $p ['category_id'] = $pr->product_category_id; unset ($pr); $item_id = create_guid(); $arr = array( 'id' => $item_id, '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 ['product_id'], 'position' => $position, 'code' => $p ['product_code'], 'name' => $p ['name'], 'price_netto' => $p ['price_netto'], 'price_brutto' => $p ['price_brutto'], 'total_netto' => $p ['total_netto'], 'total_brutto' => $p ['total_brutto'], 'total_vat' => $p ['total_vat'], 'ecmvat_id' => $p ['ecmvat_id'], 'ecmvat_name' => $p ['ecmvat_name'], 'ecmvat_value' => $p ['ecmvat_value'], 'price' => ((empty ($p ['price']) || $p ['price'] == '') ? 0 : $p ['price']), 'quantity' => ((empty ($p ['quantity']) || $p ['quantity'] == '') ? 0 : $p ['quantity']), 'dd_unit_id' => $p ['unit_id'], 'dd_unit_name' => $p ['unit_name'], 'ecmproductcategory_id' => $p ['category_id'], 'is_consignment' => $p ['product_is_consignment'], 'pieces_per_carton' => $p ['product_pieces_per_carton'], 'cartons' => $p ['product_cartons'], 'part_no' => $p ['part_no'], 'un_code' => $p ['un_code'], ); $p['ecmproduct_id'] = $p['product_id']; $this->db->query($this->constructInsertQuery($arr)); // add to stock if (!$p ['product_consignment_id'] || $p ['product_consignment_id'] == "") $this->deleteProductsFromStock($p, $id, $item_id); else $this->deleteProductsFromStockWithConsignment($p, $id, $item_id); // $this->addProducts ( $arr, $id, $item_id ); $position++; } } function deleteProductsFromStockWithConsignment($p, $id, $itemid) { $db = $GLOBALS ['db']; $in_p = $db->fetchByAssoc($db->query("SELECT price FROM ecmstockoperations WHERE id = '" . $p ['product_consignment_id'] . "'")); $this->addProductToStockOut($p ['product_consignment_id'], $p ['ecmproduct_id'], $p ['quantity'], $in_p ['price'], $this->register_date, $id, $this->stock_id, $itemid, $p ['product_consignment_part']); $db->query("update ecmstockdocoutitems set price='" . $in_p ['price'] . "' where id='" . $itemid . "'"); } function deleteProductsFromStock($p, $id, $itemid) { $arr = array(); $w = $GLOBALS ['db']->query("select quantity as qty,id,price from ecmstockoperations where deleted='0' and type='0' and in_id IS NULL and stock_id='" . $this->stock_id . "' and product_id='" . $p ['ecmproduct_id'] . "' and used='0'"); while ($rrr = $GLOBALS ['db']->fetchByAssoc($w)) { $GLOBALS['db']->query("INSERT INTO log VALUES ('" . serialize($ww) . "')"); $ww = $GLOBALS ['db']->query("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 ['ecmproduct_id'] . "' and deleted='0'"); $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; } } $avg_pq = 0; $avg_q = 0; foreach ($rr as $r) { $this->addProductToStockOut($r ['id'], $p ['ecmproduct_id'], $r ['qty'], $r ['price'], $this->register_date, $id, $this->stock_id, $itemid); $avg_pq += $r ['qty'] * $r ['price']; $avg_q += $r ['qty']; } $GLOBALS ['db']->query("update ecmstockdocoutitems set price='" . ($avg_pq / $avg_q) . "' where id='" . $itemid . "'"); } function addProductToStockOut($stock_in_id, $product_id, $quantity, $price, $date, $mm_id, $stock_id, $itemid, $part_no) { 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 = $this->id; $o->parent_name = $this->document_no; $o->parent_type = "EcmStockDocOuts"; if ($part_no) $o->part_no = $part_no; $o->quantity = $quantity; $o->price = $price; $o->in_id = $stock_in_id; $o->documentitem_id = $itemid; $o->type = 1; $oid = $o->save(); $GLOBALS ['db']->query("update ecmstockoperations set price='" . $price . "' where id='" . $oid . "'"); require_once("modules/EcmStockStates/EcmStockState.php"); $ss = new EcmStockState (); $ss->UpdateStockState($o->stock_id, $o->product_id); } /* function addProducts($p, $id, $itemid) { $arr = array (); $w = $GLOBALS ['db']->query ( "select quantity as qty,id,price from ecmstockoperations where deleted='0' and type='0' and in_id IS NULL and stock_id='" . $this->stock_id . "' and product_id='" . $p ['ecmproduct_id'] . "' and used='0'" ); while ( $rrr = $GLOBALS ['db']->fetchByAssoc ( $w ) ) { $ww = $GLOBALS ['db']->query ( "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 ['ecmproduct_id'] . "' and deleted='0'" ); $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; } } $avg_pq = 0; $avg_q = 0; foreach ( $rr as $r ) { $this->addProductToStockOut ( $r ['id'], $p ['ecmproduct_id'], $r ['qty'], $r ['price'], $this->register_date, $id, $this->stock_id, $itemid ); $avg_pq += $r ['qty'] * $r ['price']; $avg_q += $r ['qty']; } $GLOBALS ['db']->query ( "update ecmstockdocoutitems set price='" . ($avg_pq / $avg_q) . "',total='" . $avg_pq . "' where id='" . $itemid . "'" ); } function addProductToStockOut($stock_in_id, $product_id, $quantity, $price, $date, $mm_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 = $mm_id; $r = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "select document_no from ecmstockdocouts where id='" . $mm_id . "'" ) ); $o->parent_name = $r ['document_no']; $o->parent_type = "EcmStockDocOuts"; $o->quantity = $quantity; $o->price = $price; $o->in_id = $stock_in_id; $o->documentitem_id = $itemid; $o->type = 1; $oid = $o->save (); $GLOBALS ['db']->query ( "update ecmstockoperations set price='" . $price . "' where id='" . $oid . "'" ); require_once ("modules/EcmStockStates/EcmStockState.php"); $ss = new EcmStockState (); $ss->UpdateStockState ( $o->stock_id, $o->product_id ); } */ function getPosition($position) { if (!is_array($position)) return ''; global $timedate, $app_list_strings; $return_array = array(); $p = new EcmProduct (); $p->retrieve($position ['ecmproduct_id']); $rec = $this->db->query("select recipient_code from ecmsaleitems where ecmsale_id='" . $this->so_id . "' and deleted=0 and ecmproduct_id='" . $position ['ecmproduct_id'] . "'"); $dd = $this->db->fetchByAssoc($rec); $return_array ['recipient_code'] = $dd['recipient_code']; $return_array ['product_id'] = $position ['ecmproduct_id']; $return_array ['position'] = $position ['position']; $return_array ['product_code'] = $position ['code']; $return_array ['name'] = $position ['name']; $return_array ['quantity'] = $position ['quantity']; $return_array ['price'] = $position ['price']; $return_array ['price_netto'] = $position ['price_netto']; $return_array ['price_start'] = $position ['price_netto']; $return_array ['price_brutto'] = $position ['price_brutto']; $return_array ['price_purchase'] = $position ['price']; $return_array ['price_vat'] = $position ['price_vat']; $return_array ['total'] = $position ['total']; $return_array ['total_netto'] = $position ['total_netto']; $return_array ['total_brutto'] = $position ['total_brutto']; $return_array ['total_vat'] = $position ['total_vat']; $return_array ['product_parent_doc_id'] = $this->id; $return_array ['product_parent_doc_type'] = 'EcmStockDocOuts'; $return_array ['product_parent_doc_item_id'] = $position ['id']; $a = new Account (); $a->retrieve($this->parent_id); if ($a->invoice_type != 'K') { $return_array ['ecmvat_name'] = '0%'; $return_array ['ecmvat_value'] = '0'; $return_array ['ecmvat_id'] = '9b783d21-5548-6653-e1d6-49610eb3f9dd'; } else { $return_array ['ecmvat_name'] = $p->vat_name; $return_array ['ecmvat_value'] = $p->vat_value; $return_array ['ecmvat_id'] = $p->vat_id; } $return_array ['unit_id'] = $position ['dd_unit_id']; $return_array ['unit_name'] = $position ['dd_unit_name']; $return_array ['unit_precision'] = $app_list_strings ['ecmproducts_unit_dom_precision'] [$position ['dd_unit_id']]; $return_array ['product_precision'] = $app_list_strings ['ecmproducts_unit_dom_precision'] [$position ['dd_unit_id']]; $return_array['product_is_consignment'] = $position['is_consignment']; $return_array['product_pieces_per_carton'] = $position ['pieces_per_carton']; $return_array['product_cartons'] = $position ['cartons']; $return_array['part_no'] = $position ['part_no']; $return_array['un_code'] = $position ['un_code']; unset ($p); unset ($a); return $return_array; } function getPositionList($array = false) { if (isset ($this->id) && $this->id != '') { $query = "SELECT * FROM `" . strtolower($this->object_name) . "items` WHERE `" . strtolower($this->object_name) . "_id`='" . $this->id . "' order by position asc"; $r = $this->db->query($query); $return_array = array(); if ($r) { while ($w = $this->db->fetchByAssoc($r)) { $return_array [] = $this->getPosition($w); } $json = getJSONobj(); 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; } function formatPositions($position_list) { return; 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] ['unit_id'] = $app_list_strings ['ecmproducts_unit_dom'] [$value ['unit_id']]; $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; // $position_list[$key]['price'] = format_number($value['price']).' PLN'; // $position_list[$key]['total'] = format_number($value['total']).' PLN'; $this->currency_symbol = $currency->iso4217; } return $position_list; } // ***************************End Managing Positions*************************// // begin stock /* function insertProductsToStock($pl, $return_id, $stock_id, $itemid) { require_once ("modules/EcmStockOperations/EcmStockOperation.php"); $o = new EcmStockOperation (); require_once ("modules/EcmProducts/EcmProduct.php"); $o->product_id = $pl ['ecmproduct_id']; $p = new EcmProduct (); $p->retrieve ( $pl ['ecmproduct_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 = $return_id; $r = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "select document_no from ecmstockdocouts where id='" . $return_id . "'" ) ); $o->parent_name = $r ['document_no']; $o->parent_type = "EcmStockDocOuts"; // $GLOBALS['db']->query("INSERT INTO log VALUES ('".$pl['quantity']."')"); $o->quantity = format_number ( $pl ['quantity'] ); $o->price = str_replace ( ",", ".", str_replace ( ".", "", $pl ['price'] ) ); $o->documentitem_id = $itemid; $o->type = 0; $oid = $o->save (); $GLOBALS ['db']->query ( "update ecmstockoperations set price='" . $pl ['price'] . "' where id='" . $oid . "'" ); require_once ("modules/EcmStockStates/EcmStockState.php"); $ss = new EcmStockState (); $ss->UpdateStockState ( $o->stock_id, $o->product_id ); }*/ // end stock function ACLAccess($view, $is_owner = 'not_set') { global $current_user; $file = 'modules/EcmGroupSales/EcmGroupSale.php'; if (file_exists($file)) { require_once($file); $cc = EcmGroupSale::loadSettings(true); } else return true; if (is_admin($current_user)) { switch ($view) { case 'confirming' : return ($this->status == "s20"); case 'send_to_confirm' : return ($this->status == "s10"); case 'pdf_toolbar' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40"); } return true; } if ($is_owner == 'not_set') { $is_owner = $this->isOwner($current_user->id); } // if we don't implent acls return true if (!$this->bean_implements('ACL')) return true; $view = strtolower($view); if ($cc ['user_manager_role']) { // Manager switch ($view) { case 'list' : case 'index' : case 'listview' : return ACLController::checkAccess($this->module_dir, 'list', true); case 'edit' : case 'save' : case 'popupeditview' : case 'editview' : return (ACLController::checkAccess($this->module_dir, 'edit', $is_owner)); case 'view' : case 'detail' : case 'detailview' : return ACLController::checkAccess($this->module_dir, 'view', $is_owner); case 'delete' : return ACLController::checkAccess($this->module_dir, 'delete', $is_owner); case 'export' : return ACLController::checkAccess($this->module_dir, 'export', $is_owner); case 'import' : return ACLController::checkAccess($this->module_dir, 'import', true); case 'send_to_confirm' : return ($this->status == "s10"); case 'can_commit' : return true; case 'confirming' : return ($this->status == "s20"); case 'auto_commiting' : return true; case 'pdf_toolbar' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40"); } } else if ($cc ['user_representative_extra_role']) { // Representative Extra switch ($view) { case 'list' : case 'index' : case 'listview' : return ACLController::checkAccess($this->module_dir, 'list', true); case 'edit' : return (ACLController::checkAccess($this->module_dir, 'edit', $is_owner) && ($this->status == "s10" || $this->status == "s40")); case 'save' : case 'popupeditview' : case 'editview' : return (ACLController::checkAccess($this->module_dir, 'edit', $is_owner)); case 'view' : case 'detail' : case 'detailview' : return ACLController::checkAccess($this->module_dir, 'view', $is_owner); case 'delete' : return (ACLController::checkAccess($this->module_dir, 'delete', $is_owner) && $this->status == "s10"); case 'export' : return ACLController::checkAccess($this->module_dir, 'export', $is_owner); case 'import' : return ACLController::checkAccess($this->module_dir, 'import', true); case 'quote_to_sale' : case 'quote_to_invoice' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40" && $this->status != "s60"); case 'send_to_confirm' : return ($this->status == "s10"); case 'send_email' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40"); case 'can_commit' : return true; case 'confirming' : return false; case 'auto_commiting' : return true; case 'pdf_toolbar' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40"); } } else if ($cc ['user_representative_role']) { // Representative switch ($view) { case 'list' : case 'index' : case 'listview' : return ACLController::checkAccess($this->module_dir, 'list', true); case 'edit' : return (ACLController::checkAccess($this->module_dir, 'edit', $is_owner) && ($this->status == "s10" || $this->status == "s40")); case 'save' : case 'popupeditview' : case 'editview' : return (ACLController::checkAccess($this->module_dir, 'edit', $is_owner)); case 'view' : case 'detail' : case 'detailview' : return ACLController::checkAccess($this->module_dir, 'view', $is_owner); case 'delete' : return (ACLController::checkAccess($this->module_dir, 'delete', $is_owner) && $this->status == "s10"); case 'export' : return ACLController::checkAccess($this->module_dir, 'export', $is_owner); case 'import' : return ACLController::checkAccess($this->module_dir, 'import', true); case 'quote_to_sale' : case 'quote_to_invoice' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40" && $this->status != "s60"); case 'send_to_confirm' : return ($this->status == "s10"); case 'send_email' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40"); case 'can_commit' : return false; case 'confirming' : return false; case 'auto_commiting' : return false; case 'pdf_toolbar' : return ($this->status != "s10" && $this->status != "s20" && $this->status != "s40"); } } // if it is not one of the above views then it should be implemented on the page level return true; } // mz generate number function generateNumber($date) { $db = $GLOBALS ['db']; $r = $db->fetchByAssoc($db->query("SELECT count(id) as c FROM ecmstockdocouts WHERE deleted='0' AND YEAR(register_date)='" . date('Y', strtotime($date)) . "'")); if (!$r || !$r ['c'] || $r ['c'] == '') $count = 0; else $count = intval($r ['c']); $count++; // has 5 digits? $tmp = strval($count); while (strlen($tmp) < 5) $tmp = '0' . $tmp; return date('Ymd', strtotime($date)) . $tmp; } function generateDocNumberStock($stock, $date) { $db = $GLOBALS ['db']; $r = $db->fetchByAssoc($db->query("SELECT count(id) as c FROM ecmstockdocouts WHERE deleted='0' AND YEAR(register_date)='" . date('Y', strtotime($date)) . "' AND stock_id='" . $stock . "'")); $r2 = $db->fetchByAssoc($db->query("SELECT no FROM ecmstocks WHERE id='" . $stock . "'")); if (!$r || !$r ['c'] || $r ['c'] == '') $count = 0; else $count = intval($r ['c']); $count++; $tmp = strval($count); while (strlen($tmp) < 5) $tmp = '0' . $tmp; $number = date("Ymd", strtotime($date)) . $tmp; $n = intval(substr($number, 8, 5)); $y = substr($number, 0, 4); // has 3 digits? while (strlen($n) < 3) $n = '0' . $n; if ($r2 ['no'] != '') return '' . $n . '/' . $r2 ['no'] . '/' . $y; else return '' . $n . '/' . $y; } function formatNumber($number) { $n = intval(substr($number, 8, 5)); $y = substr($number, 0, 4); // has 3 digits? while (strlen($n) < 3) $n = '0' . $n; return 'WZ ' . $n . '/' . $y; } } ?>