2025-05-12 15:44:39 +00:00
< ? php
ini_set ( 'memory_limit' , '-1' );
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' );
class EcmStockDocIn 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 ;
var $description ;
var $number ;
var $document_no ;
var $register_date ;
var $total ;
var $position_list ;
var $created_by ;
var $created_by_name ;
var $modified_by_name ;
var $assigned_user_name ;
var $stock_id ;
var $parent_id ;
var $parent_name ;
2025-06-05 20:02:44 +00:00
var $parent_address_street ;
var $parent_address_postalcode ;
var $parent_address_city ;
var $parent_address_country ;
var $parent_nip ;
var $status ;
var $kind ;
var $total_netto ;
var $total_brutto ;
var $canceled ;
var $country_transport_val ;
var $foreign_transport_val ;
var $foreign_transport_cur_id ;
var $country_transport_cur_id ;
var $addition_cost_val ;
var $addition_cost_cur_id ;
var $currency_id ;
var $currency_value ;
var $currency_sad_value ;
var $vats_summary ;
var $date_fk ;
var $fromREST ;
2025-05-12 15:44:39 +00:00
// SUBPANELS RELATED
// MODULE OBJECT DETAILS
var $module_dir = " EcmStockDocIns " ;
var $table_name = " ecmstockdocins " ;
var $object_name = " EcmStockDocIn " ;
// 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'
);
// RELATIONSHIP FIELDS
var $relationship_fields = Array (
'note_id' => 'notes' ,
);
function EcmStockDocIn () {
parent :: SugarBean ();
$this -> setupCustomFields ( 'EcmStockDocIns' );
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 .= " ecmstockdocins.*
, users . user_name as assigned_user_name " ;
if ( $custom_join ) {
$query .= $custom_join [ 'select' ];
}
$query .= " FROM ecmstockdocins
LEFT JOIN users
ON ecmstockdocins . 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 ecmstockdocins.name " ;
return $query ;
}
function create_export_query ( $order_by , $where ) {
$custom_join = $this -> custom_fields -> getJOIN ();
$query = " SELECT
ecmstockdocins .* ,
users . user_name assigned_user_name " ;
if ( $custom_join ) {
$query .= $custom_join [ 'select' ];
}
$query .= " FROM ecmstockdocins " ;
$query .= " LEFT JOIN users
ON ecmstockdocins . assigned_user_id = users . id " ;
if ( $custom_join ) {
$query .= $custom_join [ 'join' ];
}
$query .= " " ;
$where_auto = " ecmstockdocins.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 ecmstockdocins.name " ;
return $query ;
}
function fill_in_additional_list_fields () {
}
function fill_in_additional_detail_fields () {
// FILL IN THE ASSIGNED_USER_NAME
$this -> assigned_user_name = get_assigned_user_name ( $this -> assigned_user_id );
$this -> created_by_name = get_assigned_user_name ( $this -> created_by );
$this -> modified_by_name = get_assigned_user_name ( $this -> modified_user_id );
}
function get_list_view_data () {
global $current_language ;
$this -> fill_in_additional_detail_fields ();
$app_list_strings = return_app_list_strings_language ( $current_language );
$mod_strings = return_module_language ( $current_language , 'EcmStockDocIns' );
$the_array = parent :: get_list_view_data ();
//get stocks
if ( $this -> ecmproduct_id != '' ){
//add subpanel data
$tmp = $this -> getPriceFromDocument ( $this -> ecmproduct_id );
$the_array [ 'QUANTITY' ] = format_number ( $tmp [ 'quantity' ] );
$the_array [ 'PRICE_NETTO' ] = format_number ( $tmp [ 'price' ] );
$the_array [ 'TOTAL_NETTO' ] = $tmp [ 'total' ] ;
}
$this -> retrieve ( $this -> id );
$the_array [ 'PARENT_NAME' ] = '<a href="index.php?module=Accounts&action=DetailView&record=' . $this -> parent_id . '">' . $this -> parent_name . '</a>' ;
$the_array [ 'STOCK_NAME' ] = $this -> stock_name ;
$the_array [ 'DOCUMENT_AUTOINCREMENT' ] = date ( 'd.m.Y' , strtotime ( $this -> register_date ));
$the_array [ 'NUMBER' ] = '<a href="index.php?module=EcmStockDocIns&action=DetailView&record=' . $this -> id . '">' . $this -> document_no . '</a>' ;
//create image options
$u = new User ();
$u -> retrieve ( $this -> created_by );
$the_array [ 'CREATED_BY' ] = '<a href="index.php?module=Users&action=DetailView&record=' . $this -> created_by . '">' . $u -> first_name . ' ' . $u -> last_name . '</a>' ;
unset ( $u );
$op = '<a href="index.php?module=EcmStockDocIns&action=createPDF&to_pdf=1&record=' . $this -> id . '" target="new"/><img src="modules/EcmStockDocIns/images/pdf.gif"/></a>' ;
$the_array [ 'OPTIONS' ] = $op ;
return $the_array ;
}
function getPriceFromDocument ( $product ){
$zap = $this -> db -> query ( " select quantity,price,total from ecmstockdocinitems where id=' " . $product . " ' " );
$dane = $this -> db -> fetchByAssoc ( $zap );
return $dane ;
}
function getStatusMenuInfo ( $inJSON = true ) {
global $app_list_strings ;
$arr = array ();
foreach ( $app_list_strings [ 'ecmstockdocins_status_dom' ] as $key => $value ) {
$arr [ $key ] = array (
'enabled' => '<div><img src="modules/EcmStockDocIns/images/' . $key . '.gif" />' . $value . '</div>' ,
'disabled' => '<div><img src="modules/EcmStockDocIns/images/' . $key . '.gif" />' . $value . '</div>'
);
}
$json = getJSONobj ();
if ( $inJSON )
return str_replace ( '"' , '\"' , $json -> encode ( $arr ) );
else
return $arr ;
}
function create_new_list_query ( $order_by , $where , $filter = array (), $params = array (), $show_deleted = 0 , $join_type = '' , $return_array = false , $parentbean , $singleSelect = false ) {
echo '<script type="text/javascript" src="include/ECM/EcmPreviewPDF/EcmPreviewPDF.js"></script>' ;
echo '<script language="javascript"> var EcmStockDocInsStatusMenu = ' . $this -> getStatusMenuInfo () . '; </script>' ;
return parent :: create_new_list_query ( $order_by , $where , $filter , $params , $show_deleted , $join_type , $return_array , $parentbean , $singleSelect );
}
static function CreateImgStatus ( $id , $status ) {
global $app_list_strings ;
return '<span id="statusListEcmStockDocIn_' . $id . '" style="display:inline;"><img src="modules/EcmStockDocIns/images/' . $status . '.gif" title="' . $app_list_strings [ 'ecmstockdocins_status_dom' ] [ $status ] . '" /></span>' ;
}
/**
* 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 , " ecmstockdocins.name like ' $the_query_string %' " );
$the_where = " " ;
foreach ( $where_clauses as $clause ) {
if ( $the_where != " " )
$the_where .= " or " ;
$the_where .= $clause ;
}
return $the_where ;
}
function set_notification_body ( $xtpl , $simplemodule ) {
global $mod_strings , $app_list_strings ;
$xtpl -> assign ( " NAME " , $simplemodule -> name );
$xtpl -> assign ( " DESCRIPTION " , $simplemodule -> description );
return $xtpl ;
}
function bean_implements ( $interface ) {
switch ( $interface ) {
case 'ACL' :
return true ;
}
return false ;
}
function save ( $check_notify = FALSE ) {
global $current_user ;
if ( $this -> fromREST ) {
$current_user -> id = '86e2871a-9d00-f756-6bba-59cce0c5db59' ;
}
// generate number
require_once ( 'modules/Accounts/Account.php' );
$ac = new Account ();
$ac -> retrieve ( $this -> parent_id );
if ( $this -> parent_address_street == '' && $this -> parent_address_city == '' && $this -> parent_address_postalcode == '' ){
$this -> parent_address_street = $ac -> billing_address_street ;
$this -> parent_address_city = $ac -> billing_address_city ;
$this -> parent_address_postalcode = $ac -> billing_address_postalcode ;
$this -> parent_address_country = $ac -> billing_address_country ;
$this -> parent_nip = $ac -> to_vatid ;
}
//add mz
//get number format 2015-05-26
require_once ( 'modules/EcmSysInfos/EcmSysInfo.php' );
$EcmSysInfo = new EcmSysInfo ();
$template = $EcmSysInfo -> getFormatNumberForModule ( 'EcmStockDocIns' );
unset ( $EcmSysInfo );
global $current_user ;
if ( ! $this -> id || $this -> id == '' ) {
if ( $template != " " ) {
require_once ( 'include/ECM/EcmDocumentNumberGenerator/EcmDocumentNumberGenerator.inc.php' );
$dng = new EcmDocumentNumberGenerator ( 'EcmStockDocIns' , $this -> register_date );
$this -> document_no = $dng -> parseNumber ( $template , $this -> stock_id );
}
}
if ( $this -> new_with_id == true ){
require_once ( 'modules/EcmSysInfos/EcmSysInfo.php' );
$EcmSysInfo = new EcmSysInfo ();
$template = $EcmSysInfo -> getFormatNumberForModule ( 'EcmStockDocIns' );
if ( $template != " " ) {
require_once ( 'include/ECM/EcmDocumentNumberGenerator/EcmDocumentNumberGenerator.inc.php' );
$dng = new EcmDocumentNumberGenerator ( 'EcmStockDocIns' , $this -> register_date );
$this -> document_no = $dng -> parseNumber ( $template , $this -> stock_id );
}
}
$this -> status = 'accepted' ;
$aa = explode ( '/' , $this -> document_no );
$this -> document_autoincrement = date ( " Ymd " , strtotime ( $this -> register_date )) . '' . sprintf ( '%03d' ,( string )(( int ) $aa [ 0 ]));
$return_id = parent :: save ( $check_notify );
if ( $this -> new_with_id == true ){
if ( $this -> position_list != '' ){
$this -> position_list = unserialize ( $this -> position_list );
}
$this -> savePositionsSoap ( $return_id );
$this -> addDocument ();
} else {
$this -> savePositions ( $return_id );
}
$this -> setEcmPurchaseOrderStatus ( $this -> po_id );
//update total
$db = $GLOBALS [ 'db' ];
$r = $db -> fetchByAssoc ( $db -> query ( " SELECT sum(total) as sum FROM ecmstockdocinitems WHERE ecmstockdocin_id=' $this->id ' and deleted='0' " ));
$db -> query ( " UPDATE ecmstockdocins SET total=' " . $r [ 'sum' ] . " ' WHERE id=' $this->id ' " );
if ( ! $this -> fromREST ) {
header ( " Location: index.php?module=Documents&action=EditView&return_module=EcmStockDocIns&parent_type=EcmStockDocIns&ecmstockdocin_id= " . $return_id );
}
return $return_id ;
}
function addDocument (){
$doc = new Document ();
$doc -> document_name = $this -> name ;
$doc -> value = $this -> total_brutto ;
$doc -> left_paid = $this -> total_brutto ;
$doc -> category_id = 'return_note' ;
$doc -> status = 0 ;
$doc -> currency_id = 'PLN' ;
$doc -> document_date = $this -> register_date ;
$doc -> active_date = $this -> register_date ;
$doc -> document_type = 'k' ;
$date = new DateTime ( $this -> register_date );
$date -> modify ( " +120 days " );
$doc -> payment_date = $date -> format ( " d.m.Y " );
unset ( $_POST [ 'parent_id' ]);
$_POST [ 'list_id' ][ 0 ] = create_guid ();
$_POST [ 'parent_name' ][ 0 ] = $this -> parent_name ;
$_POST [ 'parent_type' ][ 0 ] = 'Accounts' ;
$_POST [ 'parent_id' ][ 0 ] = $this -> parent_id ;
$_POST [ 'list_id' ][ 1 ] = create_guid ();
$_POST [ 'parent_name' ][ 1 ] = $this -> document_no ;
$_POST [ 'parent_type' ][ 1 ] = 'EcmStockDocIns' ;
$_POST [ 'parent_id' ][ 1 ] = $this -> id ;
$vats = explode ( " , " , $this -> vats_summary );
$_POST [ 'tblAppendGrid_rowOrder' ] = '' ;
$total = 0 ;
foreach ( $vats as $key => $value ){
$stawka = explode ( " : " , $value );
if ( $stawka [ 0 ] != 'undefined' ){
if ( $stawka [ 1 ] != '' ){
$vat = str_replace ( " % " , " " , $stawka [ 0 ]);
$netto = $stawka [ 1 ] / ( $vat / 100 );
$_POST [ 'tblAppendGrid_netto_' . $key ] = $stawka [ 1 ];
$_POST [ 'tblAppendGrid_vat_' . $key ] = $stawka [ 2 ];
$_POST [ 'tblAppendGrid_vat_id_' . $key ] = $vat ;
$_POST [ 'tblAppendGrid_vat_value_' . $key ] = $stawka [ 0 ];
$_POST [ 'tblAppendGrid_rowOrder' ] .= $key . ',' ;
$total = $total + ( $stawka [ 3 ]);
}
}
} $doc -> value = $total ;
$doc -> left_paid = $total ;
$doc -> save ();
}
function setEcmPurchaseOrderStatus ( $id ){
$db = $GLOBALS [ 'db' ];
$r = $db -> fetchByAssoc ( $db -> query ( " SELECT sum(quantity) as sum FROM ecmpurchaseorderitems WHERE ecmpurchaseorder_id=' " . $id . " ' and deleted='0' " ));
$db = $GLOBALS [ 'db' ];
$r2 = $db -> fetchByAssoc ( $db -> query ( " SELECT sum(quantity) as sum FROM ecmstockdocinitems WHERE ecmstockdocin_id=' " . $this -> id . " ' and deleted='0' " ));
if ( $r2 [ 'sum' ] == $r [ 'sum' ]){
$db -> query ( " UPDATE ecmpurchaseorders SET status='completed' WHERE id=' $id ' " );
} else {
$db -> query ( " UPDATE ecmpurchaseorders SET status='partly_implemented' WHERE id=' $id ' " );
}
}
// ***************************Start Managing Positions*************************//
function constructInsertQuery ( $data , $table = '' ) {
if ( $table == '' && isset ( $this -> object_name ) && $this -> object_name != '' ) {
$table = strtolower ( $this -> object_name ) . " items " ;
} else
return " " ;
$keys = array ();
$values = array ();
foreach ( $data as $key => $value ) {
$keys [] = $key ;
if ( is_array ( $value ))
$values [] = $value [ 1 ] . str_replace ( " ' " , " \ ' " , $value [ 0 ] ) . $value [ 1 ];
else
$values [] = " ' " . str_replace ( " ' " , " \ ' " , $value ) . " ' " ;
}
$q = " insert into ` $table ` (` " ;
$q .= implode ( '`, `' , $keys );
$q .= " `) values ( " ;
$q .= implode ( " , " , $values );
$q .= " ); " ;
$GLOBALS [ 'db' ] -> query ( " INSERT INTO log VALUES (' " . mysql_real_escape_string ( $q ) . " ') " );
return $q ;
}
function savePartNumber (){
$db = $GLOBALS [ 'db' ];
$query = " select value1 from operating_values where name='ecmproductsCodeIncrement' and id='1' " ;
$zap = $db -> query ( $query );
$res = $db -> fetchByAssoc ( $zap );
if ( $res [ 'value1' ] == '' ){
$res [ 'value1' ] = 1 ;
} else {
$res [ 'value1' ] ++ ;
}
$query = " update operating_values set value1=' " . $res [ 'value1' ] . " ' where id='1' " ;
$db -> query ( $query );
return $res [ 'value1' ];
}
function savePositionsSoap ( $id = null , $position_list = null ) {
global $current_user , $timedate ;
if ( $position_list == null )
$position_list = $this -> position_list ;
if ( $id == null )
$id = $this -> id ;
if ( count ( $position_list ) > 0 )
$this -> deleteAssignedPositions ( $id );
$arr = array ();
$position = 0 ;
for ( $i = 0 ; $i < count ( $position_list ); $i ++ ) {
if ( $position_list [ $i ] [ 'name' ] == '' )
continue ;
$p = $position_list [ $i ];
require_once ( " modules/EcmProducts/EcmProduct.php " );
$pr = new EcmProduct ();
$pr -> retrieve_by_string_fields ( [ 'code' => $p [ 'product_code' ]] );
$p [ 'category_id' ] = $pr -> product_category_id ;
$p [ 'product_id' ] = $pr -> id ;
$item_id = create_guid ();
require_once ( " modules/EcmProducts/EcmProduct.php " );
$arr = array (
'id' => $item_id ,
'date_entered' => array (
'NOW()' ,
''
),
'date_modified' => array (
'NOW()' ,
''
),
'modified_user_id' => $current_user -> id ,
'assigned_user_id' => $current_user -> id ,
'created_by' => $current_user -> id ,
'deleted' => '0' ,
strtolower ( $this -> object_name ) . '_id' => $id ,
'ecmproduct_id' => $pr -> id ,
'position' => $position ,
'code' => $p [ 'product_code' ],
'name' => $pr -> name ,
'price' => (( empty ( $p [ 'price_netto' ] ) || $p [ 'price_netto' ] == '' ) ? 0 : $p [ 'price_netto' ]),
'price_fk' => (( empty ( $p [ 'price_fk' ] ) || $p [ 'price_fk' ] == '' ) ? 0 : $p [ 'price_fk' ]),
'quantity' => (( empty ( $p [ 'quantity' ] ) || $p [ 'quantity' ] == '' ) ? 0 : $p [ 'quantity' ]),
'ecmvat_id' => $p [ 'ecmvat_id' ],
'ecmvat_name' => $p [ 'ecmvat_name' ],
'ecmvat_value' => $p [ 'ecmvat_value' ],
'palet' => $p [ 'palet' ],
'waga' => $p [ 'waga' ],
'clo' => $p [ 'clo' ],
'dd_unit_id' => $p [ 'unit_id' ],
'dd_unit_name' => $p [ 'unit_name' ],
'ecmproductcategory_id' => $p [ 'category_id' ],
'is_consignment' => $p [ 'product_is_consignment' ],
);
$p [ 'price' ] = $p [ 'price_netto' ];
$p [ 'ecmproduct_id' ] = $p [ 'product_id' ];
$this -> db -> query ( $this -> constructInsertQuery ( $arr ) );
$this -> db -> query ( " update ecmproducts set srp_price=' " . $p [ 'price_netto' ] . " ' where id=' " . $p [ 'product_id' ] . " ' " );
$query = " update ecmproductcomponents set single_price=' " . $p [ 'price_netto' ] . " ' where ecmcomponent_id=' " . $pr -> id . " ' " ;
$this -> db -> query ( $query );
$this -> db -> query ( " update ecmstockdocinitems set price=' " . $p [ 'price_netto' ] . " ',total=' " . ( $p [ 'price_netto' ] * $p [ 'quantity' ]) . " ' where id=' " . $item_id . " ' " );
$this -> insertProductsToStock ( $p , $id , $this -> stock_id , $item_id );
$position ++ ;
}
}
function savePositions ( $id = null , $position_list = null ) {
global $current_user , $timedate ;
if ( $position_list == null )
$position_list = $this -> position_list ;
if ( $id == null )
$id = $this -> id ;
if ( count ( $position_list ) > 0 )
$this -> deleteAssignedPositions ( $id );
$arr = array ();
$position = 0 ;
for ( $i = 0 ; $i < count ( $position_list ); $i ++ ) {
if ( $position_list [ $i ] [ 'name' ] == '' )
continue ;
$p = $position_list [ $i ];
require_once ( " modules/EcmProducts/EcmProduct.php " );
$pr = new EcmProduct ();
$pr -> retrieve ( $p [ 'product_id' ] );
$p [ 'category_id' ] = $pr -> product_category_id ;
unset ( $pr );
$item_id = create_guid ();
require_once ( " modules/EcmProducts/EcmProduct.php " );
$arr = array (
'id' => $item_id ,
'date_entered' => array (
'NOW()' ,
''
),
'date_modified' => array (
'NOW()' ,
''
),
'modified_user_id' => $current_user -> id ,
'assigned_user_id' => $current_user -> id ,
'created_by' => $current_user -> id ,
'deleted' => '0' ,
strtolower ( $this -> object_name ) . '_id' => $id ,
'ecmproduct_id' => $p [ 'product_id' ],
'position' => $position ,
'code' => $p [ 'product_code' ],
'name' => $p [ 'name' ],
'price' => (( empty ( $p [ 'price' ] ) || $p [ 'price' ] == '' ) ? 0 : $p [ 'price' ]),
'price_fk' => (( empty ( $p [ 'price_fk' ] ) || $p [ 'price_fk' ] == '' ) ? 0 : $p [ 'price_fk' ]),
'quantity' => (( empty ( $p [ 'quantity' ] ) || $p [ 'quantity' ] == '' ) ? 0 : $p [ 'quantity' ]),
'ecmvat_id' => $p [ 'ecmvat_id' ],
'ecmvat_name' => $p [ 'ecmvat_name' ],
'ecmvat_value' => $p [ 'ecmvat_value' ],
'palet' => $p [ 'palet' ],
'waga' => $p [ 'waga' ],
'clo' => $p [ 'clo' ],
'dd_unit_id' => $p [ 'unit_id' ],
'dd_unit_name' => $p [ 'unit_name' ],
'ecmproductcategory_id' => $p [ 'category_id' ],
'is_consignment' => $p [ 'product_is_consignment' ],
);
$p [ 'ecmproduct_id' ] = $p [ 'product_id' ];
$this -> db -> query ( $this -> constructInsertQuery ( $arr ) );
$this -> db -> query ( " update ecmproducts set srp_price=' " . $p [ 'price' ] . " ' where id=' " . $p [ 'product_id' ] . " ' " );
$query = " update ecmproductcomponents set single_price=' " . $p [ 'price' ] . " ' where ecmcomponent_id=' " . $p [ 'product_id' ] . " ' " ;
$this -> db -> query ( $query );
$this -> db -> query ( " update ecmstockdocinitems set price=' " . $p [ 'price' ] . " ',total=' " . ( $p [ 'price' ] * $p [ 'quantity' ]) . " ' where id=' " . $item_id . " ' " );
$this -> insertProductsToStock ( $p , $id , $this -> stock_id , $item_id );
$position ++ ;
}
}
function getPosition ( $position ) {
if ( ! is_array ( $position ))
return '' ;
global $timedate , $app_list_strings ;
$return_array = array ();
$return_array [ 'product_id' ] = $position [ 'ecmproduct_id' ];
$return_array [ 'position' ] = $position [ 'position' ];
$return_array [ 'product_code' ] = $position [ 'code' ];
$return_array [ 'name' ] = $position [ 'name' ];
$return_array [ 'quantity' ] = $position [ 'quantity' ];
$return_array [ 'price' ] = $position [ 'price' ];
$return_array [ 'price_fk' ] = $position [ 'price_fk' ];
$return_array [ 'palet' ] = $position [ 'palet' ];
$return_array [ 'waga' ] = $position [ 'waga' ];
$return_array [ 'clo' ] = $position [ 'clo' ];
$return_array [ 'total' ] = $position [ 'total' ];
$return_array [ 'ecmvat_id' ] = $position [ 'ecmvat_id' ];
$return_array [ 'ecmvat_name' ] = $position [ 'ecmvat_name' ];
$return_array [ 'ecmvat_value' ] = $position [ 'ecmvat_value' ];
$return_array [ 'unit_id' ] = $position [ 'dd_unit_id' ];
$return_array [ 'unit_name' ] = $position [ 'dd_unit_name' ];
$return_array [ 'product_is_consignment' ] = $position [ 'is_consignment' ];
$return_array [ 'unit_precision' ] = $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $position [ 'dd_unit_id' ]];
$return_array [ 'product_precision' ] = $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $position [ 'dd_unit_id' ]];
//check consignments
$p = new EcmProduct ();
$p -> retrieve ( $position [ 'ecmproduct_id' ]);
//get consignments
if ( $p -> is_consignment ) {
$c = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " SELECT IFNULL(part_no, '.') as part_no FROM ecmstockoperations WHERE documentitem_id=' " . $position [ 'id' ] . " ' " ));
$return_array [ 'part_no' ] = $c [ 'part_no' ];
}
unset ( $p );
return $return_array ;
}
function getPositionList ( $array = false ) {
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " SELECT * FROM ` " . strtolower ( $this -> object_name ) . " items` WHERE ` " . strtolower ( $this -> object_name ) . " _id`=' " . $this -> id . " ' order by position asc " ;
$r = $this -> db -> query ( $query );
$return_array = array ();
if ( $r ) {
while ( $w = $this -> db -> fetchByAssoc ( $r ) ) {
$return_array [] = $this -> getPosition ( $w );
}
$json = getJSONobj ();
return $array ? $return_array : $json -> encode ( $return_array );
}
}
return $array ? false : '[]' ;
}
function deleteAssignedPositions () {
if ( isset ( $this -> id ) && $this -> id != '' ) {
$query = " DELETE FROM ` " . strtolower ( $this -> object_name ) . " items` WHERE ` " . strtolower ( $this -> object_name ) . " _id`=' " . $this -> id . " ' " ;
$r = $this -> db -> query ( $query );
if ( $r )
return true ;
}
return false ;
}
function formatPositions ( $position_list ) {
return ;
if ( ! is_array ( $position_list ) || count ( $position_list ) == 0 )
return false ;
global $app_list_strings ;
require_once ( 'modules/Currencies/Currency.php' );
foreach ( $position_list as $key => $value ) {
$position_list [ $key ] [ 'unit_id' ] = $app_list_strings [ 'ecmproducts_unit_dom' ] [ $value [ 'unit_id' ]];
$position_list [ $key ] [ 'category_id' ] = $app_list_strings [ 'ecmproducts_category_dom' ] [ $value [ 'category_id' ]];
// $position_list[$key]['vat_id'] = format_number($value['vat_id']).'%';
$position_list [ $key ] [ 'discount' ] = format_number ( $value [ 'discount' ] ) . '%' ;
if ( isset ( $currency ) && ( $currency -> id == $this -> currency_id )) {
} else {
$currency = new Currency ();
$currency -> retrieve ( $this -> currency_id );
}
$position_list [ $key ] [ 'price' ] = format_number ( $value [ 'price' ] ) . ' ' . $currency -> iso4217 ;
$position_list [ $key ] [ 'total' ] = format_number ( $value [ 'total' ] ) . ' ' . $currency -> iso4217 ;
// $position_list[$key]['price'] = format_number($value['price']).' PLN';
// $position_list[$key]['total'] = format_number($value['total']).' PLN';
$this -> currency_symbol = $currency -> iso4217 ;
}
return $position_list ;
}
// ***************************End Managing Positions*************************//
//begin stock
function insertProductsToStock ( $pl , $return_id , $stock_id , $itemid , $consignments = NULL ) {
require_once ( " modules/EcmStockOperations/EcmStockOperation.php " );
$o = new EcmStockOperation ();
global $app_list_strings ;
require_once ( " modules/EcmProducts/EcmProduct.php " );
$o -> product_id = $pl [ 'ecmproduct_id' ];
$p = new EcmProduct ();
$p -> retrieve ( $pl [ 'ecmproduct_id' ]);
$o -> product_code = $p -> code ;
$o -> product_name = $p -> name ;
require_once ( " modules/EcmStocks/EcmStock.php " );
$o -> stock_id = $stock_id ;
$s = new EcmStock ();
$s -> retrieve ( $stock_id );
$o -> stock_name = $s -> name ;
$o -> parent_id = $return_id ;
$r = $GLOBALS [ 'db' ] -> fetchByAssoc ( $GLOBALS [ 'db' ] -> query ( " select document_no from ecmstockdocins where id=' " . $return_id . " ' " ));
$o -> parent_name = $r [ 'document_no' ];
$o -> parent_type = " EcmStockDocIns " ;
//consignment
if ( $pl [ 'product_is_consignment' ] == '1' )
$o -> part_no = $pl [ 'product_consignment_part' ];
//$GLOBALS['db']->query("INSERT INTO log VALUES ('".$pl['quantity']."')");
$o -> quantity = round ( $pl [ 'quantity' ], $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $pl [ 'unit_id' ]]);
$o -> price = str_replace ( " , " , " . " , str_replace ( " . " , " " , $pl [ 'price' ]));
$o -> documentitem_id = $itemid ;
$o -> type = 0 ;
$oid = $o -> save ();
$GLOBALS [ 'db' ] -> query ( " update ecmstockoperations set price=' " . $pl [ 'price' ] . " ' where id=' " . $oid . " ' " );
require_once ( " modules/EcmStockStates/EcmStockState.php " );
$ss = new EcmStockState ();
$ss -> UpdateStockState ( $o -> stock_id , $o -> product_id );
}
//end stock
function ACLAccess ( $view , $is_owner = 'not_set' ) {
global $current_user ;
$file = 'modules/EcmGroupSales/EcmGroupSale.php' ;
if ( file_exists ( $file )) {
require_once ( $file );
$cc = EcmGroupSale :: loadSettings ( true );
} else
return true ;
if ( is_admin ( $current_user )) {
switch ( $view ) {
case 'confirming' :
return ( $this -> status == " s20 " );
case 'send_to_confirm' :
return ( $this -> status == " s10 " );
case 'pdf_toolbar' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " );
}
return true ;
}
if ( $is_owner == 'not_set' ) {
$is_owner = $this -> isOwner ( $current_user -> id );
}
// if we don't implent acls return true
if ( ! $this -> bean_implements ( 'ACL' ))
return true ;
$view = strtolower ( $view );
if ( $cc [ 'user_manager_role' ]) { // Manager
switch ( $view ) {
case 'list' :
case 'index' :
case 'listview' :
return ACLController :: checkAccess ( $this -> module_dir , 'list' , true );
case 'edit' :
case 'save' :
case 'popupeditview' :
case 'editview' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'edit' , $is_owner ));
case 'view' :
case 'detail' :
case 'detailview' :
return ACLController :: checkAccess ( $this -> module_dir , 'view' , $is_owner );
case 'delete' :
return ACLController :: checkAccess ( $this -> module_dir , 'delete' , $is_owner );
case 'export' :
return ACLController :: checkAccess ( $this -> module_dir , 'export' , $is_owner );
case 'import' :
return ACLController :: checkAccess ( $this -> module_dir , 'import' , true );
case 'send_to_confirm' :
return ( $this -> status == " s10 " );
case 'can_commit' :
return true ;
case 'confirming' :
return ( $this -> status == " s20 " );
case 'auto_commiting' :
return true ;
case 'pdf_toolbar' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " );
}
} else if ( $cc [ 'user_representative_extra_role' ]) { // Representative Extra
switch ( $view ) {
case 'list' :
case 'index' :
case 'listview' :
return ACLController :: checkAccess ( $this -> module_dir , 'list' , true );
case 'edit' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'edit' , $is_owner ) && ( $this -> status == " s10 " || $this -> status == " s40 " ));
case 'save' :
case 'popupeditview' :
case 'editview' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'edit' , $is_owner ));
case 'view' :
case 'detail' :
case 'detailview' :
return ACLController :: checkAccess ( $this -> module_dir , 'view' , $is_owner );
case 'delete' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'delete' , $is_owner ) && $this -> status == " s10 " );
case 'export' :
return ACLController :: checkAccess ( $this -> module_dir , 'export' , $is_owner );
case 'import' :
return ACLController :: checkAccess ( $this -> module_dir , 'import' , true );
case 'quote_to_sale' :
case 'quote_to_invoice' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " && $this -> status != " s60 " );
case 'send_to_confirm' :
return ( $this -> status == " s10 " );
case 'send_email' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " );
case 'can_commit' :
return true ;
case 'confirming' :
return false ;
case 'auto_commiting' :
return true ;
case 'pdf_toolbar' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " );
}
} else if ( $cc [ 'user_representative_role' ]) { // Representative
switch ( $view ) {
case 'list' :
case 'index' :
case 'listview' :
return ACLController :: checkAccess ( $this -> module_dir , 'list' , true );
case 'edit' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'edit' , $is_owner ) && ( $this -> status == " s10 " || $this -> status == " s40 " ));
case 'save' :
case 'popupeditview' :
case 'editview' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'edit' , $is_owner ));
case 'view' :
case 'detail' :
case 'detailview' :
return ACLController :: checkAccess ( $this -> module_dir , 'view' , $is_owner );
case 'delete' :
return ( ACLController :: checkAccess ( $this -> module_dir , 'delete' , $is_owner ) && $this -> status == " s10 " );
case 'export' :
return ACLController :: checkAccess ( $this -> module_dir , 'export' , $is_owner );
case 'import' :
return ACLController :: checkAccess ( $this -> module_dir , 'import' , true );
case 'quote_to_sale' :
case 'quote_to_invoice' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " && $this -> status != " s60 " );
case 'send_to_confirm' :
return ( $this -> status == " s10 " );
case 'send_email' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " );
case 'can_commit' :
return false ;
case 'confirming' :
return false ;
case 'auto_commiting' :
return false ;
case 'pdf_toolbar' :
return ( $this -> status != " s10 " && $this -> status != " s20 " && $this -> status != " s40 " );
}
}
// if it is not one of the above views then it should be implemented on the page level
return true ;
}
//mz generate number
function generateNumber ( $date ) {
$db = $GLOBALS [ 'db' ];
$r = $db -> fetchByAssoc ( $db -> query ( " SELECT count(id) as c FROM ecmstockdocins WHERE deleted='0' AND YEAR(register_date)=' " . date ( 'Y' , strtotime ( $date )) . " ' " ));
if ( ! $r || ! $r [ 'c' ] || $r [ 'c' ] == '' )
$count = 0 ;
else
$count = intval ( $r [ 'c' ]);
$count ++ ;
//has 5 digits?
$tmp = strval ( $count );
while ( strlen ( $tmp ) < 5 )
$tmp = '0' . $tmp ;
return date ( 'Ymd' , strtotime ( $date )) . $tmp ;
}
function generateDocNumberStock ( $stock , $date ) {
$db = $GLOBALS [ 'db' ];
$r = $db -> fetchByAssoc ( $db -> query ( " SELECT count(id) as c FROM ecmstockdocins WHERE deleted='0' AND YEAR(register_date)=' " . date ( 'Y' , strtotime ( $date )) . " ' AND stock_id=' " . $stock . " ' " ));
$r2 = $db -> fetchByAssoc ( $db -> query ( " SELECT no FROM ecmstocks WHERE id=' " . $stock . " ' " ));
if ( ! $r || ! $r [ 'c' ] || $r [ 'c' ] == '' )
$count = 0 ;
else
$count = intval ( $r [ 'c' ]);
$count ++ ;
$tmp = strval ( $count );
while ( strlen ( $tmp ) < 5 )
$tmp = '0' . $tmp ;
$number = date ( " Ymd " , strtotime ( $date )) . $tmp ;
$n = intval ( substr ( $number , 8 , 5 ));
$y = substr ( $number , 0 , 4 );
//has 3 digits?
while ( strlen ( $n ) < 3 )
$n = '0' . $n ;
if ( $r2 [ 'no' ] != '' ) return '' . $n . '/' . $r2 [ 'no' ] . '/' . $y ;
else return '' . $n . '/' . $y ;
}
function formatNumber ( $number ) {
$n = intval ( substr ( $number , 8 , 5 ));
$y = substr ( $number , 0 , 4 );
//has 3 digits?
while ( strlen ( $n ) < 3 )
$n = '0' . $n ;
return '' . $n . '/' . $y ;
}
public static function getReceiptsList ( $where , $product_category ){
global $db ;
//print_r($where);
if ( empty ( $where [ 'ecmrecipes' ])){
$query = " SELECT * FROM ecmstockdocins WHERE (canceled=0 OR canceled IS NULL) AND (deleted=0 OR deleted IS NULL) ORDER BY date_entered, register_date " ;
} else {
$query = " SELECT * FROM ecmstockdocins WHERE (canceled=0 OR canceled IS NULL) AND (deleted=0 OR deleted IS NULL) AND " . implode ( " AND " , $where [ 'ecmrecipes' ]) . ' ORDER BY date_entered, register_date' ;
}
//print_r($query);
$result = $db -> query ( $query );
$returnArray = [];
$returnArr = [];
if ( $result -> num_rows > 0 ){
$returnArray = array ();
while ( $row = $db -> fetchByAssoc ( $result )){
$currency_value = 1 ;
if ( $row [ 'currency_value' ] != '' ){
$currency_value = $row [ 'currency_value' ];
}
$positionQuery = " SELECT
ecmstockdocinitems . id as position_id ,
ecmstockdocinitems . name as position_name ,
ecmstockdocinitems . total as position_total_netto ,
ecmstockdocinitems . total as position_total_brutto ,
ecmstockdocinitems . price as position_price_purchase ,
ecmstockdocinitems . quantity as position_quantity ,
ecmstockdocinitems . dd_unit_id as position_unit_id ,
ecmstockdocinitems . dd_unit_name as position_unit_name ,
ecmstockdocinitems . total as position_total_netto_corrected ,
ecmstockdocinitems . quantity as position_quantity_corrected ,
ecmstockdocinitems . total as position_total_brutto_corrected ,
ecmstockdocinitems . ecmstockdocin_id as old_position_id ,
ecmstockdocinitems . code as position_code ,
ecmproducts . id as product_id ,
ecmproducts . product_netto_weight as position_weight
FROM ecmstockdocinitems , ecmproducts " .( $product_category != " " ? ',ecmproductcategories_bean' : ''). "
WHERE
ecmstockdocinitems . ecmstockdocin_id = '" . $row[' id '] . "'
AND ecmstockdocinitems . ecmproduct_id = ecmproducts . id
" .( $product_category != " " ? 'and ecmproductcategories_bean.bean_id=ecmproducts.id and ecmproductcategories_bean.ecmproductcategory_id= " '.$product_category.' " ' : '');
if ( count ( $where [ 'ecmproducts' ]) > 0 ){
$positionQuery .= ' AND ' . implode ( " AND " , $where [ 'ecmproducts' ]);
}
$positionQuery .= " ORDER BY ecmstockdocinitems.position " ;
//print_r($positionQuery);
//die();
$positionresult = $db -> query ( $positionQuery );
$positionArray = NULL ;
$i = 0 ;
if ( $positionresult -> num_rows > 0 ){
$positionArray = array ();
while ( $rowposition = $db -> fetchByAssoc ( $positionresult )){
$tmprow = array ();
$tmprow [ 'position_name' ] = $rowposition [ 'position_name' ];
$tmprow [ 'position_id' ] = $rowposition [ 'position_id' ];
$tmprow [ 'position_code' ] = $rowposition [ 'position_code' ];
$tmprow [ 'position_total_netto' ] = round ( $rowposition [ 'position_total_netto' ] * $currency_value , 2 );
$tmprow [ 'position_total_brutto' ] = round ( $rowposition [ 'position_total_brutto' ] * $currency_value , 2 );
$tmprow [ 'position_total_price_purchase' ] = round ( $rowposition [ 'position_price_purchase' ] * $rowposition [ 'position_quantity' ], 2 );
$tmprow [ 'position_weight' ] = $rowposition [ 'position_weight' ];
$tmprow [ 'position_total_weight' ] = round ( $rowposition [ 'position_quantity' ] * $tmprow [ 'position_weight' ], 6 );
$tmprow [ 'position_quantity' ] = $rowposition [ 'position_quantity' ];
$tmprow [ 'position_unit_id' ] = $rowposition [ 'position_unit_id' ];
$tmprow [ 'position_unit_name' ] = $rowposition [ 'position_unit_name' ];
$tmprow [ 'product_id' ] = $rowposition [ 'product_id' ];
//print_r($tmprow);die();
$positionArray [] = $tmprow ;
}
//print_r($row);die();
$i ++ ;
}
$row [ 'position_list' ] = $positionArray ;
$row [ 'document_type' ] = " EcmStockDocIn " ;
$returnArray [] = $row ;
}
}
//print_r($row);die();
return $returnArray ;
}
}
?>