2025-05-12 15:44:39 +00:00
< ? php
if ( ! defined ( 'sugarEntry' ) || ! sugarEntry )
die ( 'Not A Valid Entry Point' );
/* * ***************************************************************************
* The contents of this file are subject to the RECIPROCAL PUBLIC LICENSE
* Version 1.1 ( " License " ); You may not use this file except in compliance
* with the License . You may obtain a copy of the License at
* http :// opensource . org / licenses / rpl . php . Software distributed under the
* License is distributed on an " AS IS " basis , WITHOUT WARRANTY OF ANY KIND ,
* either express or implied .
*
* You may :
* a ) Use and distribute this code exactly as you received without payment or
* a royalty or other fee .
* b ) Create extensions for this code , provided that you make the extensions
* publicly available and document your modifications clearly .
* c ) Charge for a fee for warranty or support or for accepting liability
* obligations for your customers .
*
* You may NOT :
* a ) Charge for the use of the original code or extensions , including in
* electronic distribution models , such as ASP ( Application Service
* Provider ) .
* b ) Charge for the original source code or your extensions other than a
* nominal fee to cover distribution costs where such distribution
* involves PHYSICAL media .
* c ) Modify or delete any pre - existing copyright notices , change notices ,
* or License text in the Licensed Software
* d ) Assert any patent claims against the Licensor or Contributors , or
* which would in any way restrict the ability of any third party to use the
* Licensed Software .
*
* You must :
* a ) Document any modifications you make to this code including the nature of
* the change , the authors of the change , and the date of the change .
* b ) Make the source code for any extensions you deploy available via an
* Electronic Distribution Mechanism such as FTP or HTTP download .
* c ) Notify the licensor of the availability of source code to your extensions
* and include instructions on how to acquire the source code and updates .
* d ) Grant Licensor a world - wide , non - exclusive , royalty - free license to use ,
* reproduce , perform , modify , sublicense , and distribute your extensions .
*
* The Original Code is : CommuniCore
* Olavo Farias
* 2006 - 04 - 7 olavo . farias @ gmail . com
*
* The Initial Developer of the Original Code is CommuniCore .
* Portions created by CommuniCore are Copyright ( C ) 2005 CommuniCore Ltda
* All Rights Reserved .
* ****************************************************************************** */
require_once ( 'data/SugarBean.php' );
require_once ( 'include/utils.php' );
include_once ( " modules/EcmStockOperations/EcmStockOperation.php " );
include_once ( " modules/EcmPaymentStates/helper.php " );
// SHOULD INCLUDE SELECTIVELY
class EcmProduct extends SugarBean {
var $field_name_map = array ();
// STANDARD FIELDS
var $id ;
var $date_entered ;
var $date_modified ;
var $modified_user_id ;
var $assigned_user_id ;
var $name ;
//TABLE COLUMNS
var $code ;
var $product_category_id ;
var $product_category_name ;
var $product_subcategory_id ;
var $product_subcategory_name ;
var $product_line_id ;
var $product_line_name ;
var $manufacturer_id ;
var $manufacturer_name ;
var $contact_id ;
var $contact_name ;
var $vendor_id ;
var $vendor_name ;
var $vendor_part_no ;
var $product_active ;
var $flag ;
var $sales_start_date ;
var $sales_end_date ;
var $parent_type ;
var $parent_id ;
var $parent_name ;
var $website ;
var $part_no ;
var $serial_no ;
var $exchange_rate_id ;
var $exchange_rate_name ;
var $fob_price ;
var $purchase_price ;
var $ems_price ;
var $commission_rate ;
var $custom_duty_rate ;
var $srp_price ;
var $srp_price_eur ;
var $srp_promo_price ;
var $tax_class_id ;
var $tax_class_name ;
var $usage_unit_id ;
var $usage_unit_name ;
var $qty_in_stock ;
var $qty_in_demand ;
var $ems_qty_in_stock ;
var $reorder_level ;
var $sales_last_month_1 ;
var $sales_last_month ;
var $sales_this_month ;
var $qty_per_unit ;
var $average_sale_3_months ;
var $sales_plus_1 ;
var $sales_plus_2 ;
var $sales_plus_3 ;
var $product_picture ;
var $packing_front_picture ;
var $driver_1 ;
var $driver_2 ;
var $moq ;
var $fob_basis_id ;
var $fob_basis_name ;
var $delivery_time_fob ;
var $pieces_per_carton ;
var $product_netto_weight ;
var $product_brutto_weight ;
var $packing_type_id ;
var $packing_type_name ;
var $packing_dimensions_1 ;
var $packing_dimensions_2 ;
var $packing_dimensions_3 ;
var $rma ;
var $carton_dimensions_1 ;
var $carton_dimensions_2 ;
var $carton_dimensions_3 ;
var $carton_netto_weight ;
var $carton_brutto_weight ;
var $carton_volume_meter ;
var $carton_volume_feet ;
var $country_of_origin ;
var $certificate_of_origin ;
var $form_a ;
var $vat_id ;
var $vat_name ;
var $vat_value ;
var $selling_price ;
var $ems_ordered ;
var $graduated_prices ;
var $unit_id ;
var $ordered ;
var $lead_time ;
var $production ;
var $description_card ;
var $characteristic_card ;
var $specification_card ;
var $used_to_card ;
var $image_card ;
var $end_of_line ;
var $status ;
var $add_status ;
var $models ;
var $position_list ;
var $th ;
var $ean ;
2025-06-05 20:02:44 +00:00
var $position_list3 ;
var $modified_user_name ;
2025-05-12 15:44:39 +00:00
// RELATED FIELDS
var $created_by ;
var $created_by_name ;
var $modified_by_name ;
var $assigned_user_name ;
// SUBPANELS RELATED
// MODULE OBJECT DETAILS
var $module_dir = 'EcmProducts' ;
var $table_name = " ecmproducts " ;
var $object_name = " EcmProduct " ;
//RELATED TABLE NAMES
// USED TO RETRIEVE RELATED FIELDS FROM FORM POSTS.
var $additional_column_fields = Array (
'assigned_user_name' ,
'assigned_user_id' ,
'modified_user_id' ,
'created_by' ,
);
var $relationship_fields = Array (
//RELATIONSHIP FIELDS
);
function EcmProduct () {
parent :: SugarBean ();
$this -> setupCustomFields ( 'EcmProducts' );
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 .= "
ecmproducts .*
, users . user_name as assigned_user_name " ;
if ( $custom_join ) {
$query .= $custom_join [ 'select' ];
}
$query .= " FROM ecmproducts
LEFT JOIN users
ON ecmproducts . 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 ecmproducts.name " ;
return $query ;
}
function create_export_query ( $order_by , $where ) {
$custom_join = $this -> custom_fields -> getJOIN ();
$query = " SELECT
ecmproducts .* ,
users . user_name assigned_user_name " ;
if ( $custom_join ) {
$query .= $custom_join [ 'select' ];
}
$query .= " FROM ecmproducts " ;
$query .= " LEFT JOIN users
ON ecmproducts . assigned_user_id = users . id " ;
if ( $custom_join ) {
$query .= $custom_join [ 'join' ];
}
$query .= " " ;
$where_auto = " ecmproducts.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 ecmproducts.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 );
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT SUM(quantity) as qty FROM ecmstockstates WHERE product_id=' " . $this -> id . " ' " ));
$this -> ems_qty_in_stock = $r [ 'qty' ];
}
function getSale ( $date ) {
foreach ( $date as $d ) {
$z = " select
sum (
CASE WHEN e . type != 'correct'
THEN
CASE WHEN e . currency_value is null or e . currency_value = ''
THEN
i . price * i . quantity
ELSE
i . price * i . quantity * e . currency_value
END
ELSE
CASE WHEN ci . price is null or ci . quantity is null
THEN
0
ELSE
i . price * i . quantity - ci . price * ci . quantity
END
END
) as sales ,
sum (
CASE WHEN e . type != 'correct'
THEN
i . purchase_price * i . quantity
ELSE
CASE WHEN ci . quantity is null
THEN
0
ELSE
ci . purchase_price * i . quantity - ci . purchase_price * ci . quantity
END
END
) as purchase ,
sum (
CASE WHEN e . type != 'correct'
THEN
i . quantity
ELSE
CASE WHEN ci . quantity is null
THEN
0
ELSE
i . quantity - ci . quantity
END
END
) as quantity
from ecminvoiceoutitems as i
left join ecminvoiceoutitems as ci on i . ecminvoiceoutitem_id = ci . id
inner join ecminvoiceouts as e on e . id = i . ecminvoiceout_id
left join ecmstockdocouts as w on e . wz_id = w . id
left join ecmproducts as p on p . id = i . ecmproduct_id
where
e . register_date like '" . $d . "%' and e . status = 'accepted' and i . ecmproduct_id = '" . $this->id . "' " ;
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( $z ));
$total_s += $r [ 'sales' ];
$total_p += $r [ 'purchase' ];
$total_q += $r [ 'quantity' ];
/* $r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select sum(i.quantity) as q,sum(i.quantity*i.price) as s,sum(i.quantity*i.purchase_price) as p from ecminvoiceouts as e inner join ecminvoiceoutitems as i on i.ecminvoiceout_id=e.id where e.register_date like ' " . $d . " %' and e.status='accepted' and i.ecmproduct_id=' " . $this -> id . " ' " ));
$total_s += $r [ 's' ];
$total_p += $r [ 'p' ];
$total_q += $r [ 'q' ];
$w = $GLOBALS [ 'db' ] -> query ( " select i.quantity,i.price,i.purchase_price,i.ecminvoiceoutitem_id from ecminvoiceouts as e inner join ecminvoiceoutitems as i on i.ecminvoiceout_id=e.id where e.register_date like ' " . $d . " %' and e.status='accepted' and e.type='correct' and i.ecmproduct_id=' " . $this -> id . " ' " );
while ( $r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $w )){
$total_s += $r [ 'price' ] * $r [ 'quantity' ];
$total_q += $r [ 'quantity' ];
$rr = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select price,quantity,purchase_price from ecminvoiceoutitems where id=' " . $r [ 'ecminvoiceoutitem_id' ] . " ' " ));
$totat_s -= $rr [ 'price' ] * $rr [ 'quantity' ];
$totat_p -= $rr [ 'purchase_price' ] * $rr [ 'quantity' ];
$total_p += $rr [ 'purchase_price' ] * $r [ 'quantity' ];
$totat_q -= $rr [ 'quantity' ];
} */
}
//echo $total_s." ".$total_p." ".$total_q."<br>";
return array ( " sale " => $total_s , " purchase " => $total_p , " quantity " => $total_q );
}
function get_list_view_data () {
global $current_language , $current_user , $app_list_strings , $mod_strings ;
global $numerek ;
$record = $this -> record_id ;
$record_type = $this -> record_type ;
$this -> retrieve ( $this -> id );
$numerek = $this -> id ;
$i = 0 ;
$i ++ ;
$the_array = parent :: get_list_view_data ();
if ( $record != '' ){
$tmp = $this -> getQuantityPrice ( $record , $record_type );
$the_array [ 'QUANTITY' ] = number_format ( $tmp [ 'quantity' ], $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $this -> unit_id ], " , " , " . " );
$the_array [ 'TOTAL_NETTO' ] = number_format ( $tmp [ 'total_netto' ], 2 , ',' , '.' );
$the_array [ 'PRICE_NETTO' ] = number_format ( $tmp [ 'price_netto' ], 2 , ',' , '.' );
$the_array [ 'DOCUMENT_NO' ] = $tmp [ 'document_no' ];
$the_array [ 'DOCUMENT_TYPE' ] = $tmp [ 'DOCUMENT_TYPE' ];
$the_array [ 'REGISTER_DATE' ] = date ( 'd.m.Y' , strtotime ( $tmp [ 'register_date' ]));
$the_array [ 'CODE' ] = $tmp [ 'code' ];
}
global $current_user_id ;
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT SUM(quantity) as qty FROM ecmstockstates WHERE product_id=' " . $this -> id . " ' " ));
$this -> ems_qty_in_stock = $r [ 'qty' ];
// 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 == " " ) ? " <em>brak</em> " : $this -> name );
//chmod('modules/EcmProducts/upload/images/'.$this->product_picture,777);
$op = new EcmStockOperation ();
$value = $op -> getAllQuantity ( $this -> id );
if ( $value != null ) {
$the_array [ 'STOCK_QTY' ] = number_format ( $r [ 'qty' ], $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $this -> unit_id ], " , " , " . " );
} else {
$the_array [ 'STOCK_QTY' ] = number_format ( 0 , $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $this -> unit_id ], " , " , " . " );
}
$the_array [ 'ENCODED_NAME' ] = $this -> name ;
$lolek = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select sum(pp.product_quantity) as l from ecmproducts_ecmpurchaseorders as pp inner join ecmpurchaseorders as p on p.id=pp.ecmpurchaseorder_id where pp.ecmproduct_id=' " . $this -> id . " ' and p.status='accepted' " ));
$the_array [ 'ORDERED' ] = $lolek [ 'l' ];
if ( $the_array [ 'SRP_PRICE' ] != '' ) {
$the_array [ 'SRP_PRICE' ] = number_format ( $this -> srp_price , 2 , $GLOBALS [ 'sugar_config' ][ 'default_decimal_seperator' ], $GLOBALS [ 'sugar_config' ][ 'default_number_grouping_seperator' ]);
}
if ( $the_array [ 'PURCHASE_PRICE' ] != '' ) {
$the_array [ 'PURCHASE_PRICE' ] = number_format ( $this -> purchase_price , 2 , $GLOBALS [ 'sugar_config' ][ 'default_decimal_seperator' ], $GLOBALS [ 'sugar_config' ][ 'default_number_grouping_seperator' ]);
}
$the_array [ 'EDIT_BTN' ] = '<img src="themes/Sugar5/images/edit_inline.gif" onclick="javascript:window.location=\'index.php?module=EcmProducts&action=EditView&record=' . $this -> id . '&return_module=EcmProducts&return_action=index\';" style="cursor: pointer;" border="0">' ;
if ( $the_array [ 'COMMISSION_RATE' ] != '' ) {
$the_array [ 'COMMISSION_RATE' ] = number_format ( $this -> commission_rate , 2 , $GLOBALS [ 'sugar_config' ][ 'default_decimal_seperator' ], $GLOBALS [ 'sugar_config' ][ 'default_number_grouping_seperator' ]);
}
if ( $_SESSION [ $current_user -> user_name . '_PREFERENCES' ][ 'global' ][ 'EcmProductsQ' ][ 'stock_id_basic' ]) {
$sid = $_SESSION [ $current_user -> user_name . '_PREFERENCES' ][ 'global' ][ 'EcmProductsQ' ][ 'stock_id_basic' ];
$st = " and stock_id=' " . $sid . " ' " ;
} elseif ( $_SESSION [ $current_user -> user_name . '_PREFERENCES' ][ 'global' ][ 'EcmProductsQ' ][ 'stock_id_advanced' ]) {
$sid = $_SESSION [ $current_user -> user_name . '_PREFERENCES' ][ 'global' ][ 'EcmProductsQ' ][ 'stock_id_advanced' ];
$st = " and stock_id=' " . $sid . " ' " ;
} else
$st = " " ;
$r2 = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select round(price,2) as price from ecmstockdocinitems where ecmproduct_id=' " . $this -> id . " ' order by date_entered desc LIMIT 1 " ));
$the_array [ 'LAST_PURCHASE_PRICE' ] = number_format ( $r2 [ 'price' ], 2 , " , " , " . " );
$the_array [ 'UNIT_NAME' ] = $app_list_strings [ 'ecmproducts_unit_dom' ][ $this -> unit_id ];
if ( ! $this -> code )
$this -> code = '--' ;
if ( $_REQUEST [ 'action' ] == 'ListView' || $_REQUEST [ 'action' ] == 'index' ) {
if ( $this -> product_active ) {
if ( $this -> status == 'active' ) {
$the_array [ 'CODE' ] = '<div style="background:green;font-weight:bold;padding:3px;color:white;text-align:left">' . $this -> code . '</div>' ;
}
if ( $this -> status == 'new' ) {
$the_array [ 'CODE' ] = '<div style="background:blue;font-weight:bold;padding:3px;color:white;text-align:left">' . $this -> code . '</div>' ;
}
if ( $this -> status == 'end_of_line' ) {
$the_array [ 'CODE' ] = '<div style="background:yellow;font-weight:bold;padding:3px;color:red;text-align:left">' . $this -> code . '</div>' ;
}
if ( ! $this -> status ) {
$the_array [ 'CODE' ] = '<div style="background:grey;font-weight:bold;padding:3px;color:red;text-align:left">' . $this -> code . '</div>' ;
}
} else
$the_array [ 'CODE' ] = '<div style="background:red;font-weight:bold;padding:3px;color:white;text-align:left">' . $this -> code . '</div>' ;
}
/* $z = " select sum(quantity) as q from ecmstockstates where product_id=' " . $this -> id . " ' and deleted='0' " . $st ;
$w = $GLOBALS [ 'db' ] -> query ( $z );
$qq = 0 ;
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $w );
$qq += $r [ 'q' ]; */
$the_array [ 'EMS_QTY_IN_STOCK' ] = number_format ( $this -> ems_qty_in_stock , 0 , " " , " " );
/*
include_once ( " modules/EcmProductReports/vtigerConnector.php " );
$vc = new vtigerConnector ();
$vc -> where = " poproductrel.productcode like ' " . $this -> code . " ' " ;
$vc -> limit = " 0,999 " ;
$vc -> getData ();
$vc -> getCount ();
$data = $vc -> data ;
for ( $i = 0 ; $i < $vc -> count ; $i ++ ){
$ord += $data [ $i ][ 'quantity' ];
}
*/
if ( file_exists ( 'modules/EcmProducts/upload/images/' . $this -> product_picture ) && $this -> product_picture ) {
$the_array [ 'IMAGE' ] = '<img src="modules/EcmProducts/upload/images/'
. $this -> product_picture .
'" width="50px" border="0" onclick="window.open(\'modules/EcmProducts/upload/images/big/' . $this -> product_picture . '\',\'' . $this -> product_picture . '\')">' ;
}
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select * from ecmproducts where id=' " . $this -> id . " ' " ));
$rp_sum = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select sum(p.product_quantity) as s from ecmproducts_ecmpurchaseorders as p inner join ecmpurchaseorders as e on e.id=p.ecmpurchaseorder_id where p.ecmproduct_id=' " . $this -> id . " ' and p.deleted='0' and e.deleted='0' " ));
$rp_app = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select sum(p.product_quantity) as s from ecmproducts_ecmpurchaseorders as p inner join ecmpurchaseorders as e on e.id=p.ecmpurchaseorder_id where p.ecmproduct_id=' " . $this -> id . " ' and p.deleted='0' and (e.status='accepted' or e.status='mailed') and e.deleted='0' " ));
$rp_cr = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select sum(p.product_quantity) as s from ecmproducts_ecmpurchaseorders as p inner join ecmpurchaseorders as e on e.id=p.ecmpurchaseorder_id where p.ecmproduct_id=' " . $this -> id . " ' and p.deleted='0' and e.status='not_accepted' and e.deleted='0' " ));
$the_array [ 'ORD_CREATED' ] = $rp_cr [ 's' ];
$the_array [ 'ORD_APPROVED' ] = $rp_app [ 's' ];
//$the_array['ORDERED']=$rp_app['s']+$rp_cr['s'];
//$the_array['ORD_DELIVERED']=$r['ord_delivered'];
$stock_value = ( $this -> ems_price * $this -> ems_qty_in_stock );
$the_array [ 'STOCK_VALUE' ] = number_format ( $stock_value , $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $this -> unit_id ], " , " , " . " );
if ( round (( $r [ 's3' ])) != 0 )
$stock_month = (( $this -> ems_qty_in_stock + $this -> ordered ) / round (( $r [ 's3' ])));
else
$stock_month = 0 ;
$the_array [ 'STOCK_MONTH' ] = number_format ( $stock_month , $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $this -> unit_id ], " , " , " . " );
$the_array [ 'EMS_PRICE' ] = number_format ( $this -> ems_price , 2 , " , " , " . " );
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select flag from ecmproducts where id=' " . $this -> id . " ' " ));
if ( $this -> flag ) {
$flag = 0 ;
$color = " red " ;
} else {
$flag = 1 ;
$color = " #cccccc " ;
}
$the_array [ 'FLAGS' ] = '<a href="index.php?module=EcmProducts&action=setFlag&flag=' . $flag . '&record=' . $this -> id . '" style="color:' . $color . ';font-weight:bold;text-decoration:none;font-size:16px;">!</a>' ;
$the_array [ 'HINT' ] = HintProduct ( $this -> id , $this -> description , $this -> add_status );
// $the_array['TO_ORDER'] = $r['to']
//$GLOBALS['db']->query("update ecmproducts set q0='".$s0['quantity']."',p0='".($s0['sale']-$s0['purchase'])."',s0='".$s0['sale']."',q3='".($s3['quantity']/3)."',p3='".(($s3['sale']-$s3['purchase'])/3)."',s3='".($s3['sale']/3)."',stock_month='".$stock_month."',stock_value='".$stock_value."' where id='".$this->id."'");
//echo mysql_error();
// echo $i;
/*
* zmiena globalna z include / utils . php funkcja get_unlinked_product_query do pobierania produktów z faktur kontrahenta
*/
global $parent_to_product , $seach_quantity , $invoices_id ;
return $the_array ;
}
function getQuantityPrice ( $parent_id , $parent_type ) {
if ( $parent_type == 'EcmInvoiceOuts' ){
$tmp = $this -> db -> fetchByAssoc ( $this -> db -> query ( " select i.quantity,i.price_netto,i.total_netto,ii.document_no,i.code,ii.register_date from ecminvoiceoutitems i
inner join ecminvoiceouts ii on ii . id = i . ecminvoiceout_id where i . ecmproduct_id = '".$this->id."' and i . ecminvoiceout_id = '".$parent_id."' " ));
$tmp [ 'document_no' ] = '<a target="_blank" href="index.php?module=' . $parent_type . '&action=DetailView&record=' . $parent_id . '">' . $tmp [ 'document_no' ] . '</a>' ;
$tmp [ 'DOCUMENT_TYPE' ] = 'Faktura' ;
} else {
$tmp = $this -> db -> fetchByAssoc ( $this -> db -> query ( " select i.quantity,i.price_netto,i.total_netto,ii.document_no,i.code,ii.register_date from ecmreceiptitems i
inner join ecmreceipts ii on ii . id = i . ecmreceipt_id where i . ecmproduct_id = '".$this->id."' and i . ecmreceipt_id = '".$parent_id."' " ));
$tmp [ 'document_no' ] = '<a target="_blank" href="index.php?module=' . $parent_type . '&action=DetailView&record=' . $parent_id . '">' . $tmp [ 'document_no' ] . '</a>' ;
$tmp [ 'DOCUMENT_TYPE' ] = 'Paragon' ;
}
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 :: quote ( from_html ( $the_query_string ));
array_push ( $where_clauses , " ecmproducts.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 ( " ECMPRODUCTS_DESCRIPTION " , $ecmproducts -> description );
return $xtpl ;
}
function bean_implements ( $interface ) {
switch ( $interface ) {
case 'ACL' : return true ;
}
return false ;
}
function r ( $t ) {
$t = str_replace ( " . " , " " , $t );
$t = str_replace ( " , " , " . " , $t );
$t = floatval ( $t );
return $t ;
}
function save ( $check_notify = FALSE ) {
include_once ( " modules/EcmProducts/generateEAN.php " );
if ( $_REQUEST [ 'newEan' ] == '1' )
$_REQUEST [ 'ean' ] = generateEan ( 1 );
if ( $_REQUEST [ 'newEan2' ] == '1' )
$this -> ean2 = generateEAN ( 2 );
//$_REQUEST['ean2'] = generateEan(1);
if ( $_REQUEST [ 'massupdate' ]) {
foreach ( $_REQUEST [ 'mass' ] as $m )
$mm [] = " id=' " . $m . " ' " ;
if ( $_REQUEST [ 'production' ])
$set [] = " production=' " . $_REQUEST [ 'production' ] . " ' " ;
if ( $_REQUEST [ 'product_active' ])
$set [] = " product_active=' " . $_REQUEST [ 'product_active' ] . " ' " ;
if ( $_REQUEST [ 'end_of_line' ])
$set [] = " end_of_line=' " . $_REQUEST [ 'end_of_line' ] . " ' " ;
if ( $_REQUEST [ 'sales_start_date' ])
$set [] = " sales_start_date=' " . date ( " Y-m-d " , strtotime ( $GLOBALS [ 'timedate' ] -> to_db_date ( $_REQUEST [ 'sales_start_date' ])) + 24 * 3600 ) . " ' " ;
if ( $_REQUEST [ 'sales_end_date' ])
$set [] = " sales_end_date=' " . date ( " Y-m-d " , strtotime ( $GLOBALS [ 'timedate' ] -> to_db_date ( $_REQUEST [ 'sales_end_date' ])) + 24 * 3600 ) . " ' " ;
if ( count ( $set ) > 0 )
$z = " update ecmproducts set " . implode ( " , " , $set ) . " where " . implode ( " or " , $mm );
//echo $z;
$GLOBALS [ 'db' ] -> query ( $z );
header ( " Location: index.php?module=EcmProducts&action=index " );
}
else {
$return_id = parent :: save ( $check_notify );
$components = self :: ParseComponentsFromPOST ();
if ( ! ( ! is_array ( $components ) && $components == false ))
$this -> position_list = $components ;
$this -> savePositions ( $return_id );
//save categories
$this -> savePositions3 ( $_POST [ 'position_list3' ]);
$this -> savePrices ( $_POST [ 'position_list4' ]);
$actionTmpid = explode ( ',' , $_POST [ 'tableTimeEdit_rowOrder' ]);
$action_array = array ();
foreach ( $actionTmpid as $value ) {
if ( $_POST [ 'tableTimeEdit_ecmactionid_' . $value ] != '' ) {
$action_array [ $value ] [ 'quantity' ] = unformat_number ( $_POST [ 'tableTimeEdit_quantity_' . $value ]);
$action_array [ $value ] [ 'ecmaction_id' ] = $_POST [ 'tableTimeEdit_ecmactionid_' . $value ];
$action_array [ $value ] [ 'single_price' ] = unformat_number ( $_POST [ 'tableTimeEdit_price_' . $value . '_Single' ]);
$action_array [ $value ] [ 'quantity_recipe' ] = unformat_number ( $_POST [ 'tableTimeEdit_quantity_recipe_' . $value . '' ]);
$action_array [ $value ] [ 'divider' ] = unformat_number ( $_POST [ 'tableTimeEdit_divider_' . $value . '' ]);
$action_array [ $value ] [ 'unit_id' ] = $_POST [ 'tableTimeEdit_unit_id_' . $value ];
}
}
$this -> saveActionList ( $action_array );
$componentsTmpid = explode ( ',' , $_POST [ 'tableComponents_rowOrder' ]);
$components_array = array ();
foreach ( $componentsTmpid as $value ) {
if ( $_POST [ 'tableComponents_ecmcomponent_id_' . $value ] != '' ) {
$components_array [ $value ] [ 'quantity' ] = ( $_POST [ 'tableComponents_quantity_' . $value ]);
$components_array [ $value ] [ 'divider' ] = unformat_number ( $_POST [ 'tableComponents_divider_' . $value ]);
$components_array [ $value ] [ 'quantity_recipe' ] = ( $_POST [ 'tableComponents_quantity_recipe_' . $value ]);
$components_array [ $value ] [ 'ecmcomponent_id' ] = $_POST [ 'tableComponents_ecmcomponent_id_' . $value ];
$components_array [ $value ] [ 'code' ] = $_POST [ 'tableComponents_code_' . $value ];
$components_array [ $value ] [ 'name' ] = $_POST [ 'tableComponents_name_' . $value ];
$components_array [ $value ] [ 'single_price' ] = unformat_number ( $_POST [ 'tableComponents_price_' . $value . '_Single' ]);
$components_array [ $value ] [ 'unit_id' ] = $_POST [ 'tableComponents_unit_id_' . $value ];
}
}
$this -> saveComponentsList ( $components_array );
if ( $_REQUEST [ 'srp_price_replace' ] == '1' ){
$query = " update ecmproductcomponents set single_price=' " . $this -> srp_price . " ' where ecmcomponent_id=' " . $this -> id . " ' " ;
$this -> db -> query ( $query );
}
return $return_id ;
}
}
static function ParseComponentsFromPOST () {
if ( isset ( $_POST [ 'position_list' ])) {
$c_ = $_POST [ 'position_list' ];
$json = getJSONobj ();
$c = $json -> decode ( htmlspecialchars_decode ( $c_ ));
return $c ;
}
return false ;
}
//***************************Start Managing Positions*************************//
function constructInsertQuery ( $data , $table = '' ) {
if ( $table == '' && isset ( $this -> object_name ) && $this -> object_name != '' ) {
$table = strtolower ( $this -> object_name ) . " components " ;
} 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 getAmount ( $money )
{
$cleanString = preg_replace ( '/([^0-9\.,])/i' , '' , $money );
$onlyNumbersString = preg_replace ( '/([^0-9])/i' , '' , $money );
$separatorsCountToBeErased = strlen ( $cleanString ) - strlen ( $onlyNumbersString ) - 1 ;
$stringWithCommaOrDot = preg_replace ( '/([,\.])/' , '' , $cleanString , $separatorsCountToBeErased );
$removedThousendSeparator = preg_replace ( '/(\.|,)(?=[0-9]{3,}$)/' , '' , $stringWithCommaOrDot );
return ( float ) str_replace ( ',' , '.' , $removedThousendSeparator );
}
function savePrices ( $prices ) {
if ( ! is_array ( $prices ))
return null ;
$fields = array ( 'id' , 'ecmprice_id' , 'ecmproduct_id' , 'price' );
$new = array ();
$db = $GLOBALS [ 'db' ];
$db -> query ( " insert into log (msg) VALUES ('tu') " );
foreach ( $prices as $p ) {
$db -> query ( " insert into log (msg) VALUES ('tam2') " );
if ( ! isset ( $p [ 'price' ]) || ! isset ( $p [ 'ecmpricebook_id' ]) || floatval ( $p [ 'price' ]) == 0 )
continue ;
$db -> query ( " insert into log (msg) VALUES ('tam') " );
$id = create_guid ();
$new [] = $id ;
$tmp = array ();
$tmp [] = $id ;
$tmp [] = $p [ 'ecmpricebook_id' ];
$tmp [] = $this -> id ;
$tmp [] = $p [ 'price' ];
$query = " INSERT INTO ecmprices_ecmproducts ( " . implode ( " , " , $fields ) . " ) VALUES (' " . implode ( " ',' " , $tmp ) . " ') " ;
$db -> query ( $query );
}
$db -> query ( " delete from ecmprices_ecmproducts where ecmproduct_id=' " . $this -> id . " ' AND id NOT IN (' " . implode ( " ',' " , $new ) . " ') " );
}
function showPrices () {
$arr = $this -> getPricesList ( true );
if ( count ( $arr ) > 0 ) {
$table = '
< table cellpadding = " 0 " cellspacing = " 0 " border = " 0 " class = " list view " >
< tr class = " oddListRowS1 " >
< th width = " 15% " >< b > Nazwa </ b ></ td >
< th >< b > Wartość </ b ></ td >
< th >< b > Waluta </ b ></ td >
</ tr >
' ;
foreach ( $arr as $a ) {
$table .= '
< tr class = " oddListRowS1 " >
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " >
' . $a[' pricebook_name '] . ' </ td >
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top;text-align:right; " >
' . format_number($a[' price ']) . ' </ td >
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " >
' . $a[' currency '] . ' </ td >
' ;
}
$table .= '</table>' ;
}
return $table ;
}
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 ];
/* Not Nessesary
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 ;
}
*/
$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 ,
'ecmcomponent_id' => $p [ 'id' ],
'position' => $position ,
'code' => $p [ 'code' ],
'name' => $p [ 'name' ],
'quantity' => (( empty ( $p [ 'quantity' ]) || $p [ 'quantity' ] == '' ) ? 0 : $p [ 'quantity' ]),
'ecmusageunit_id' => $p [ 'unit_id' ],
/* Not Nessesary
'price' => (( empty ( $p [ 'price' ]) || $p [ 'price' ] == '' ) ? 0 : $p [ 'price' ]),
'discount' => (( empty ( $p [ 'discount' ]) || $p [ 'discount' ] == '' ) ? 0 : $p [ 'discount' ]),
'total' => (( empty ( $p [ 'total' ]) || $p [ 'total' ] == '' ) ? 0 : $p [ 'total' ]),
'dd_unit_id' => $p [ 'unit_id' ],
'dd_unit_name' => '' ,
'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' ],
'recipient_code' => $p [ 'recipient_code' ],
*/
);
$this -> db -> query ( $this -> constructInsertQuery ( $arr ));
$position ++ ;
}
}
function getPosition ( $position ) {
if ( ! is_array ( $position ))
return '' ;
global $timedate ;
$return_array = array ();
$return_array [ 'id' ] = $position [ 'ecmcomponent_id' ];
$return_array [ 'position' ] = $position [ 'position' ];
$return_array [ 'code' ] = $position [ 'code' ];
$return_array [ 'name' ] = str_replace ( '"' , '' , $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 [ 'ecmusageunit_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 [ 'recipient_code' ] = $position [ 'recipient_code' ];
//get ems price
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT ems_price FROM ecmproducts WHERE id=' " . $position [ 'ecmcomponent_id' ] . " ' " ));
$return_array [ 'ems_price' ] = $position [ 'quantity' ] * $r [ 'ems_price' ];
if ( ! $r || $r [ 'ems_price' ] == 0 )
$return_array [ 'ems_price' ] = 0 ;
global $db ;
$c = $db -> fetchByAssoc ( $db -> query ( " SELECT product_category_id as c, purchase_price as p FROM ecmproducts WHERE id=' " . $position [ 'ecmcomponent_id' ] . " ' " ));
if ( $c [ 'c' ] == 'd7f876b0-1a3d-43a1-7c9b-511ba40df3d1' )
$return_array [ 'ems_price' ] = $c [ 'p' ];
return $return_array ;
}
function getPositionList ( $array = false ) {
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " SELECT * FROM `ecmproductcomponents` WHERE `ecmproduct_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 ) . " components` WHERE ` " . strtolower ( $this -> object_name ) . " _id`=' " . $this -> id . " ' " ;
$r = $this -> db -> query ( $query );
if ( $r )
return true ;
}
return false ;
}
//***************************End Managing Positions*************************//
//start managing categories
function savePositions3 ( $pl ) {
global $current_user ;
$exists = array ();
$first = true ;
if ( $pl == '' ){
$pl = $this -> position_list3 ;
}
foreach ( $pl as $p ) {
if ( ! isset ( $p [ 'ecmproductcategory_id' ]) || $p [ 'ecmproductcategory_id' ] == '' )
continue ;
//first position save into main category
if ( $first ) {
$q = " UPDATE ecmproducts set product_category_id=' " . $p [ 'ecmproductcategory_id' ] . " ', product_category_name=' " . $p [ 'ecmproductcategory_name' ] . " ' WHERE id=' " . $this -> id . " ' " ;
$GLOBALS [ 'db' ] -> query ( $q );
$first = false ;
}
if ( isset ( $p [ 'id' ]) && $p [ 'id' ] != '' ) {
//update exists
$q = "
UPDATE ecmproductcategories_bean set
date_modified = '" . date("Y-m-d H:i:s") . "' ,
modified_user_id = '" . $current_user->id . "' ,
bean_id = '" . addslashes($this->id) . "' ,
ecmproductcategory_id = '" . addslashes($p[' ecmproductcategory_id ']) . "' ,
position = '".$p[' position ']."'
WHERE id = '" . $p[' id '] . "'
" ;
$GLOBALS [ 'db' ] -> query ( $q );
$exists [] = $p [ 'id' ];
} else {
//insert new record
$id = create_guid ();
$t = array (
$id ,
addslashes ( $p [ 'ecmproductcategory_id' ]),
$this -> id ,
" EcmProducts " ,
date ( " Y-m-d H:i:s " ),
date ( " Y-m-d H:i:s " ),
$current_user -> id ,
$current_user -> id ,
'0' ,
$p [ 'position' ],
);
$q = " INSERT INTO ecmproductcategories_bean VALUES (' " . implode ( " ',' " , $t ) . " ') " ;
$GLOBALS [ 'db' ] -> query ( $q );
$exists [] = $id ;
}
}
//delete old
$GLOBALS [ 'db' ] -> query ( " UPDATE ecmproductcategories_bean SET deleted='1', modified_user_id=' " . $current_user -> id . " ',date_modified = ' " . date ( " Y-m-d H:i:s " ) . " ' WHERE bean_id=' " . $this -> id . " ' AND id NOT IN (' " . implode ( " ',' " , $exists ) . " ') " );
}
function getPositionList3 ( $array = false ) {
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " SELECT * FROM ecmproductcategories_bean WHERE bean_id=' " . $this -> id . " ' AND deleted='0' AND bean_name='EcmProducts' " ;
$r = $this -> db -> query ( $query );
$return_array = array ();
if ( $r ) {
while ( $w = $this -> db -> fetchByAssoc ( $r )) {
//get category name && assigned_file
$n = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT name, assigned_file FROM ecmproductcategories WHERE id=' " . $w [ 'ecmproductcategory_id' ] . " ' " ));
$w [ 'ecmproductcategory_name' ] = $n [ 'name' ];
$w [ 'assigned_file' ] = $n [ 'assigned_file' ];
$return_array [] = $w ;
}
$json = getJSONobj ();
return $array ? $return_array : $json -> encode ( $return_array );
}
}
return $array ? false : '[]' ;
}
function showPositions3 () {
$arr = $this -> getPositionList3 ( true );
global $mod_strings ;
if ( count ( $arr ) > 0 ) {
$table = '
< table cellpadding = " 0 " cellspacing = " 0 " border = " 0 " class = " list view " width = " 40% " >
< tr class = " oddListRowS1 " >
< th >< b > ' . $mod_strings[' LBL_CATEGORY_NAME '] . ' </ b ></ td >
< th >< b > ' . $mod_strings[' LBL_CATEGORY_ASSIGNED_FILE '] . ' </ b ></ td >
</ tr >
' ;
$i == 0 ;
foreach ( $arr as $a ) {
$i ++ ;
//assigned file
if ( $a [ 'assigned_file' ] != " " && $a [ 'assigned_file' ]) {
$tmp = explode ( " . " , $a [ 'assigned_file' ]);
if ( end ( $tmp ) == 'jpeg' || end ( $tmp ) == 'jpg' || end ( $tmp ) == 'png' || end ( $tmp ) == 'bmp' )
$af = '<img src="modules/EcmProductCategories/files/' . $a [ 'assigned_file' ] . '"/>' ;
else
$af = '<a href="modules/EcmProductCategories/files/' . $a [ 'assigned_file' ] . '" target="new">' . $a [ 'assigned_file' ] . '</a>' ;
}
$table .= '
< tr class = " oddListRowS1 " >
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " >< a href = " index.php?module=EcmProductCategories&action=DetailView&record=' . $a['ecmproductcategory_id'] . ' " > ' . $a[' ecmproductcategory_name '] . ' </ a ></ td >
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " > ' . $af . ' </ td >
' ;
}
$table .= '</table>' ;
}
return $table ;
}
//end managing categories
function getProductResInfo ( $product_id , $stock_id ) {
$info = array ();
global $db ;
require_once ( 'modules/EcmStockOperations/EcmStockOperation.php' );
$op = new EcmStockOperation ();
$info [ 'stock' ] = $op -> getRealStock ( $product_id , $stock_id );
//temp reserwations
$rr = $db -> fetchByAssoc ( $db -> query ( " SELECT sum(quantity) as s FROM ecmreservations WHERE product_id=' $product_id ' AND doc_id IS NULL " ));
if ( ! $rr [ 's' ])
$rr [ 's' ] = 0 ;
$info [ 'res' ] = $rr [ 's' ];
//doc reservations
$res = $db -> query ( " SELECT quantity, doc_id, doc_type FROM ecmreservations WHERE product_id=' $product_id ' AND doc_id IS NOT NULL " );
if ( ! is_array ( $res ) == 0 )
return $info ;
while ( $row = $db -> fetchByAssoc ( $res )) {
$tmp = array ();
$type = '' ;
if ( $row [ 'doc_type' ] == 'EcmSales' )
$type = 'ZS' ;
if ( $row [ 'doc_type' ] == 'EcmInsideOrders' )
$type = 'ZW' ;
//get document name
$doc = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT document_no, parent_name FROM " . strtolower ( $row [ 'doc_type' ]) . " WHERE id=' " . $row [ 'doc_id' ] . " ' " ));
$tmp [] = '<a target="new" href="index.php?module=' . $row [ 'doc_type' ] . '&action=DetailView&record=' . $row [ 'doc_id' ] . '">' . $type . ' ' . $doc [ 'document_no' ] . '</a> - ' . $row [ 'quantity' ] . '  ' . $doc [ 'parent_name' ];
}
$info [ 'docs' ] = $tmp ;
return $info ;
}
function getPricesList ( $array = false ) {
$query = " SELECT p.id as id, p.name as name, pp.price as price,p.exchange_rate_id as currency FROM ecmprices as p
LEFT JOIN ecmprices_ecmproducts as pp
ON pp . ecmprice_id = p . id AND pp . ecmproduct_id = '" . $this->id . "'
WHERE p . deleted = '0' " ;
$r = $this -> db -> query ( $query );
$return_array = array ();
$c = new Currency ();
if ( $r ) {
while ( $w = $this -> db -> fetchByAssoc ( $r )) {
$tmp = array ();
$tmp [ 'pricebook_id' ] = $w [ 'id' ];
$tmp [ 'pricebook_name' ] = $w [ 'name' ];
$tmp [ 'price' ] = $w [ 'price' ];
$c -> retrieve ( $w [ 'currency' ]);
$tmp [ 'currency' ] = $c -> name ;
$return_array [] = $tmp ;
}
$json = getJSONobj ();
return $array ? $return_array : $json -> encode ( $return_array );
}
return $array ? false : '[]' ;
}
function retrieve ( $id = - 1 , $encode = true , $deleted = true ) {
parent :: retrieve ( $id , $encode , $deleted );
$json = getJSONobj ();
$this -> action_list = $json -> decode ( $this -> getActionList ());
$this -> component_list = $this -> getComponentsList ();
}
function saveActionList ( $pl ) {
global $current_user ;
$exists = array ();
if ( $this -> id != '' ) {
$GLOBALS [ 'db' ] -> query ( " DELETE FROM ecmproductactions WHERE ecmproduct_id=' " . $this -> id . " ' " );
}
$i = 0 ;
foreach ( $pl as $p ) {
$id = create_guid ();
$i ++ ;
$t = array (
$id ,
$current_user -> id ,
date ( " Y-m-d H:i:s " ),
$this -> id ,
addslashes ( $p [ 'ecmaction_id' ]),
addslashes ( $p [ 'quantity' ]),
$i ,
addslashes ( $p [ 'single_price' ]),
addslashes ( $p [ 'unit_id' ])
);
$q = " INSERT INTO ecmproductactions VALUES (' " . implode ( " ',' " , $t ) . " ') " ;
$GLOBALS [ 'db' ] -> query ( $q );
$exists [] = $id ;
}
}
function getActionList ( $array = false ) {
global $app_list_strings ;
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " SELECT a.id, a.name, a.indeks, pa.single_price,pa.unit_id, a.cost_hour, a.category, pa.quantity FROM ecmactions a, ecmproductactions pa WHERE a.id = pa.ecmaction_id AND pa.ecmproduct_id=' " . $this -> id . " ' AND a.deleted=0 ORDER BY a.indeks " ;
$r = $this -> db -> query ( $query );
$return_array = array ();
if ( $r ) {
while ( $row = $this -> db -> fetchByAssoc ( $r )) {
$a_json_row [ 'ecmactionid' ] = $row [ 'id' ];
$a_json_row [ 'name' ] = $row [ 'name' ];
$a_json_row [ 'indeks' ] = $row [ 'indeks' ];
$a_json_row [ 'price' ][ 'Single' ] = $row [ 'single_price' ];
$a_json_row [ 'price' ][ 'Summary' ] = $row [ 'single_price' ] * $row [ 'quantity' ];
$a_json_row [ 'category' ] = $app_list_strings [ 'ecmactions_category_dom' ] [ $row [ 'category' ]];
$a_json_row [ 'quantity' ] = $row [ 'quantity' ];
$a_json_row [ 'unit_id' ] = $row [ 'unit_id' ];
$return_array [] = $a_json_row ;
}
$json = getJSONobj ();
return $array ? $return_array : $json -> encode ( $return_array );
}
}
return $array ? false : '[]' ;
}
function saveComponentsList ( $pl ) {
global $current_user ;
$exists = array ();
if ( $this -> id != '' ) {
$GLOBALS [ 'db' ] -> query ( " DELETE FROM ecmproductcomponents WHERE ecmproduct_id=' " . $this -> id . " ' " );
}
$i = 0 ;
foreach ( $pl as $p ) {
$id = create_guid ();
$i ++ ;
$t = array (
$id , //id
date ( " Y-m-d H:i:s " ), //date_entered
date ( " Y-m-d H:i:s " ), //date_modified
$current_user -> id , //modified_user_id
$current_user -> id , //assigned_user_id
$current_user -> id , //created_by
'0' , //deleted
$this -> id , //ecmproduct_id
addslashes ( $p [ 'ecmcomponent_id' ]), //ecmcomponent_id
$i , //position
addslashes ( $p [ 'code' ]), //code
addslashes ( $p [ 'name' ]), //name
addslashes ( $p [ 'quantity' ]), //quantity
addslashes ( $p [ 'unit_id' ]), //ecmusageunit_id
addslashes ( $p [ 'single_price' ]), //single price,
addslashes ( $p [ 'divider' ]), //single price
addslashes ( $p [ 'quantity_recipe' ]) //single price
);
$q = " INSERT INTO ecmproductcomponents VALUES (' " . implode ( " ',' " , $t ) . " ') " ;
$GLOBALS [ 'db' ] -> query ( $q );
$exists [] = $id ;
}
}
function getComponentsList () {
global $app_list_strings ;
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " SELECT a.ecmcomponent_id, a.quantity,a.divider,a.quantity_recipe, a.ecmusageunit_id, a.single_price, b.name, b.code, b.product_category_name FROM ecmproductcomponents a, ecmproducts b WHERE b.id = a.ecmcomponent_id AND a.ecmproduct_id=' " . $this -> id . " ' AND a.deleted=0 ORDER BY a.position, a.code " ;
$r = $this -> db -> query ( $query );
$return_array = array ();
if ( $r ) {
while ( $row = $this -> db -> fetchByAssoc ( $r )) {
$a_json_row [ 'ecmcomponent_id' ] = $row [ 'ecmcomponent_id' ];
$a_json_row [ 'ecmproduct_id' ] = $row [ 'ecmcomponent_id' ];
$a_json_row [ 'name' ] = $row [ 'name' ];
$a_json_row [ 'code' ] = $row [ 'code' ];
$a_json_row [ 'price' ][ 'Single' ] = $row [ 'single_price' ];
$a_json_row [ 'price' ][ 'Summary' ] = $row [ 'single_price' ] * $row [ 'quantity' ];
$a_json_row [ 'quantity' ] = $row [ 'quantity' ];
$a_json_row [ 'unit_id' ] = $row [ 'ecmusageunit_id' ];
$a_json_row [ 'product_category_name' ] = $row [ 'product_category_name' ];
$a_json_row [ 'divider' ] = $row [ 'divider' ];
$a_json_row [ 'quantity_recipe' ] = $row [ 'quantity_recipe' ];
$return_array [] = $a_json_row ;
}
return $return_array ;
}
return null ;
} else {
return null ;
}
}
}
?>