2025-05-12 15:44:39 +00:00
< ? php
if ( ! defined ( 'sugarEntry' ) || ! sugarEntry ) die ( '-1' );
if ( ! $_POST [ 'job' ] || $_POST [ 'job' ] == '' ) die ( '-1' );
switch ( $_POST [ 'job' ]) {
case 'getParentInfo' : getParentInfo ( $_POST [ 'id' ], $_POST [ 'type' ]); break ;
case 'generateNumber' : generateNumber (); break ;
case 'searchProducts' : searchProducts ( $_POST [ 'searchKey' ], $_POST [ 'searchCategory' ], $_POST [ 'searchStock' ], $_POST [ 'searchStockId' ], $_POST [ 'searchSort' ], $_POST [ 'searchStart' ], $_POST [ 'searchCount' ]); break ;
case 'getProduct' : getProduct ( $_POST [ 'id' ], $_POST [ 'pricebook' ], $_POST [ 'account_id' ], $_POST [ 'language' ]); break ;
case 'getItems' : getItems ( $_POST [ 'record' ]); break ;
case 'getStockProductDetails' : getStockProductDetails ( $_POST [ 'record' ], $_POST [ 'stock_id' ]); break ;
case 'getItemsFromSale' : getItemsFromSale ( $_POST [ 'record' ]); break ;
case 'getCategoriesList' : getCategoriesList (); break ;
case 'getTranslation' : getTranslation ( $_POST [ 'product_id' ], $_POST [ 'language' ], $_REQUEST [ 'unit_id' ]); break ;
case 'getPricesInfo' : getPricesInfo ( $_POST [ 'product_id' ], $_POST [ 'pricebook_id' ], $_POST [ 'account_id' ]); break ;
case 'getStockArray' : getStockArray ( $_POST [ 'product_id' ]); break ;
case 'SendMail' : SendMail ( $_POST [ 'id' ], $_POST [ 'modulee' ], $_POST [ 'parent_id' ]); break ;
case 'getPurchaseArray' : getPurchaseArray ( $_POST [ 'product_id' ]); break ;
case 'calculatePaymentDate' : calculatePaymentDate ( $_POST [ 'date' ], $_POST [ 'days' ]); break ;
case 'calculateDateDiff' : calculateDateDiff ( $_POST [ 'date1' ], $_POST [ 'date2' ]); break ;
case 'calculateDate' : calculateDate ( $_POST [ 'date' ]); break ;
}
function calculateDate ( $date ){
$date = new Datetime ( $date );
$date -> modify ( '-1 day' );
$tmp [ 'date' ] = $date -> format ( " d.m.Y " );
2025-08-30 13:15:50 +02:00
$tmp [ 'date_day' ] = date ( 'N' , strtotime ( $tmp [ 'date' ]));
if ( $tmp [ 'date_day' ] == 7 ){
$date -> modify ( '-2 day' );
} else if ( $tmp [ 'date_day' ] == 6 ){
$date -> modify ( '-1 day' );
}
$tmp [ 'date' ] = $date -> format ( " d.m.Y " );
2025-05-12 15:44:39 +00:00
echo json_encode ( $tmp );
return '' ;
}
/*
function getStockProductDetails ( $record , $stock_id ){
$db = $GLOBALS [ 'db' ];
$r = $db -> query ( " select * from ecmstockoperations where
product_id = '".$record."'
and stock_id = '".$stock_id."'
and in_id is null and used = 0 and type = 0 " );
$docs = array ();
$l = 0 ;
while ( $tmp = $db -> fetchByAssoc ( $r )){
$ii = $db -> query ( " select * from ecmstockoperations where in_id=' " . $tmp [ 'id' ] . " ' and type=1 " );
if ( $ii -> num_rows > 0 ){
$quantity_tmp = $tmp [ 'quantity' ];
while ( $tmp2 = $db -> fetchByAssoc ( $ii )){
$quantity_tmp -= $tmp2 [ 'quantity' ];
}
$doc [ 'quantity' ] = $quantity_tmp ;
$doc [ 'parent_name' ] = $tmp [ 'parent_name' ];
$doc [ 'price' ] = $tmp [ 'price' ];
$doc [ 'parent_type' ] = $tmp [ 'parent_type' ];
$doc [ 'parent_id' ] = $tmp [ 'parent_id' ];
$docs [] = $doc ;
} else {
$doc [ 'quantity' ] = $tmp [ 'quantity' ];
$doc [ 'parent_name' ] = $tmp [ 'parent_name' ];
$doc [ 'price' ] = $tmp [ 'price' ];
$doc [ 'parent_type' ] = $tmp [ 'parent_type' ];
$doc [ 'parent_id' ] = $tmp [ 'parent_id' ];
$docs [] = $doc ;
}
}
echo json_encode ( $docs );
return ;
}
*/
function SendMail ( $id , $pdf_type , $parent_id ){
global $current_user ;
$db = $GLOBALS [ 'db' ];
$uq = $db -> query ( " select google_login,CAST(AES_DECRYPT(google_password, 'jakistamhash123') as CHAR)
AS google_password FROM users where id = '".$current_user->id."' " );
$rul = $db -> fetchByAssoc ( $uq );
if ( $rul [ 'google_login' ] != '' && $rul [ 'google_password' ] != '' ){
$_REQUEST [ 'record' ] = $id ;
$_REQUEST [ 'pdf_type' ] = $pdf_type ;
$_REQUEST [ 'file' ] = 1 ;
require_once ( " modules/EcmSales/createPDF.php " );
require_once ( " include/phpmailer/class.phpmailer.php " );
require_once ( " include/phpmailer/class.smtp.php " );
$mailClassS = new PHPMailer ( 2 );
$mailClassS -> SMTPDebug = 1 ;
$mailClassS -> isSMTP (); // Set mailer to use SMTP
$mailClassS -> SMTPDebug = 1 ;
$mailClassS -> Host = 'smtp.gmail.com' ; // Specify main and backup server
$mailClassS -> SMTPAuth = true ; // Enable SMTP authentication
$mailClassS -> Username = $rul [ 'google_login' ]; // SMTP username
$mailClassS -> Password = $rul [ 'google_password' ]; // SMTP password
$mailClassS -> SMTPSecure = 'tls' ; // Enable encryption, 'ssl' also accepted
$mailClassS -> Port = 587 ; // Set the SMTP port number - 587 for
// get email from accounts
$sea = new SugarEmailAddress ;
// Grab the array of addresses
$addresses = $sea -> getAddressesByGUID ( $parent_id , 'Accounts' );
foreach ( $addresses as $address ) {
if ( $address [ 'email_address' ] != '' && $address [ 'opt_out' ] == 1 ){
$mailClassS -> addAddress ( $address [ 'email_address' ]); // Add address
}
}
// set sender
$mailClassS -> Sender = $rul [ 'google_login' ];
$mailClassS -> From = $rul [ 'google_login' ];
$mailClassS -> FromName = $current_user -> first_name . ' ' . $current_user -> last_name ;
$mailClassS -> WordWrap = 50 ; // Set word wrap to 50 characters
$mailClassS -> isHTML ( true ); // Set email format to HTML
$mailClassS -> Subject = 'Dokument od Saas SystemS Sp. z o.o.' ;
$d = new EcmSale ();
$d -> retrieve ( $id );
$path = createEcmSalePdf ( $id , 'FILE' );
$mailClassS -> Body = 'Witam,<br><br>Przesyłam w załączniku dokument ' . $d -> document_no . '.<br>Proszę o potwierdzenie otrzymania wiadomości e-mail z załączonym dokumentem.' ;
// załącznik
if ( file_exists ( '/var/www/html/crm/upload/zs_' . $d -> number . " .pdf " )){
$mailClassS -> addAttachment ( '/var/www/html/crm/upload/zs_' . $d -> number . " .pdf " );
}
// Read an HTML message body from an external file, convert
// referenced images to embedded,
// convert HTML into a basic plain-text alternative body
// $mailClassS->msgHTML(file_get_contents('contents.html'),
// dirname(__FILE__));
if ( count ( $mailClassS -> to ) > 0 ){
if ( ! $mailClassS -> send ()) {
echo $mailClassS -> ErrorInfo ;
unlink ( 'upload/fk_' . $d -> number . " .pdf " );
echo '-1' ;
} else {
unlink ( 'upload/fk_' . $d -> number . " .pdf " );
echo '1' ;
}
} else {
echo '-1' ;
}
} else {
echo '-1' ;
}
}
function calculatePaymentDate ( $d , $days ){
global $timedate ;
$date = new DateTime ( $d );
$date -> add ( new DateInterval ( 'P' . $days . 'D' ));
echo json_encode ( $date -> format ( 'd.m.Y' )); return ;
}
function calculateDateDiff ( $d1 , $d2 ) {
$db = $GLOBALS [ 'db' ];
global $timedate ;
$d1 = $timedate -> to_db_date ( $d1 );
$d2 = $timedate -> to_db_date ( $d2 );
$ret = $db -> fetchByAssoc ( $db -> query ( " SELECT TIMESTAMPDIFF(DAY, ' $d1 ',' $d2 ') AS diff; " ));
echo json_encode ( $ret [ 'diff' ]); return ;
}
function getParentInfo ( $id , $type ) {
if ( ! $id || $id == '' ) die ( '-1' );
$a = new Account ();
$a -> retrieve ( $id );
$data = array ();
$data [ 'name' ] = html_entity_decode ( $a -> name );
$data [ 'parent_nip' ] = $a -> to_vatid ;
$data [ 'parent_index_dbf' ] = $a -> index_dbf ;
$data [ 'parent_address_street' ] = $a -> register_address_street ;
$data [ 'parent_address_postalcode' ] = $a -> register_address_postalcode ;
$data [ 'parent_address_city' ] = $a -> register_address_city ;
$data [ 'parent_address_country' ] = $a -> register_address_country ;
$data [ 'invoice_type' ] = $a -> invoice_type ;
$data [ 'currency_id' ] = $a -> currency_id ;
$data [ 'payment_date_days' ] = $a -> payment_date_days ;
$data [ 'payment_method' ] = $a -> payment_method ;
$data [ 'iln' ] = $a -> iln ;
$data [ 'vat_payer' ] = $a -> vat_payer ;
if ( $a -> ecmpaymentcondition_id && $a -> ecmpaymentcondition_id != '' ) {
$pc = new EcmPaymentCondition ();
$pc -> retrieve ( $a -> ecmpaymentcondition_id );
$data [ 'ecmpaymentcondition_id' ] = $pc -> id ;
$data [ 'ecmpaymentcondition_name' ] = $pc -> name ;
}
if ( $a -> ecmdeliverycondition_id && $a -> ecmdeliverycondition_id != '' ) {
$pc = new EcmdeliveryCondition ();
$pc -> retrieve ( $a -> ecmdeliverycondition_id );
$data [ 'ecmdeliverycondition_id' ] = $pc -> id ;
$data [ 'ecmdeliverycondition_name' ] = $pc -> name ;
}
if ( $a -> ecmprice_id && $a -> ecmprice_id != '' ) {
$pr = new EcmPrice ();
$pr -> retrieve ( $a -> ecmprice_id );
$data [ 'ecmprice_id' ] = $pr -> id ;
$data [ 'ecmprice_name' ] = $pr -> name ;
}
//get pricebooks, ownership pricebooks
$pricebooks = array ();
$db = $GLOBALS [ 'db' ];
$res = $db -> query ( " SELECT id, name FROM ecmpricebooks WHERE account_id IN (' " . $a -> id . " ',' " . $a -> parent_id . " ') AND active='1' AND deleted='0' " );
while ( $row = $db -> fetchByAssoc ( $res )) {
$tmp = array ();
$tmp [ 'id' ] = $row [ 'id' ];
$tmp [ 'name' ] = $row [ 'name' ];
$pricebooks [] = $tmp ;
unset ( $tmp );
}
$data [ 'pricebooks' ] = $pricebooks ;
//document validation fields
$data [ 'document_recipient_code' ] = $a -> document_recipient_code ;
$data [ 'document_parent_order_no' ] = $a -> document_parent_order_no ;
$data [ 'document_delivery_address' ] = $a -> document_delivery_address ;
$data [ 'document_parent_iln' ] = $a -> document_parent_iln ;
$data [ 'document_shipping_iln' ] = $a -> document_shipping_iln ;
$data [ 'document_parent_nip' ] = $a -> document_parent_nip ;
$data [ 'document_shipping_nip' ] = $a -> document_shipping_nip ;
//delivery addresses && ownership addresses
$addresses = array ();
//delivery
$delivery = $a -> getPositionList ( true );
foreach ( $delivery as $d ) {
$address = array ();
$address [ 'name' ] = html_entity_decode ( $d [ 'name' ]);
$address [ 'street' ] = $d [ 'street' ];
$address [ 'postalcode' ] = $d [ 'postalcode' ];
$address [ 'city' ] = $d [ 'city' ];
$address [ 'country' ] = $d [ 'country' ];
$address [ 'iln' ] = $r [ 'fax' ];
$address [ 'nip' ] = $r [ 'phone' ];
$addresses [] = $address ;
unset ( $address );
}
//ownership
$res = $db -> query ( " SELECT name, register_address_street, register_address_postalcode, register_address_city, register_address_country, iln, to_vatid FROM accounts WHERE parent_id=' $a->id ' " );
while ( $r = $db -> fetchByAssoc ( $res )) {
$address = array ();
$address [ 'name' ] = html_entity_decode ( $r [ 'name' ]);
$address [ 'street' ] = $r [ 'register_address_street' ];
$address [ 'postalcode' ] = $r [ 'register_address_postalcode' ];
$address [ 'city' ] = $r [ 'register_address_city' ];
$address [ 'country' ] = $r [ 'register_address_country' ];
$address [ 'iln' ] = $r [ 'iln' ];
$address [ 'nip' ] = $r [ 'to_vatid' ];
$addresses [] = $address ;
unset ( $address );
}
$data [ 'addresses' ] = $addresses ;
unset ( $addresses );
echo json_encode ( $data );
unset ( $data );
unset ( $a );
unset ( $res );
return ;
}
function generateNumber () {
$data = array ();
$data [ 'number' ] = EcmSale :: generateNumber ();
$data [ 'document_no' ] = EcmSale :: formatNumber ( $data [ 'number' ]);
echo json_encode ( $data );
unset ( $data );
return ;
}
/*
function searchProducts ( $searchKey , $searchCategory , $searchStock , $searchStockId , $searchSort , $searchStart , $searchCount ) {
$db = $GLOBALS [ 'db' ];
$result = array ();
global $app_list_strings ;
$q = " SELECT p.id, p.code, p.name,p.unit_id FROM ecmproducts p " ;
if ( $searchCategory != 'bf900339-6c7b-f278-2737-542023796730' && $searchStock == 3 ){
$q .= ' inner join ecmstockstates s on p.id=s.product_id' ;
}
$q .= " WHERE
( UPPER ( p . code ) LIKE '%$searchKey%' OR
UPPER ( p . name ) LIKE '%$searchKey%' )
AND p . deleted = '0' " ;
if ( $searchCategory && $searchCategory != " " )
$q .= " AND p.product_category_id=' $searchCategory ' " ;
if ( $searchStock == 3 && $searchCategory != 'bf900339-6c7b-f278-2737-542023796730' )
$q .= " and s.stock_id=' $searchStockId ' and s.quantity>0 " ;
if ( $searchSort == '1' )
$q .= " ORDER BY p.code " ;
else if ( $searchSort == '2' )
$q .= " ORDER BY p.code DESC " ;
else if ( $searchSort == '3' )
$q .= " ORDER BY p.name " ;
else if ( $searchSort == '4' )
$q .= " ORDER BY p.name DESC " ;
// pagination
$c = $db -> query ( $q );
$result [ 'count' ] = $c -> num_rows ;
if ( $searchStart == 0 ){
$LIMIT1 = 0 ;
$LIMIT2 = 50 ;
} else if ( $searchStart > 0 ){
$LIMIT1 = $searchStart ;
$LIMIT2 = 50 ;
}
//echo $LIMIT1. ' '.$LIMIT2;
// pagination end
$q .= " LIMIT " . $LIMIT1 . " , " . $LIMIT2 ;
$res = $db -> query ( $q );
while ( $row = $db -> fetchByAssoc ( $res )) {
$tmp = array ();
$tmp [ 'id' ] = $row [ 'id' ];
$tmp [ 'name' ] = $row [ 'name' ];
$tmp [ 'code' ] = $row [ 'code' ];
$tmp [ 'unit_name' ] = $app_list_strings [ 'ecmproducts_unit_dom' ][ $row [ 'unit_id' ]];
//get stock if necessary
if ( $searchStock != '1' ) {
$tmp [ 'stock_state' ] = EcmStockOperation :: getStock ( $row [ 'id' ], $searchStockId );
}
if ( $searchStock == '3' && $tmp [ 'stock_state' ] == 0 ) continue ; //don't show null stock
$result [] = $tmp ;
}
echo json_encode ( $result );
return ;
}
*/
function getProduct ( $id , $pricebook_id , $account_id , $language ) {
$db = $GLOBALS [ 'db' ];
$p = $db -> fetchByAssoc ( $db -> query ( " SELECT p.id, p.code,p.OO, p.name,p.product_category_id, v.id as ecmvat_id, v.name as ecmvat_name, v.value as ecmvat_value, p.ean, p.ean2, p.unit_id FROM ecmproducts as p INNER JOIN ecmvats as v ON v.id=p.vat_id WHERE p.id=' $id ' " ));
global $app_list_strings ;
$p [ 'unit_name' ] = $app_list_strings [ 'ecmproducts_unit_dom' ][ $p [ 'unit_id' ]];
$p [ 'unit_precision' ] = $app_list_strings [ 'ecmproducts_unit_dom_precision' ][ $p [ 'unit_id' ]];
//get discount
$dc = $db -> fetchByAssoc ( $db -> query ( " select d.discount from accounts_discounts d
where d . account_id = '".$account_id."' and d . ecmproductcategory_id = '".$p[' product_category_id ']."' " ));
if ( $dc [ 'discount' ] != '' && is_numeric ( $dc [ 'discount' ])){
$p [ 'discount' ] = $p [ 'discount' ] + $dc [ 'discount' ];
}
//try get recipient_code and price from pricebook
if ( $pricebook_id && $pricebook_id != '' ) {
$pr = $db -> fetchByAssoc ( $db -> query ( " SELECT price, recipient_code FROM ecmpricebooks_ecmproducts WHERE ecmpricebook_id=' $pricebook_id ' AND ecmproduct_id=' $id ' AND deleted='0' " ));
$p [ 'price_start' ] = $pr [ 'price' ];
$p [ 'recipient_code' ] = $pr [ 'recipient_code' ];
}
if ( ! $p [ 'price_start' ] || floatval ( $p [ 'price_start' ]) == 0 ) {
//try price from default prices
$pr = $db -> fetchByAssoc ( $db -> query ( " SELECT pp.price FROM ecmprices_ecmproducts AS pp INNER JOIN ecmprices AS p ON pp.ecmprice_id=p.id INNER JOIN accounts AS a ON p.id=a.ecmprice_id WHERE a.id=' $account_id ' AND pp.ecmproduct_id=' $id ' " ));
$p [ 'price_start' ] = $pr [ 'price' ];
}
$a = new Account ();
$a -> retrieve ( $account_id );
if ( $language == 'en_us' ) {
$r = $db -> fetchByAssoc ( $db -> query ( " SELECT short_description FROM ecmproduct_language WHERE ecmproduct_id=' $id ' AND language='en' " ));
$p [ 'name' ] = htmlspecialchars_decode ( $r [ 'short_description' ]);
$lists = return_app_list_strings_language ( $language );
$p [ 'unit_name' ] = $lists [ 'ecmproducts_unit_dom' ][ $p [ 'unit_id' ]];
$p [ 'unit_precision' ] = $lists [ 'ecmproducts_unit_dom_precision' ][ $p [ 'unit_id' ]];
unset ( $lists );
}
echo json_encode ( $p );
return ;
}
function getItems ( $record ) {
$of = new EcmSale ();
$of -> retrieve ( $record );
$pl = $of -> getPositionList ( true );
unset ( $of );
echo json_encode ( $pl );
return ;
}
function getItemsFromSale ( $record ) {
$s = new EcmQuote ();
$s -> retrieve ( $record );
$pl = $s -> getPositionList ( true );
unset ( $s );
echo json_encode ( $pl );
return ;
}
function getCategoriesList () {
$db = $GLOBALS [ 'db' ];
$res = $db -> query ( " SELECT id, name FROM ecmproductcategories WHERE deleted='0' " );
$result = array ();
while ( $row = $db -> fetchByAssoc ( $res )) {
$tmp = array ();
$tmp [ 'id' ] = $row [ 'id' ];
$tmp [ 'name' ] = $row [ 'name' ];
$result [] = $tmp ;
}
echo json_encode ( $result );
return ;
}
function getTranslation ( $product_id , $language , $unit_id ) {
$db = $GLOBALS [ 'db' ];
$result = array ();
if ( $language == 'en_us' ) {
$r = $db -> fetchByAssoc ( $db -> query ( " SELECT short_description FROM ecmproduct_language WHERE ecmproduct_id=' $product_id ' AND language='en' " ));
$result [ 'name' ] = htmlspecialchars_decode ( $r [ 'short_description' ]);
} else if ( $language == 'pl_pl' ) {
$p = new EcmProduct ();
$p -> retrieve ( $product_id );
$result [ 'name' ] = htmlspecialchars_decode ( $p -> name );
unset ( $p );
}
$lists = return_app_list_strings_language ( $language );
$result [ 'unit_name' ] = $lists [ 'ecmproducts_unit_dom' ][ $unit_id ];
unset ( $lists );
echo json_encode ( $result );
return ;
}
function getPricesInfo ( $product_id , $pricebook_id , $account_id ) {
$db = $GLOBALS [ 'db' ];
$result = array ();
if ( $pricebook_id && $pricebook_id != '' ) {
//try get price from pricebook
$res = $db -> fetchByAssoc ( $db -> query ( " SELECT price FROM ecmpricebooks_ecmproducts WHERE ecmpricebook_id=' $pricebook_id ' AND ecmproduct_id=' $product_id ' AND deleted='0' " ));
if ( $res [ 'price' ] && $res [ 'price' ] != '' && $res [ 'price' ] != 0 ) {
$tmp = array ();
$tmp [ 'name' ] = 'pricebook' ;
$tmp [ 'price' ] = $res [ 'price' ];
$result [] = $tmp ;
}
}
//get from ecmprices
$res = $db -> query ( " SELECT p.name, pp.price FROM ecmprices_ecmproducts AS pp
INNER JOIN ecmprices AS p
ON p . id = pp . ecmprice_id
WHERE
pp . ecmproduct_id = '$product_id'
AND pp . price != 0 " );
while ( $row = $db -> fetchByAssoc ( $res )) {
$tmp = array ();
$tmp [ 'name' ] = $row [ 'name' ];
$tmp [ 'price' ] = $row [ 'price' ];
$result [] = $tmp ;
}
//get last invoice price
if ( $account_id && $account_id != '' ) {
$res = $db -> fetchByAssoc ( $db -> query ( " SELECT ii.subprice, i.id, i.document_no FROM ecminvoiceoutitems AS ii
INNER JOIN ecminvoiceouts AS i
ON ii . ecminvoiceout_id = i . id
WHERE ii . ecmproduct_id = '$product_id'
AND i . parent_id = '$account_id'
AND ii . deleted = '0'
AND i . deleted = '0'
AND i . canceled = '0'
ORDER BY i . register_date DESC
LIMIT 0 , 1 " ));
if ( $res && $res [ 'subprice' ] != '' ) {
$tmp = array ();
$tmp [ 'name' ] = $res [ 'document_no' ];
$tmp [ 'price' ] = $res [ 'subprice' ];
$result [] = $tmp ;
}
}
echo json_encode ( $result );
return ;
}
/*
function getStockArray ( $product_id ) {
$o = new EcmStockOperation ();
echo json_encode ( $o -> getStockArray ( $product_id ));
unset ( $o );
return ;
}
function getPurchaseArray ( $product_id ) {
$o = new EcmStockOperation ();
echo json_encode ( $o -> getPurchaseArray ( $product_id ));
unset ( $o );
return ;
}