2024-04-27 09:23:34 +02:00
< ? php
2025-04-16 18:04:18 +00:00
if ( ! defined ( 'sugarEntry' ) || ! sugarEntry ) die ( 'Not A Valid Entry Point' );
2024-04-27 09:23:34 +02:00
/*****************************************************************************
* 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 .
********************************************************************************/
2025-04-16 18:04:18 +00:00
require_once ( 'data/SugarBean.php' );
require_once ( 'include/utils.php' );
include_once ( " modules/EcmStockOperations/EcmStockOperation.php " );
include_once ( " modules/EcmPaymentStates/helper.php " );
2024-04-27 09:23:34 +02:00
// SHOULD INCLUDE SELECTIVELY
2025-04-16 18:04:18 +00:00
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 ;
2024-04-27 09:23:34 +02:00
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 ;
2025-04-16 18:04:18 +00:00
var $position_list ;
var $th ;
var $url1 ;
var $url2 ;
var $url3 ;
var $url4 ;
var $url5 ;
var $url6 ;
var $url7 ;
var $url8 ;
var $url9 ;
var $ean ;
// 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 .= "
2024-04-27 09:23:34 +02:00
ecmproducts .*
, users . user_name as assigned_user_name " ;
2025-04-16 18:04:18 +00:00
if ( $custom_join ) {
$query .= $custom_join [ 'select' ];
}
$query .= " FROM ecmproducts
2024-04-27 09:23:34 +02:00
LEFT JOIN users
ON ecmproducts . assigned_user_id = users . id " ;
2025-04-16 18:04:18 +00:00
$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
2024-04-27 09:23:34 +02:00
ecmproducts .* ,
users . user_name assigned_user_name " ;
2025-04-16 18:04:18 +00:00
if ( $custom_join ) {
$query .= $custom_join [ 'select' ];
}
$query .= " FROM ecmproducts " ;
$query .= " LEFT JOIN users
2024-04-27 09:23:34 +02:00
ON ecmproducts . assigned_user_id = users . id " ;
2025-04-16 18:04:18 +00:00
if ( $custom_join ) {
$query .= $custom_join [ 'join' ];
}
$query .= " " ;
$where_auto = " ecmproducts.deleted=0
2024-04-27 09:23:34 +02:00
" ;
2025-04-16 18:04:18 +00:00
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 ;
2024-04-27 09:23:34 +02:00
}
2025-04-16 18:04:18 +00:00
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 );
if ( $_REQUEST [ 'action ' ] == 'DetailView' ) {
$this -> url1 = '<a href="' . $this -> url1 . '" target="_blank"/>' . $this -> url1 . '</a>' ;
$this -> url2 = '<a href="' . $this -> url2 . '" target="_blank"/>' . $this -> url2 . '</a>' ;
$this -> url3 = '<a href="' . $this -> url3 . '" target="_blank"/>' . $this -> url3 . '</a>' ;
$this -> url4 = '<a href="' . $this -> url4 . '" target="_blank"/>' . $this -> url4 . '</a>' ;
$this -> url5 = '<a href="' . $this -> url5 . '" target="_blank"/>' . $this -> url5 . '</a>' ;
$this -> url6 = '<a href="' . $this -> url6 . '" target="_blank"/>' . $this -> url6 . '</a>' ;
$this -> url7 = '<a href="' . $this -> url7 . '" target="_blank"/>' . $this -> url7 . '</a>' ;
$this -> url8 = '<a href="' . $this -> url8 . '" target="_blank"/>' . $this -> url8 . '</a>' ;
$this -> url9 = '<a href="' . $this -> url9 . '" target="_blank"/>' . $this -> url9 . '</a>' ;
}
//$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
2024-04-27 09:23:34 +02:00
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
2025-04-16 18:04:18 +00:00
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' ];
2024-04-27 09:23:34 +02:00
/* $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>";
2025-04-16 18:04:18 +00:00
return array ( " sale " => $total_s , " purchase " => $total_p , " quantity " => $total_q );
}
2024-04-27 09:23:34 +02:00
2025-04-16 18:04:18 +00:00
function get_list_view_data ()
{
global $current_language , $current_user ;
global $numerek ;
$numerek = $this -> id ;
$i = 0 ;
$i ++ ;
$the_array = parent :: get_list_view_data ();
$app_list_strings = return_app_list_strings_language ( $current_language );
$mod_strings = return_module_language ( $current_language , 'EcmProducts' );
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>blank</em> " : $this -> name );
//chmod('modules/EcmProducts/upload/images/'.$this->product_picture,777);
if ( file_exists ( 'modules/EcmProducts/upload/images/' . $this -> product_picture ) && $this -> product_picture ) {
$the_array [ 'IMAGE' ] = '<img src="pic.php?p=modules/EcmProducts/upload/images/' . $this -> product_picture . '&w=90&h=84" border="0">' ;
2024-04-27 09:23:34 +02:00
}
2025-04-16 18:04:18 +00:00
$the_array [ 'STOCK_QTY' ] = 0 ;
$op = new EcmStockOperation ();
$the_array [ 'STOCK_QTY' ] = format_number ( $op -> getAllQuantity ( $this -> 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' and p.deleted='0' " ));
2024-04-27 09:23:34 +02:00
2025-04-16 18:04:18 +00:00
//echo "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'<br><br>";
$the_array [ 'ORDERED' ] = $lolek [ 'l' ];
$the_array [ 'SRP_PRICE' ] = number_format ( $this -> srp_price , 2 , $GLOBALS [ 'sugar_config' ][ 'default_decimal_seperator' ], $GLOBALS [ 'sugar_config' ][ 'default_number_grouping_seperator' ]);
$the_array [ 'EDIT_BTN' ] = '<img src="modules/EcmQuotes/images/edit_inline_enabled.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">' ;
$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 [ '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 = " " ;
$this -> retrieve ( $this -> 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 ;
2024-04-27 09:23:34 +02:00
$w = $GLOBALS [ 'db' ] -> query ( $z );
$qq = 0 ;
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $w );
$qq += $r [ 'q' ]; */
2025-04-16 18:04:18 +00:00
$the_array [ 'EMS_QTY_IN_STOCK' ] = number_format ( $this -> ems_qty_in_stock , 0 , " " , " " );
/*
2024-04-27 09:23:34 +02:00
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' ];
}
*/
2025-04-16 18:04:18 +00:00
$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'];
$the_array [ 'Q0' ] = round ( $r [ 'q0' ]);
$the_array [ 'Q3' ] = round (( $r [ 'q3' ]));
$the_array [ 'S0' ] = number_format ( $r [ 's0' ], 2 , " , " , " . " );
$the_array [ 'S3' ] = number_format ( $r [ 's3' ], 2 , " , " , " . " );
$the_array [ 'P0' ] = number_format ( $r [ 'p0' ], 2 , " , " , " . " );
$the_array [ 'P3' ] = number_format ( $r [ 'p3' ], 2 , " , " , " . " );
$stock_value = ( $this -> ems_price * $this -> ems_qty_in_stock );
$the_array [ 'STOCK_VALUE' ] = number_format ( $stock_value , 2 , " , " , " . " );
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 , 2 , " , " , " . " );
$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']
2024-04-27 09:23:34 +02:00
2025-04-16 18:04:18 +00:00
$the_array [ 'STAN' ] = " <a href='index.php?module=EcmProducts&action=cd&record= " . $this -> id . " &set= " . ( int )( ! $this -> active ) . " '> " . ( $this -> active ? 'Tak' : 'Nie' ) . " </a> " ;
2024-04-27 09:23:34 +02:00
2025-04-16 18:04:18 +00:00
//$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;
return $the_array ;
}
/**
2024-04-27 09:23:34 +02:00
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 .
2025-04-16 18:04:18 +00:00
*/
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 )
{
2024-04-27 09:23:34 +02:00
include ( " modules/EcmProducts/generateEAN.php " );
2025-04-16 18:04:18 +00:00
if ( $_REQUEST [ 'newEan' ] == '1' ) $_REQUEST [ 'ean' ] = generateEan ( 1 );
if ( $_REQUEST [ 'newEan2' ] == '1' ) $this -> ean2 = generateEAN ( 2 );
2024-04-27 09:23:34 +02:00
//$_REQUEST['ean2'] = generateEan(1);
2025-04-16 18:04:18 +00:00
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 );
2024-04-27 09:23:34 +02:00
//echo $z;
$GLOBALS [ 'db' ] -> query ( $z );
header ( " Location: index.php?module=EcmProducts&action=index " );
2025-04-16 18:04:18 +00:00
} 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' ]);
//save prices
$this -> savePrices ( $_POST [ 'position_list4' ]);
return $return_id ;
2024-04-27 09:23:34 +02:00
}
2025-04-16 18:04:18 +00:00
}
2024-04-27 09:23:34 +02:00
2025-04-16 18:04:18 +00:00
static function ParseComponentsFromPOST ()
{
if ( isset ( $_POST [ 'position_list' ])) {
2024-04-27 09:23:34 +02:00
$c_ = $_POST [ 'position_list' ];
$json = getJSONobj ();
$c = $json -> decode ( htmlspecialchars_decode ( $c_ ));
return $c ;
2025-04-16 18:04:18 +00:00
}
return false ;
}
//***************************Start Managing Positions*************************//
function constructInsertQuery ( $data , $table = '' )
{
if ( $table == '' && isset ( $this -> object_name ) && $this -> object_name != '' ) {
$table = strtolower ( $this -> object_name ) . " components " ;
2024-04-27 09:23:34 +02:00
} else return " " ;
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
$keys = array ();
$values = array ();
2025-04-16 18:04:18 +00:00
foreach ( $data as $key => $value ) {
2024-04-27 09:23:34 +02:00
$keys [] = $key ;
2025-04-16 18:04:18 +00:00
if ( is_array ( $value ))
$values [] = $value [ 1 ] . str_replace ( " ' " , " \ ' " , $value [ 0 ]) . $value [ 1 ];
2024-04-27 09:23:34 +02:00
else
2025-04-16 18:04:18 +00:00
$values [] = " ' " . str_replace ( " ' " , " \ ' " , $value ) . " ' " ;
2024-04-27 09:23:34 +02:00
}
$q = " insert into ` $table ` (` " ;
$q .= implode ( '`, `' , $keys );
$q .= " `) values ( " ;
$q .= implode ( " , " , $values );
$q .= " ); " ;
2025-04-16 18:04:18 +00:00
return $q ;
2024-04-27 09:23:34 +02:00
}
2025-04-16 18:04:18 +00:00
function savePositions ( $id = null , $position_list = null )
{
2024-04-27 09:23:34 +02:00
global $current_user , $timedate ;
2025-04-16 18:04:18 +00:00
if ( $position_list == null ) $position_list = $this -> position_list ;
if ( $id == null ) $id = $this -> id ;
if ( count ( $position_list ) > 0 ) $this -> deleteAssignedPositions ( $id );
2024-04-27 09:23:34 +02:00
$arr = array ();
$position = 0 ;
2025-04-16 18:04:18 +00:00
for ( $i = 0 ; $i < count ( $position_list ); $i ++ ) {
if ( $position_list [ $i ][ 'name' ] == '' ) continue ;
2024-04-27 09:23:34 +02:00
$p = $position_list [ $i ];
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
/* 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 ;
}
*/
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
$arr = array (
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
'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' ,
2025-04-16 18:04:18 +00:00
strtolower ( $this -> object_name ) . '_id' => $id ,
2024-04-27 09:23:34 +02:00
'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' ],
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
/* 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' ],
*/
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
);
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
$this -> db -> query ( $this -> constructInsertQuery ( $arr ));
2025-04-16 18:04:18 +00:00
$position ++ ;
}
2024-04-27 09:23:34 +02:00
}
2025-04-16 18:04:18 +00:00
function getPosition ( $position )
{
2024-04-27 09:23:34 +02:00
global $app_list_strings ;
2025-04-16 18:04:18 +00:00
if ( ! is_array ( $position )) return '' ;
2024-04-27 09:23:34 +02:00
global $timedate ;
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
$return_array = array ();
2025-04-16 18:04:18 +00:00
$unit = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select unit_id from ecmproducts where id=' " . $position [ 'ecmcomponent_id' ] . " ' " ));
2024-04-27 09:23:34 +02:00
$return_array [ 'id' ] = $position [ 'ecmcomponent_id' ];
$return_array [ 'position' ] = $position [ 'position' ];
$return_array [ 'code' ] = $position [ 'code' ];
2025-04-16 18:04:18 +00:00
$return_array [ 'name' ] = str_replace ( '"' , '' , $position [ 'name' ]);
2024-04-27 09:23:34 +02:00
$return_array [ 'quantity' ] = $position [ 'quantity' ];
$return_array [ 'price' ] = $position [ 'price' ];
$return_array [ 'discount' ] = $position [ 'discount' ];
$return_array [ 'total' ] = $position [ 'total' ];
$return_array [ 'unit_id' ] = $unit [ 'unit_id' ];
$return_array [ 'unit_name' ] = $app_list_strings [ 'ecmproducts_unit_dom' ][ $unit [ 'unit_id' ]];
$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' ];
2025-04-16 18:04:18 +00:00
$return_array [ 'recipient_code' ] = $position [ 'recipient_code' ];
2024-04-27 09:23:34 +02:00
//get ems price
2025-04-16 18:04:18 +00:00
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT ems_price FROM ecmproducts WHERE id=' " . $position [ 'ecmcomponent_id' ] . " ' " ));
2024-04-27 09:23:34 +02:00
$return_array [ 'ems_price' ] = $position [ 'quantity' ] * $r [ 'ems_price' ];
2025-04-16 18:04:18 +00:00
if ( ! $r || $r [ 'ems_price' ] == 0 ) {
2024-04-27 09:23:34 +02:00
$pz = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( "
SELECT price FROM ecmstockoperations WHERE
2025-04-16 18:04:18 +00:00
product_id = '" . $position[' ecmcomponent_id '] . "' AND
2024-04-27 09:23:34 +02:00
parent_type = 'EcmStockDocIns'
ORDER BY date_entered DESC
LIMIT 0 , 1
" ));
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
$return_array [ 'ems_price' ] = $pz [ 'price' ];
}
2025-04-16 18:04:18 +00:00
2024-04-27 09:23:34 +02:00
global $db ;
2025-04-16 18:04:18 +00:00
$c = $db -> fetchByAssoc ( $db -> query ( " SELECT product_category_id as c, purchase_price as p FROM ecmproducts WHERE id=' " . $position [ 'ecmcomponent_id' ] . " ' " ));
2024-04-27 09:23:34 +02:00
$return_array [ 'category_id' ] = $c [ 'c' ];
if ( $c [ 'c' ] == 'd7f876b0-1a3d-43a1-7c9b-511ba40df3d1' )
$return_array [ 'ems_price' ] = $c [ 'p' ];
2025-04-16 18:04:18 +00:00
if ( ! $return_array [ 'ems_price' ] || $return_array [ 'ems_price' ] == " " )
2024-04-27 09:23:34 +02:00
$return_array [ 'ems_price' ] = $c [ 'purchase_price' ];
return $return_array ;
}
2025-04-16 18:04:18 +00:00
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 ;
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 = "
2024-04-27 09:23:34 +02:00
UPDATE ecmproductcategories_bean set
2025-04-16 18:04:18 +00:00
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 '] . "'
2024-04-27 09:23:34 +02:00
" ;
2025-04-16 18:04:18 +00:00
$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 = '
2024-04-27 09:23:34 +02:00
< table cellpadding = " 0 " cellspacing = " 0 " border = " 0 " class = " list view " width = " 40% " >
< tr class = " oddListRowS1 " >
2025-04-16 18:04:18 +00:00
< th >< b > ' . $mod_strings[' LBL_CATEGORY_NAME '] . ' </ b ></ td >
< th >< b > ' . $mod_strings[' LBL_CATEGORY_ASSIGNED_FILE '] . ' </ b ></ td >
2024-04-27 09:23:34 +02:00
</ tr >
' ;
2025-04-16 18:04:18 +00:00
$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 .= '
2024-04-27 09:23:34 +02:00
< tr class = " oddListRowS1 " >
2025-04-16 18:04:18 +00:00
< 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 >
2024-04-27 09:23:34 +02:00
2025-04-16 18:04:18 +00:00
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " > ' . $af . ' </ td >
2024-04-27 09:23:34 +02:00
' ;
2025-04-16 18:04:18 +00:00
}
$table .= '</table>' ;
}
return $table ;
}
//end managing categories
//prices manage
function savePrices ( $prices )
{
if ( ! is_array ( $prices )) return null ;
$fields = array ( 'id' , 'ecmprice_id' , 'ecmproduct_id' , 'price' );
$new = array ();
$db = $GLOBALS [ 'db' ];
foreach ( $prices as $p ) {
if ( ! isset ( $p [ 'price' ]) || ! isset ( $p [ 'ecmpricebook_id' ]) || floatval ( $p [ 'price' ]) == 0 ) continue ;
$id = create_guid ();
$new [] = $id ;
$tmp = array ();
$tmp [] = $id ;
$tmp [] = $p [ 'ecmpricebook_id' ];
$tmp [] = $this -> id ;
$tmp [] = floatval ( $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 getPricePosition ( $position )
{
if ( ! is_array ( $position )) return '' ;
global $timedate ;
$query = " SELECT id,name FROM ecmpricebooks WHERE id=' " . $position [ 'ecmpricebook_id' ] . " ' " ;
$r = $this -> db -> fetchByAssoc ( $this -> db -> query ( $query ));
$return_array = array ();
$return_array [ 'price' ] = $position [ 'price' ];
$return_array [ 'pricebook_name' ] = $r [ 'name' ];
$return_array [ 'pricebook_id' ] = $r [ 'id' ];
//var_dump($return_array);
return $return_array ;
}
function getPricesList ( $array = false )
{
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " SELECT p.id as id, p.name as name, pp.price as price FROM ecmprices as p
2024-04-27 09:23:34 +02:00
LEFT JOIN ecmprices_ecmproducts as pp
2025-04-16 18:04:18 +00:00
ON pp . ecmprice_id = p . id AND pp . ecmproduct_id = '" . $this->id . "'
2024-04-27 09:23:34 +02:00
WHERE p . deleted = '0' " ;
2025-04-16 18:04:18 +00:00
$r = $this -> db -> query ( $query );
$return_array = array ();
if ( $r ) {
while ( $w = $this -> db -> fetchByAssoc ( $r )) {
$tmp = array ();
$tmp [ 'pricebook_id' ] = $w [ 'id' ];
$tmp [ 'pricebook_name' ] = $w [ 'name' ];
$tmp [ 'price' ] = $w [ 'price' ];
$return_array [] = $tmp ;
}
$json = getJSONobj ();
return $array ? $return_array : $json -> encode ( $return_array );
}
}
return $array ? false : '[]' ;
}
function showPrices ()
{
$arr = $this -> getPricesList ( true );
if ( count ( $arr ) > 0 ) {
$table = '
2024-04-27 09:23:34 +02:00
< 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 >
</ tr >
' ;
2025-04-16 18:04:18 +00:00
foreach ( $arr as $a ) {
$table .= '
2024-04-27 09:23:34 +02:00
< tr class = " oddListRowS1 " >
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " >
2025-04-16 18:04:18 +00:00
' . $a[' pricebook_name '] . ' </ td >
2024-04-27 09:23:34 +02:00
< td valign = " top " class = " oddListRowS1 " style = " padding:5px !important;border-bottom:1px solid #cccccc;vertical-align:top; " >
2025-04-16 18:04:18 +00:00
' . format_number($a[' price ']) . ' </ td >
2024-04-27 09:23:34 +02:00
' ;
2025-04-16 18:04:18 +00:00
}
$table .= '</table>' ;
}
return $table ;
}
//end manage prices
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 ;
}
//add mz 2014-12-11
//android mobile functions
//search product by EAN
//simply try found product_id and executa function below
static function mobile_getProductInfoByEAN ( $params )
{
$ean = trim ( $params [ 'product_ean' ]);
if ( ! $ean || $ean == " " )
return - 2 ;
$db = $GLOBALS [ 'db' ];
$prod = $db -> fetchByAssoc ( $db -> query ( " SELECT
2024-04-27 09:23:34 +02:00
id FROM ecmproducts
WHERE
( TRIM ( ean ) = '$ean' OR
TRIM ( ean2 ) = '$ean' ) AND
deleted = '0'
ORDER BY code
LIMIT 0 , 1 " ));
2025-04-16 18:04:18 +00:00
if ( ! $prod [ 'id' ])
return - 3 ; //product not exist
else
return EcmProduct :: mobile_getProductInfo (
array (
'product_id' => $prod [ 'id' ]
)
);
}
//ERROR CODES
// -2 - wrong paramaters
// -3 - can't find object
static function mobile_getProductInfo ( $params )
{
$app_list_strings = return_app_list_strings_language ( " pl_pl " );
$product_id = $params [ 'product_id' ];
if ( ! $product_id || $product_id == " " )
return - 2 ;
$db = $GLOBALS [ 'db' ];
$prod = $db -> fetchByAssoc ( $db -> query ( " SELECT
2024-04-27 09:23:34 +02:00
id ,
IFNULL ( name , '-' ) AS name ,
IFNULL ( code , '-' ) AS code ,
IFNULL ( ean , '-' ) AS ean ,
IFNULL ( ean2 , '-' ) AS ean2 ,
IFNULL ( unit_id , '-' ) AS unit_id
FROM ecmproducts WHERE id = '$product_id' " ));
2025-04-16 18:04:18 +00:00
if ( ! $prod [ 'id' ])
return - 3 ; //product not exist
//get stocks array
$stocks = array ();
$res = $db -> query ( " SELECT IFNULL(stock_name, '-') as stock_name, quantity FROM ecmstockstates WHERE product_id = ' $product_id ' AND deleted = '0' AND quantity IS NOT NULL AND quantity != '0' ORDER BY stock_name; " );
while ( $row = $db -> fetchByAssoc ( $res )) {
//format number precision
if ( $prod [ 'unit_id' ] == " 1 " )
$qty = format_number ( intval ( $row [ 'quantity' ]), 0 , 0 );
else
$qty = format_number ( intval ( $row [ 'quantity' ]), 4 , 2 );
2024-04-27 09:23:34 +02:00
$tmp = array ();
$tmp [ 'name' ] = $row [ 'stock_name' ];
$tmp [ 'quantity' ] = $qty ;
$stocks [] = $tmp ;
2025-04-16 18:04:18 +00:00
}
if ( sizeof ( $stocks ) == 1 )
$s = htmlspecialchars_decode ( json_encode ( $stocks ), ENT_QUOTES );
else
$s = htmlspecialchars_decode ( json_encode ( $stocks ), ENT_QUOTES );
$result = array (
'code' => $prod [ 'code' ],
'name' => base64_encode ( $prod [ 'name' ]),
'id' => $prod [ 'id' ],
'ean' => $prod [ 'ean' ],
'ean2' => $prod [ 'ean' ],
'stockStates' => base64_encode ( $s ),
'unit' => $app_list_strings [ 'ecmproducts_unit_dom' ][ $prod [ 'unit_id' ]],
);
return $result ;
}
2024-04-27 09:23:34 +02:00
}