setupCustomFields ( 'EcmStockOperations' ); foreach ( $this->field_defs as $field ) { $this->field_name_map [$field ['name']] = $field; } } function get_summary_text() { return $this->name; } function create_list_query($order_by, $where, $show_deleted = 0) { $custom_join = $this->custom_fields->getJOIN (); $query = "SELECT "; $query .= "ecmstockoperations.*,users.user_name as assigned_user_name"; if ($custom_join) $query .= $custom_join ['select']; $query .= " FROM ecmstockoperations "; $query .= "LEFT JOIN users ON ecmstockoperations.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 "; elseif ($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"; elseif ($order_by != "") $query .= " ORDER BY $order_by"; else $query .= " ORDER BY ecmstockoperations.name"; return $query; } function create_export_query($order_by, $where) { $custom_join = $this->custom_fields->getJOIN (); $query = "SELECT "; $query .= "ecmstockoperations.*,users.user_name as assigned_user_name"; if ($custom_join) $query .= $custom_join ['select']; $query .= " FROM ecmstockoperations "; $query .= "LEFT JOIN users ON ecmstockoperations.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 "; elseif ($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"; elseif ($order_by != "") $query .= " ORDER BY $order_by"; else $query .= " ORDER BY ecmstockoperations.name"; return $query; } function fill_in_additional_list_fields() { } function fill_in_additional_detail_fields() { parent::fill_in_additional_detail_fields (); } function get_list_view_data() { global $current_language; $the_array = parent::get_list_view_data (); $app_list_strings = return_app_list_strings_language ( $current_language ); $mod_strings = return_module_language ( $current_language, 'EcmStockOperations' ); $this->retrieve ( $this->id ); $mod_strings_doc = return_module_language ( $current_language, $this->parent_type ); $the_array ['PARENT_TYPE'] = $this->parent_type; $the_array ['PARENT_TYPE_NAME'] = $mod_strings_doc ['LBL_MODULE_NAME']; $the_array ['NAME'] = (($this->name == "") ? "blank" : $this->name); $r = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "select parent_name,parent_id,parent_type from ecmstockoperations where id='" . $this->id . "'" ) ); $the_array ['DOCUMENT_NAME'] = $r ['parent_name']; $the_array ['PREVIEW_PDF'] = ''; $the_array ['STOCK_NAME'] = '' . $this->stock_name . ''; $the_array ['ENCODED_NAME'] = $this->name; $db = $GLOBALS['db']; $r = $db->fetchByAssoc($db->query("SELECT quantity FROM ecmstockoperations WHERE id='$this->id'")); $the_array['QUANTITY'] = $r['quantity']; return $the_array; } 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, "ecmstockoperations.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, $ecmstockoperation) { global $mod_strings, $app_list_strings; $xtpl->assign ( "ECMSTOCKOPERATION_SUBJECT", $ecmstockoperation->name ); return $xtpl; } function bean_implements($interface) { switch ($interface) { case 'ACL' : return true; } return false; } function save($check_notify = FALSE) { return parent::save ( $check_notify ); } function deleteProducts($p, $id, $itemid, $stock_id, $date) { $arr = array (); $w = $GLOBALS ['db']->query ( "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='" . $stock_id . "' and product_id='" . $p ['id'] . "'" ); 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='" . $stock_id . "' and product_id='" . $p ['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; } } $qq = 0; $pp = 0; $avg_pq = 0; $avg_q = 0; foreach ( $rr as $r ) { $this->addDeleteOperation ( $r ['id'], $p ['id'], $r ['qty'], $r ['price'], $date, $id, $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 addDeleteOperation($stock_in_id, $product_id, $quantity, $price, $date, $wz_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 = $wz_id; $r = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "select document_no from ecmstockdocouts where id='" . $wz_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; $o->save (); require_once ("modules/EcmStockStates/EcmStockState.php"); $ss = new EcmStockState (); $ss->UpdateStockState ( $o->stock_id, $o->product_id ); } function saveReservation($stock_id, $product_id, $temp_doc_id, $temp_item_id, $quantity, $doc_type) { global $db, $current_user; // get session session_start (); $sid = session_id (); $q = "select count(*) as cnt from ecmreservations where temp_item_id='" . $temp_item_id . "'"; // var_dump($q); $r = $db->fetchByAssoc ( $db->query ( $q ) ); // var_dump($r); if ($r ['cnt'] > 0) { $updateQuery = ' UPDATE ecmreservations SET quantity = \'' . $quantity . '\' WHERE temp_item_id = \'' . $temp_item_id . '\' ;'; $result = $db->query ( $updateQuery ); } else { $insertQuery = ' INSERT INTO ecmreservations SET date_modified = \'' . date ( "Y-m-d H:i:s" ) . '\', date_entered = \'' . date ( "Y-m-d H:i:s" ) . '\', modified_user_id = \'' . $_SESSION ['authenticated_user_id'] . '\', created_by = \'' . $_SESSION ['authenticated_user_id'] . '\', id = \'' . create_guid () . '\', temp_doc_id = \'' . $temp_doc_id . '\', temp_item_id = \'' . $temp_item_id . '\', product_id = \'' . $product_id . '\', quantity = \'' . $quantity . '\', session_id = \'' . $sid . '\', stock_id = \'' . $stock_id . '\', doc_type = \'' . $doc_type . '\' ;'; $result = $db->query ( $insertQuery ); } return $result; } function saveParentReservation($stock_id, $product_id, $doc_id, $item_id, $quantity, $doc_type) { global $db, $current_user; session_start (); $q = "select count(*) as cnt from ecmreservations where item_id='$item_id' and doc_id='$doc_id'"; $r = $db->fetchByAssoc ( $db->query ( $q ) ); if ($r ['cnt'] > 0) { $updateQuery = ' UPDATE ecmreservations SET quantity = \'' . $quantity . '\' WHERE item_id = \'' . $item_id . '\' ;'; $result = $db->query ( $updateQuery ); } else { $insertQuery = ' INSERT INTO ecmreservations SET date_modified = \'' . date ( "Y-m-d H:i:s" ) . '\', date_entered = \'' . date ( "Y-m-d H:i:s" ) . '\', modified_user_id = \'' . $_SESSION ['authenticated_user_id'] . '\', created_by = \'' . $_SESSION ['authenticated_user_id'] . '\', id = \'' . create_guid () . '\', doc_id = \'' . $doc_id . '\', item_id = \'' . $item_id . '\', product_id = \'' . $product_id . '\', quantity = \'' . $quantity . '\', stock_id = \'' . $stock_id . '\', doc_type = \'' . $doc_type . '\' ;'; $result = $db->query ( $insertQuery ); } return $result; } function updateReservation($doc_id, $item_id, $quantity) { global $db; if ($quantity < 0) { $q = $db->fetchByAssoc ( $db->query ( "SELECT quantity FROM ecmreservations WHERE doc_id='$doc_id' and item_id='$item_id'" ) ); if (! $q || $q ['quantity'] == '') return; if ($q ['quantity'] + $quantity <= 0) $db->query ( "DELETE from ecmreservations WHERE doc_id='$doc_id' AND item_id='$item_id'" ); else $db->query ( "UPDATE ecmreservations SET quantity=quantity+$quantity WHERE doc_id='$doc_id' AND item_id='$item_id'" ); } /* * else { $q = $db->fetchByAssoc($db->query("SELECT quantity FROM ecmreservations WHERE doc_id='$doc_id' and item_id='$item_id'")); if (!$q || $q['quantity']='') { } } */ } /** * Save document reservations. */ function saveDocumentReservations($temp_doc_id) { global $db; $query = ' UPDATE `ecmreservations` AS r SET r.`session_id` = NULL, r.`doc_id` = r.`temp_doc_id`, r.`item_id` = r.`temp_item_id`, r.`temp_doc_id` = NULL, r.`temp_item_id` = NULL WHERE r.`temp_doc_id` = \'' . $temp_doc_id . '\' ;'; echo $query; $result = $db->query ( $query ); return $result; } function removeReservation($temp_item_id) { global $db; $db->query ( "DELETE FROM ecmreservations WHERE temp_item_id='" . $temp_item_id . "'" ); } function removeDocumentReservations($temp_doc_id) { global $db; $db->query ( "DELETE FROM ecmreservations WHERE temp_doc_id='" . $temp_doc_id . "'" ); } function removeSaleProductReservations($item_id) { global $db; $db->query ( "DELETE FROM ecmreservations WHERE item_id='" . $item_id . "'" ); } function removeSaleReservations($sale_id) { global $db; $db->query ( "DELETE FROM ecmreservations WHERE doc_id='" . $sale_id . "'" ); } function getSaleReservations($ecmsale_id, $item_id) { global $db; $res = $db->fetchByAssoc ( $db->query ( "SELECT quantity as res FROM ecmreservations WHERE doc_id='" . $ecmsale_id . "' AND item_id='" . $item_id . "'" ) ); return $res ['res']; } function getStockR($product_id, $stock_id = "", $item_id = "") { global $db; if ($stock_id != '') $stock = " and stock_id='" . $stock_id . "'"; else $stock = ""; $z = "select sum(quantity) as q from ecmreservations where product_id='" . $product_id . "'" . $stock; $q = $db->query ( $z ); $row = $db->fetchByAssoc ( $q ); return ( int ) $row ['q']; } // stock without reservations function getRealStock($product_id, $stock_id = "") { global $db; if ($stock_id != '') $stock = " and stock_id='" . $stock_id . "'"; else $stock = ""; $rquery = "SELECT sum(quantity) as quantity FROM ecmstockstates WHERE product_id='" . $product_id . "'" . $stock; // get stockstates quantity $r = $db->fetchByAssoc ( $db->query ( $rquery ) ); if (! $r ['quantity']) $r ['quantity'] = 0; return $r ['quantity']; } function getStock($product_id, $stock_id = "") { global $db; if ($stock_id != '') $stock = " and stock_id='" . $stock_id . "'"; else $stock = ""; $rquery = "SELECT quantity FROM ecmstockstates WHERE product_id='" . $product_id . "'" . $stock; // get stockstates quantity $r = $db->fetchByAssoc ( $db->query ( $rquery ) ); $rrquery = "SELECT sum(quantity) as res FROM ecmreservations WHERE product_id='" . $product_id . "'" . $stock; // get reservations $rr = $db->fetchByAssoc ( $db->query ( $rrquery ) ); if (! is_array ( $rr )) $rr ['res'] = 0; return $r ['quantity'] - $rr ['res']; } function getStockArray($product_id) { if (! $product_id) return ''; global $db; $res = $db->query ( "SELECT id, name FROM ecmstocks WHERE deleted='0'" ); $ret = array (); while ( $row = $db->fetchByAssoc ( $res ) ) { $qty = $this->getStock ( $product_id, $row ['id'] ); if ($qty > 0) $ret [$row ['name']] = $qty; } return $ret; } function getPurchaseArray($product_id) { if (! $product_id) return ''; global $db; $res = $db->query("SELECT parent_name, parent_id, quantity, price FROM ecmstockoperaions WHERE product_id='$product_id' AND type='1' AND used='0' AND deleted='0'"); return "SELECT parent_name, parent_id, quantity, price FROM ecmstockoperaions WHERE product_id='$product_id' AND type='1' AND used='0' AND deleted='0'"; } function getAllQuantity($product_id) { global $db; $r = $db->fetchByAssoc ( $db->query ( " SELECT CASE WHEN (SELECT sum(quantity) FROM ecmreservations WHERE product_id='$product_id') IS NULL THEN (SELECT sum(quantity) FROM ecmstockstates WHERE product_id='$product_id') ELSE ((SELECT sum(quantity) FROM ecmstockstates WHERE product_id='$product_id')-(SELECT sum(quantity) FROM ecmreservations WHERE product_id='$product_id')) END as qty " ) ); return $r ['qty']; } function checkStock($p, $stock_id) { global $db; $p = base64_decode ( $p ); print_r ( $_REQUEST ); require_once ('include/json_config.php'); $json_config = new json_config (); $json = getJSONobj (); $pll = array (); $exp = explode ( "||||", $p ); foreach ( $exp as $ep ) { if ($ep) { $pll [] = $json->decode ( htmlspecialchars_decode ( $ep ) ); } } $p = $pll; foreach ( $p as $rr ) { $products [] = array ( "product_name" => $rr ['name'], "product_id" => $rr ['id'], "quantity" => $rr ['quantity'], "item_id" => $rr ['item_id'] ); } // print_r($products);echo "mmmmmmmmmm"; $str .= '
'; $str .= 'Sprawdzanie stanów magazynowych'; $str .= ''; if (count ( $products ) > 0) { foreach ( $products as $p ) { if (! $p ['product_id']) continue; $qty = self::getStock ( $p ['product_id'], $stock_id, $p ['item_id'] ); $str .= ''; } } $str .= '
ProduktIlośćMagazyn 
' . $p ['product_name'] . '' . $p ['quantity'] . '' . $qty . ''; if ($p ['quantity'] > $qty) { $no = true; $str .= '' . "błąd" . ''; } else $str .= '' . "ok" . ''; $str .= '

'; if ($no) { $str .= '' . "Brakuje produktów na magazynie" . ''; $str .= ' '; } else { $str .= ''; } $str .= '
'; return $str; } function checkStockSales($p, $stock_id) { global $db; require_once ('include/json_config.php'); $json_config = new json_config (); $json = getJSONobj (); $pll = array (); $exp = explode ( "||||", $p ); foreach ( $exp as $ep ) { if ($ep) { $pll [] = $json->decode ( htmlspecialchars_decode ( $ep ) ); } } $p = $pll; foreach ( $p as $rr ) { $products [] = array ( "product_name" => $rr ['name'], "product_id" => $rr ['id'], "quantity" => $rr ['quantity'], "reservation" => $rr ['reservation'], "rq" => $rr ['rq'] ); } $str .= '
'; $str .= 'Sprawdzanie stanów magazynowych'; $str .= ''; if (count ( $products ) > 0) { foreach ( $products as $p ) { if (! $p ['product_id'] || ! $p ['reservation']) continue; $qty = self::getStock ( $p ['product_id'], $stock_id ); $str .= ''; } } $str .= '
ProduktIlośćIlość do rezerwacjiMagazyn 
' . $p ['product_name'] . '' . $p ['quantity'] . '' . $p ['rq'] . '' . $qty . ''; if ($p ['rq'] > $qty || $p ['rq'] > $p ['quantity']) { $no = true; $str .= '' . "błąd" . ''; } else $str .= '' . "ok" . ''; $str .= '

'; if ($no) { $str .= '' . "Brakuje produktów na magazynie lub wpisałeś za dużą ilość produktów do zarezerwowania" . ''; $str .= ' '; } else { $str .= ''; } $str .= '
'; return $str; } } ?>