<?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");
	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;
}
	