<?php
if (! defined ( 'sugarEntry' ) || ! sugarEntry)
	die ( 'Not A Valid Entry Point' );
	
	/*
 * *************************************************************************** The contents of this file are subject to the RECIPROCAL PUBLIC LICENSE Version 1.1 ("License"); You may not use this file except in compliance with the License. You may obtain a copy of the License at http://opensource.org/licenses/rpl.php. Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. You may: a) Use and distribute this code exactly as you received without payment or a royalty or other fee. b) Create extensions for this code, provided that you make the extensions publicly available and document your modifications clearly. c) Charge for a fee for warranty or support or for accepting liability obligations for your customers. You may NOT: a) Charge for the use of the original code or extensions, including in electronic distribution models, such as ASP (Application Service Provider). b) Charge for the original source code or your extensions other than a nominal fee to cover distribution costs where such distribution involves PHYSICAL media. c) Modify or delete any pre-existing copyright notices, change notices, or License text in the Licensed Software d) Assert any patent claims against the Licensor or Contributors, or which would in any way restrict the ability of any third party to use the Licensed Software. You must: a) Document any modifications you make to this code including the nature of the change, the authors of the change, and the date of the change. b) Make the source code for any extensions you deploy available via an Electronic Distribution Mechanism such as FTP or HTTP download. c) Notify the licensor of the availability of source code to your extensions and include instructions on how to acquire the source code and updates. d) Grant Licensor a world-wide, non-exclusive, royalty-free license to use, reproduce, perform, modify, sublicense, and distribute your extensions. The Original Code is: CommuniCore Olavo Farias 2006-04-7 olavo.farias@gmail.com The Initial Developer of the Original Code is CommuniCore. Portions created by CommuniCore are Copyright (C) 2005 CommuniCore Ltda All Rights Reserved. ******************************************************************************
 */

require_once ('data/SugarBean.php');
include_once ("modules/EcmPaymentStates/helper.php");

require_once ('include/utils.php');
class EcmInvoiceOutOld 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;
	// TABLE COLUMNS
	var $currency_id;
	var $number;
	var $document_no;
	var $parent_type;
	var $parent_name;
	var $parent_id;
	var $type;
	var $ecminvoiceoutold_id;
	var $ecminvoiceoutold_name;
	var $status;
	var $register_date;
	var $sell_date;
	var $payment_date;
	var $parent_address_street;
	var $parent_address_city;
	var $parent_address_postalcode;
	var $parent_address_country;
	var $subtotal;
	var $total;
	var $discount;
	var $to_vatid;
	var $to_nip;
	var $ecmlanguage;
	var $to_is_vat_free;
	var $header_text;
	var $footer_text;
	var $ads_text;
	var $template_id;
	var $template_name;
	var $email_id;
	var $wz_id;
	var $order_no;
	var $supplier_code;
	var $delivery_place;
	var $ecmpaymentcondition_id;
	var $ecmpaymentcondition_name;
	var $ecmpaymentcondition_text;
	var $currency_symbol;
	var $parent_name_copy;
	var $parent_contact_name;
	var $parent_contact_title;
	var $template;
	var $pdf;
	var $position_list;
	var $parser;
	var $account;
	var $contact;
	var $user;
	var $mfp;
	var $ecminvoiceoutold;
	var $correct_reason;
	var $so_id;
	// 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 = "EcmInvoiceOutOlds";
	var $table_name = "ecminvoiceoutolds";
	var $object_name = "EcmInvoiceOutOld";
	// 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',
			'email_id' => 'emails' 
	);
	function EcmInvoiceOutOld() {
		parent::SugarBean ();
		
		$this->setupCustomFields ( 'EcmInvoiceOutOlds' );
		
		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 .= "ecminvoiceoutolds.*

                  ,users.user_name as assigned_user_name";
		
		if ($custom_join) {
			
			$query .= $custom_join ['select'];
		}
		
		$query .= " FROM ecminvoiceoutolds

                   LEFT JOIN users

                   ON ecminvoiceoutolds.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 ecminvoiceoutolds.name";
		
		return $query;
	}
	function create_export_query($order_by, $where) {
		$custom_join = $this->custom_fields->getJOIN ();
		
		$query = "SELECT

                      ecminvoiceoutolds.*,

                      users.user_name assigned_user_name";
		
		if ($custom_join) {
			
			$query .= $custom_join ['select'];
		}
		
		$query .= " FROM ecminvoiceoutolds ";
		
		$query .= " LEFT JOIN users

                  ON ecminvoiceoutolds.assigned_user_id=users.id";
		
		if ($custom_join) {
			
			$query .= $custom_join ['join'];
		}
		
		$query .= "";
		
		$where_auto = " ecminvoiceoutolds.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 ecminvoiceoutolds.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 );
		
		$result = $this->db->query ( "SELECT status FROM ecminvoiceoutolds WHERE id='$this->id'" );
		
		if ($result)
			$row = $this->db->fetchByAssoc ( $result );
		if (is_resource ( $result )) {
			$row = $this->db->fetchByAssoc ( $result );
			if ($row) {
				$this->status = $row ['status'];
			}
		}
		
		
		if ($this->canceled == '1' && $_REQUEST ['action'] == 'DetailView')
			$this->document_no .= '&nbsp<img src="modules/EcmInvoiceOutOlds/images/cancel.png" width="13"/>';
	}
	function getEcmSalesSubPanel() {
		$bean = $GLOBALS ['app']->controller->bean;
		$query = "SELECT sale.id as id, sale.status as status, sale.document_no as document_no, sale.name as name, sale.total_brutto as total, sale.register_date as register_date FROM ecminvoiceoutolds as iv 
	inner join ecmstockdocouts as wz on wz.id = iv.wz_id
	inner join ecmsales as sale on sale.id = wz.ecmsale_id
	WHERE iv.id='" . $this->id . "'";
		$result = $GLOBALS ['db']->query ( $query );
		$row = $GLOBALS ['db']->fetchByAssoc ( $result );
		$the_array ['id'] = $row ['id'];
		$the_array ['status'] = $row ['status'];
		$the_array ['document_no'] = '<a href>' . $row ['document_no'] . '</a>';
		$the_array ['name'] = $row ['name'];
		$the_array ['total2'] = $row ['total'];
		$the_array ['register_date'] = $row ['register_date'];
		
		return $query;
	}
	function getEcmStockDocOutsSubPanel() {
		$bean = $GLOBALS ['app']->controller->bean;
		$query = "SELECT wz.id as id, wz.status as status, wz.document_no as document_no, wz.name as name, wz.total as total, wz.register_date as register_date FROM crm.ecmstockdocouts as wz
inner join crm.ecminvoiceoutolds as inv ON wz.id=inv.wz_id where inv.id='" . $this->id . "'";
		$result = $GLOBALS ['db']->query ( $query );
		$row = $GLOBALS ['db']->fetchByAssoc ( $result );
		$the_array ['id'] = $row ['id'];
		$the_array ['status'] = $row ['status'];
		$the_array ['document_no'] = '<a href>' . $row ['document_no'] . '</a>';
		$the_array ['name'] = $row ['name'];
		$the_array ['total2'] = $row ['total'];
		$the_array ['register_date'] = $row ['register_date'];
		
		return $query;
	}
	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, 'EcmInvoiceOutOlds' );
		
		$the_array = parent::get_list_view_data ();
		
		// 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);
		// $the_array['STATUS_IMG'] = "<img border='0' src='modules/EcmInvoiceOutOlds/images/$this->status.gif' >";
		$cc = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "SELECT canceled FROM ecminvoiceoutolds WHERE id='" . $this->id . "'" ) );
		$the_array ['STATUS'] = EcmInvoiceOutOld::CreateImgStatus ( $this->id, $this->status, $cc ['canceled'] );
		global $current_user;
		$the_array ['TOTAL'] = $this->total;
		/*
		 * $the_array['PDF_URL'] = '<img border="0" id="sendemail_'.$this->id.'" src="modules/EcmInvoiceOutOlds/images/send_email_enabled.gif" title="'.translate('LBL_SENDEMAIL_BUTTON','EcmInvoiceOutOlds').'" onClick="'.$this->createSendEmailLink().'" style="cursor:pointer;" />&nbsp;'; $the_array['PDF_URL'] .= '<img border="0" src="modules/EcmInvoiceOutOlds/images/pdf.gif" title="'.translate('LBL_LIST_PREVIEW_PDF','EcmInvoiceOutOlds').'" onClick="EcmPreviewPDF(\'index.php?module=EcmInvoiceOutOlds&action=previewPDF&method=I&record='.$this->id.'&to_pdf=1\',{zoom:75,toolbar:1});" style="cursor:pointer" />&nbsp;'; $the_array['PDF_URL'] .= '<img border="0" src="modules/EcmInvoiceOutOlds/images/download_enabled.gif" title="'.translate('LBL_LIST_DOWNLOAD_PDF','EcmInvoiceOutOlds').'" onClick="window.location=\'index.php?module=EcmInvoiceOutOlds&action=previewPDF&method=D&record='.$this->id.'&to_pdf=1\';" style="cursor:pointer"/>&nbsp;'; if($_REQUEST['module'] != "Home" && $_REQUEST['module'] != "EcmInvoiceOutOlds") $the_array['PDF_URL'] .= '<img border="0" id="edit_'.$this->id.'" src="modules/EcmInvoiceOutOlds/images/edit_inline_enabled.gif" title="'.$app_strings['LBL_EDIT_BUTTON'].'" onClick="javascript:window.location=\'index.php?module=EcmInvoiceOutOlds&action=EditView&record='.$this->id.'\';" style="cursor:pointer;" />';
		 */
		$this->retrieve ( $this->id );
		$the_array ['OPTIONS'] = $this->ListIconsView ();
		
		$total = 0;
		if ($_REQUEST ['record'] && $_REQUEST ['module'] == "EcmProducts") {
			$rp = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "select p.subprice as subprice,p.quantity as quantity from 
ecminvoiceoutolditems as p 
where p.ecmproduct_id='" . $_REQUEST ['record'] . "'
 and p.ecminvoiceoutold_id='" . $this->id . "' 
and p.deleted='0'" ) );
			$the_array ['SUBPRICE'] = number_format ( $rp ['subprice'], 2, ",", "." );
			$the_array ['QUANTITY'] = number_format ( $rp ['quantity'], 2, ",", "." );
			$the_array ['WARTOSC'] = number_format ( ($rp ['quantity'] * $rp ['subprice']), 2, ",", "." );
		}
		$db = $GLOBALS ['db'];
		
		if ((isset ( $this->currency_value )) && ($this->currency_value != 0))
			$the_array ['SUBTOTAL'] = $this->subtotal * $this->currency_value;
		else
			$the_array ['SUBTOTAL'] = $this->subtotal;
			
			/*
		 * if ($this->ecminvoiceoutold_id) {
		 * $w = $db->query ( "select price,ecmvat_value,quantity,ecminvoiceoutolditem_id from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "'" );
		 * while ( $r = $db->fetchByAssoc ( $w ) ) {
		 * $total += $r ['price'] * $r ['quantity'] + round ( $r ['price'] * $r ['quantity'] * $r ['ecmvat_value'] / 100, 2 );
		 * $rr = $db->fetchByAssoc ( $db->query ( "select price,quantity,ecmvat_value from ecminvoiceoutolditems where id='" . $r ['ecminvoiceoutolditem_id'] . "'" ) );
		 * $total -= $rr ['price'] * $rr ['quantity'] + round ( $rr ['price'] * $rr ['quantity'] * $rr ['ecmvat_value'] / 100, 2 );
		 * }
		 * } else {
		 * $w = $db->query ( "select price,ecmvat_value,quantity,ecminvoiceoutolditem_id from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "'" );
		 * while ( $r = $db->fetchByAssoc ( $w ) ) {
		 * $total += ($r ['price'] * $r ['quantity']) + round ( ($r ['price'] * $r ['quantity'] * $r ['ecmvat_value'] / 100), 2 );
		 * }
		 * }
		 */
		$w = $db->query ( "select document_no, id from ecminvoiceoutolds where ecminvoiceoutold_id='" . $this->id . "' and deleted='0'" );
		while ( $r = $db->fetchByAssoc ( $w ) ) {
			$invs [] = "<a href='index.php?module=EcmInvoiceOutOlds&return_module=EcmInvoiceOutOlds&action=DetailView&record=" . $r ['id'] . "'/a>" . $r ['document_no'] . "</a>";
		}
		$the_array ['CORRECT'] = @implode ( ", ", $invs );
		
		$the_array ['TOTAL'] = $this->total;
		
		$the_array ['PAID'] = "-";
		
		return $the_array;
	}
	function getEmailTemplateId($what) {
		$GLOBALS ['db'] = new MysqlManager ();
		$GLOBALS ['db']->connect ();
		
		$query = "SELECT `id` FROM `email_templates` WHERE `name` LIKE 'InvoiceTemplate" . $what . "%' LIMIT 1";
		$result = $GLOBALS ['db']->query ( $query );
		if (is_resource ( $result )) {
			$row = $GLOBALS ['db']->fetchByAssoc ( $result );
			if (is_array ( $row )) {
				return $row ['id'];
			}
		}
		return '';
	}
	function createSendEmailLink() {
		require_once ('modules/EcmEmails/EcmEmailsDataCreator.php');
		$eedc = new EcmEmailsDataCreator ();
		if (isset ( $this->contact_id ) && $this->contact_id != '') {
			$eedc->addToModule ( 'Contacts', $this->contact_id );
			$eedc->setEmailTemplateId ( $this->getEmailTemplateId ( "Contact" ) );
		} else {
			$eedc->addToModule ( 'Accounts', $this->parent_id );
			$eedc->setEmailTemplateId ( $this->getEmailTemplateId ( "Account" ) );
		}
		
		global $current_user;
		
		$eedc->setFromModule ( 'Users', $current_user->id );
		$eedc->addAssigned ( 'Accounts', $this->parent_id );
		$eedc->addAssigned ( 'Contacts', $this->contact_id );
		$eedc->addAssigned ( 'EcmDocumentTemplates', $this->template_id );
		$eedc->addAssigned ( 'Users', '' );
		$eedc->addAssigned ( $this->module_dir, $this->id );
		
		$eedc->addAttachmentBySugar ( $this->createPdfFileName (), $this->module_dir, "previewPDF", array (
				"record" => $this->id,
				"method" => "S",
				"to_pdf" => "1" 
		), array (
				"method" => "I" 
		) );
		return $eedc->createJavaScriptAction ();
	}
	static function CreateImgStatus($id, $status, $canceled = 0) {
		global $app_list_strings;
		if ($canceled == 1)
			return '<span id="statusListEcmInvoiceOutOld_' . $id . '" ><img src="modules/EcmInvoiceOutOlds/images/cancel.png" width="13"/></span>';
			// else
		return '<span id="statusListEcmInvoiceOutOld_' . $id . '" ><img src="modules/EcmInvoiceOutOlds/images/' . $status . '.gif" title="' . $app_list_strings ['ecminvoiceoutolds_status_dom'] [$status] . '" /></span>';
	}
	function createPdfFileName($format = true) {
		$arr1 = array (
				'\\',
				'/',
				':',
				'*',
				'?',
				'"',
				'<',
				'>',
				'|',
				' ' 
		);
		
		$arr2 = array (
				'',
				'',
				'',
				'',
				'',
				'\'',
				'[',
				']',
				'',
				'_' 
		);
		
		$tmp = $this->document_no;
		
		if ($format) {
			
			if ($this->type == "normal")
				$tmp = str_replace ( $arr1, $arr2, 'Invoice_' . $tmp . '.pdf' );
			else if ($this->type == "correct")
				$tmp = str_replace ( $arr1, $arr2, 'Correct_' . $tmp . '__to_Invoice_' . $this->ecminvoiceoutold->document_no . '.pdf' );
		} else
			$tmp = 'InvoiceOut ' . $tmp . '.pdf';
			
			// $mod = return_module_language($current_language, 'EcmInvoiceOutOlds');
			// return urlencode(
			// return $mod['LBL_PDF_INVOICE_FILE_NAME'].$tmp.'.pdf';//);
		
		return $tmp; // );
	}
	
	/**
	 * BUILDS A GENERIC SEARCH BASED ON THE QUERY STRING USING OR.
	 *
	 * DO NOT INCLUDE ANY $THIS-> BECAUSE THIS IS CALLED ON WITHOUT HAVING THE CLASS INSTANTIATED.
	 */
	function build_generic_where_clause($the_query_string) {
		$where_clauses = array ();
		
		$the_query_string = PearDatabase::invoiceout ( from_html ( $the_query_string ) );
		
		array_push ( $where_clauses, "ecminvoiceoutolds.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 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>';
		
		return parent::create_new_list_query ( $order_by, $where, $filter, $params, $show_deleted, $join_type, $return_array, $parentbean, $singleSelect );
	}
	function generateOptions($icon, $module = '', $action = '') {
		global $app_strings, $mod_strings;
		
		$tmp = '';
		if ($icon == "desc") {
			// $tmp=Hint($this->id,$this->description);
		}
		if ($icon == 'pdf') {
			
			// pdf
			if ($this->ACLAccess ( 'pdf_toolbar' )) {
				$tmp = '<img border="0" src="modules/' . $this->module_dir . '/images/pdf.gif" title="' . translate ( 'LBL_LIST_PREVIEW_PDF', $this->module_dir ) . '" onClick="EcmPreviewPDF(\'index.php?module=' . $this->module_dir . '&action=previewPDF&method=I&record=' . $this->id . '&to_pdf=1\',{zoom:75,toolbar:1});" style="cursor:pointer" />';
			} else {
				$tmp = '<img border="0" src="modules/' . $this->module_dir . '/images/pdf.gif" title="' . translate ( 'LBL_LIST_PREVIEW_PDF', $this->module_dir ) . '" onClick="EcmPreviewPDF(\'index.php?module=' . $this->module_dir . '&action=previewPDF&method=I&record=' . $this->id . '&to_pdf=1\',{zoom:75,toolbar:0});" style="cursor:pointer" />';
			}
		} else if ($icon == 'download') {
			
			// download
			if ($this->ACLAccess ( 'pdf_toolbar' )) {
				$tmp = '<img border="0" src="modules/' . $this->module_dir . '/images/download_enabled.gif" title="' . translate ( 'LBL_LIST_DOWNLOAD_PDF', $this->module_dir ) . '" onClick="window.location=\'index.php?module=' . $this->module_dir . '&action=previewPDF&method=D&record=' . $this->id . '&to_pdf=1\';" style="cursor:pointer"/>';
			} else {
				$tmp = '<img border="0" src="modules/' . $this->module_dir . '/images/download_disabled.gif" title="' . translate ( 'LBL_LIST_DOWNLOAD_PDF', $this->module_dir ) . '"/>';
			}
		} else 

		if ($icon == 'duplicate') {
			
			// duplicate
			$tmp = '<a href="index.php?module=' . $this->module_dir . '&action=EditView&record=' . $this->id . '&isDuplicate=true"><img border="0" src="modules/' . $this->module_dir . '/images/duplicate.jpg" title="' . translate ( 'LBL_LIST_DUPLICATE', $this->module_dir ) . '" /></a>';
		} else if ($icon == 'edit') {
			
			// edit
			if ($this->ACLAccess ( 'edit' ) && $this->status == "registered")
				$tmp = '<img border="0" id="edit_' . $this->id . '" src="modules/' . $this->module_dir . '/images/edit_inline_enabled.gif" title="' . $app_strings ['LBL_EDIT_BUTTON'] . '" onClick="javascript:window.location=\'index.php?module=' . $this->module_dir . '&action=EditView&record=' . $this->id . '&return_module=' . $_REQUEST ['module'] . '&return_action=' . $_REQUEST ['action'] . '&return_id=' . $_REQUEST ['record'] . '\';" style="cursor:pointer;" />';
			else
				$tmp = '<img border="0" id="edit_' . $this->id . '" src="modules/' . $this->module_dir . '/images/edit_inline_disabled.gif" title="' . $app_strings ['LBL_EDIT_BUTTON'] . '" />';
		} else if ($icon == 'send_email') {
			// send_email
			if ($this->status == "accepted")
				$tmp = '<img border="0" id="sendemail_' . $this->id . '" src="modules/' . $this->module_dir . '/images/send_email_enabled.gif" title="' . translate ( 'LBL_SENDEMAIL_BUTTON', $this->module_dir ) . '" onClick="' . $this->createSendEmailLink () . '" style="cursor:pointer;" />';
			else
				$tmp = '<img border="0" id="sendemail_' . $this->id . '" src="modules/' . $this->module_dir . '/images/send_email_disabled.gif" title="' . translate ( 'LBL_SENDEMAIL_BUTTON', $this->module_dir ) . '" style="cursor:pointer;" />';
		} else if ($icon == 'correct') {
			if ($this->status != "registered")
				$tmp = '<a href="index.php?module=' . $this->module_dir . '&offset=1&return_module=' . $this->module_dir . '&action=EditView&return_action=index&record=' . $this->id . '&isCorrect=true"><img border="0" src="modules/' . $this->module_dir . '/images/correct.jpg" title="' . $mod_strings ['LBL_CORRECT_TITLE'] . '" /></a>';
			else
				$tmp = '<img border="0" src="modules/' . $this->module_dir . '/images/correct_disabled.jpg" title="' . $mod_strings ['LBL_CORRECT_TITLE'] . '" style="cursor:pointer;" />';
		} else if ($icon == 'view') {
			$tmp = '<img border="0" src="themes/Sugar/images/view_inline.gif" style="cursor: pointer;" onClick="javascript:window.location=\'index.php?module=' . $this->module_dir . '&action=DetailView&record=' . $this->id . '&return_module=' . $_REQUEST ['module'] . '&return_action=' . $_REQUEST ['action'] . '&return_id=' . $_REQUEST ['record'] . '\';" title="' . $mod_strings ['LBL_DETAIL_BUTTON'] . '" />';
		}
		
		return $tmp;
	}
	function ListIconsView() {
		if (isset ( $_REQUEST ['module'] ) && $_REQUEST ['module'] != '' && isset ( $_REQUEST ['action'] )) {
			$module = $_REQUEST ['module'];
			$action = $_REQUEST ['action'];
			
			$glue = "&nbsp;";
			$viewIcons = array ();
			if ($module == $this->module_dir) { // This module, action ListView or index
				$viewIcons = array (
						'desc',
						'send_email',
						'download',
						'correct',
						'pdf',
						'duplicate',
						'edit' 
				);
				if ($this->status == "registered")
					$viewIcons = array (
							'desc',
							'send_email',
							'download',
							'correct',
							'pdf',
							'duplicate',
							'edit' 
					);
			} else if ($module == "Home") { // This is for a Home module for Dashlets
				$glue = "&nbsp;";
				$viewIcons = array (
						'send_email',
						'download',
						'correct',
						'pdf',
						'duplicate',
						'edit' 
				);
				if ($this->status == "registered")
					$viewIcons = array (
							'send_email',
							'download',
							'correct',
							'pdf',
							'duplicate',
							'edit' 
					);
			} else { // this is for subpanels, popups
				$glue = "&nbsp;";
				$viewIcons = array (
						'send_email',
						'download',
						'correct',
						'pdf',
						'duplicate',
						'edit' 
				);
				if ($this->status == "registered")
					$viewIcons = array (
							'send_email',
							'download',
							'correct',
							'pdf',
							'duplicate',
							'edit' 
					);
			}
			
			$arr = array ();
			foreach ( $viewIcons as $value ) {
				$tmp = $this->generateOptions ( $value );
				if ($tmp != '')
					$arr [] = $tmp;
			}
			
			return '<span id="optionsList' . $this->object_name . '_' . $this->id . '">' . implode ( $glue, $arr ) . '<script language="javascript">var List' . $this->module_dir . 'Module="' . $module . '"; var List' . $this->module_dir . 'Action="' . $action . '";</script></span>';
		}
		return '';
	}
	function save($check_notify = FALSE) {
		global $current_user;
		$db = $GLOBALS ['db'];
		
		if (($this->fetched_row && $this->fetched_row ['template_id'] != $this->template_id) || (empty ( $this->id ) || $this->id == '')) {
			if ($this->type == "normal") {
				$this->number = $this->generateNumber ();
				$this->document_no = 'FV ' . $this->formatNumber ();
			} else {
				$this->number = $this->generateNumberCorrect ();
				$this->document_no = 'FVKOR ' . $this->formatNumberCorrect ();
			}
		}
		
		$this->status = 'accepted';
		
		$this->ecmpaymentcondition_text = EcmInvoiceOutOld::getTranslation ( 'EcmPaymentConditions', $this->ecmpaymentcondition_id, $this->ecmlanguage );
		
		$this->ecmdeliverycondition_text = EcmInvoiceOutOld::getTranslation ( 'EcmDeliveryConditions', $this->ecmdeliverycondition_id, $this->ecmlanguage );
		
		$return_id = parent::save ( $check_notify );
		
		$this->savePositions ( $return_id );
		
		// delete document temp reservations
		include_once ("modules/EcmStockOperations/EcmStockOperation.php");
		$op = new EcmStockOperation ();
		$op->removeDocumentReservations ( $_REQUEST ['temp_id'] );
		
		$rdsc = $GLOBALS [db]->fetchByAssoc ( $GLOBALS [db]->query ( "select discount,type from ecminvoiceoutolds where id='" . $return_id . "'" ) );
		
		$subtotal = $this->getInvoiceSubtotal ();
		$total = $this->getInvoiceTotal ();
		$db->query ( "update ecminvoiceoutolds set total=$total where id='" . $return_id . "'" );
		$db->query ( "update ecminvoiceoutolds set subtotal=$subtotal where id='" . $return_id . "'" );
		// $total=$this->pdf_total;
		
		$res_count = $db->query ( "select id from ecmtransactions where record_id='" . $this->id . "' and deleted='0'" );
		
		$count = $res_count->num_rows;
		
		$a = new Account ();
		$a->retrieve ( $this->parent_id );
		
		if ($a->parent_id == '1249') {
			$t_parent_id = '1249';
			$t_parent_name = 'Media Saturn Holding Polska Sp. z o.o.';
		} else {
			$t_parent_id = $this->parent_id;
			$t_parent_name = $this->parent_name;
		}
		
		unset ( $a );
		
		if ($count == 0) {
			
			$GLOBALS ['db']->query ( "INSERT INTO ecmtransactions(id,name,date_entered,date_modified,modified_user_id,created_by,description,deleted,assigned_user_id,value,parent_name,parent_id,payment_date,type,paid,register_date,record_id,record_type,currency_id,currency_value)VALUES('" . create_guid () . "','" . $this->document_no . "','" . date ( "Y-m-d H:i:s" ) . "','" . date ( "Y-m-d H:i:s" ) . "','" . $_SESSION ['authenticated_user_id'] . "','" . $_SESSION ['authenticated_user_id'] . "','" . $this->description . "','" . $this->canceled . "','" . $this->assigned_user_id . "','" . $total . "','" . $t_parent_name . "','" . $t_parent_id . "','" . $this->payment_date . "','0','" . $this->paid . "','" . $this->register_date . "','" . $this->id . "','EcmInvoiceOutOlds','" . $this->currency_id . "','" . $this->currency_value . "')" );
		} else {
			$db->query ( "update ecmtransactions set value=$total where record_id='" . $this->id . "'" );
		}
		
		$this->CalculatePurchasePrices ();
		
		return $return_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 .= ");";
		return $q;
	}
	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;
		
		$t_position_list = $position_list;
		
		for($i = 0; $i < count ( $t_position_list ); $i ++) {
			if (mysql_num_rows ( $GLOBALS [db]->query ( "select id from ecminvoiceoutolditems where ecmproduct_id='" . $t_position_list [$i] ['id'] . "' and ecminvoiceoutold_id='" . $this->ecminvoiceoutold_id . "' and price='" . $t_position_list [$i] ['price'] . "' and quantity='" . $t_position_list [$i] ['quantity'] . "' and deleted='0'" ) ) > 0) {
				unset ( $position_list [$i] );
			}
		}
		
		$m = 0;
		
		if (count ( $position_list ) > 0) {
			foreach ( $position_list as $pr ) {
				$plist [$m] = $pr;
				$m ++;
			}
			$position_list = $plist;
		}
		
		for($i = 0; $i < count ( $position_list ); $i ++) {
			if ($position_list [$i] ['name'] == '')
				continue;
			
			$p = $position_list [$i];
			
			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;
			}
			
			$lv = return_app_list_strings_language ( $this->ecmlanguage );
			
			$arr = array (
					'id' => create_guid (),
					'date_entered' => array (
							'NOW()',
							'' 
					),
					'date_modified' => array (
							'NOW()',
							'' 
					),
					'modified_user_id' => $current_user->id,
					'assigned_user_id' => $current_user->id,
					'created_by' => $current_user->id,
					'deleted' => '0',
					strtolower ( $this->object_name ) . '_id' => $id,
					'ecmproduct_id' => $p ['id'],
					'position' => $position,
					'code' => $p ['code'],
					'name' => $p ['name'],
					'quantity' => ((empty ( $p ['quantity'] ) || $p ['quantity'] == '') ? 0 : $p ['quantity']),
					'startprice' => $p ['startprice'],
					'subprice' => $p ['subprice'],
					'price' => $p ['price'],
					'purchase_price' => $purchase_price,
					'discount' => ((empty ( $p ['discount'] ) || $p ['discount'] == '') ? 0 : $p ['discount']),
					'subtotal' => $p ['subtotal'],
					'total' => $p ['total'],
					'dd_unit_id' => $p ['unit_id'],
					'dd_unit_name' => $lv ['ecmproducts_unit_dom'] [$p ['unit_id']],
					'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'],
					'tax_code' => $p ['tax_code'],
					'recipient_code' => $p ['recipient_code'],
					'netto_weight' => floatval ( str_replace ( ",", ".", str_replace ( ".", "", $p ['netto_weight'] ) ) ),
					'brutto_weight' => floatval ( str_replace ( ",", ".", str_replace ( ".", "", $p ['brutto_weight'] ) ) ),
					'ecmstockdocout_id' => $p ['ecmstockdocout_id'],
					'product_type' => $p ['type'],
					'parent_doc_id' => $p ['parent_doc_id'],
					'parent_doc_type' => $p ['parent_doc_type'],
					'parent_doc_item_id' => $p ['parent_doc_item_id'],
					'old_ecminvoiceoutolditem_id' => $p ['old_ecminvoiceoutolditem_id'] 
			);
			
			if ($p ['parent_doc_type'] == 'EcmStockDocOut')
				$this->wz_id = $p ['parent_doc_id'];
			
			if ($p ['item_id'] && $p ['item_id'] != "undefined")
				$arr ['ecminvoiceoutolditem_id'] = $p ['item_id'];
			
			$query = $this->constructInsertQuery ( $arr );
			
			$this->db->query ( $query );
			
			/*
			 * echo '<pre>P:' . var_export($p, true) . PHP_EOL . PHP_EOL; echo '<pre>A:' . var_export($arr, true) . PHP_EOL . PHP_EOL; continue; exit;
			 */
			
			if ($p ['parent_doc_type'] == "EcmStockDocOuts") {
				// add fv-wz relation
				$GLOBALS ['db']->query ( "INSERT INTO ecminvoiceoutolds_ecmstockdocouts VALUES ('" . create_guid () . "','" . date ( "Y-m-d H:i:s" ) . "','0','" . $this->id . "', '" . $p ['ecmstockdocout_id'] . "')" );
			} else {
				// no, stock operation
				// product must be article
				
				/*
				 * echo 'P:' . var_export($p, true) . PHP_EOL; echo 'ID:' . $id . PHP_EOL; echo 'ARR:' . var_export($arr, true) . PHP_EOL; exit;
				 */
				
				if ($p ['type'] == 'article') {
					$this->addProducts ( $p, $id, $arr ['id'] );
					
					if ($p ['parent_doc_type'] == "EcmSales") {
						// remove Sale Product reservation
						include_once ("modules/EcmStockOperations/EcmStockOperation.php");
						
						$op = new EcmStockOperation ();
						$op->removeSaleProductReservations ( $p ['parent_doc_item_id'] );
						
						// add relation
						$GLOBALS ['db']->query ( "INSERT INTO ecminvoiceoutolds_ecmsales VALUES ('" . create_guid () . "','" . date ( "Y-m-d H:i:s" ) . "','0','" . $this->id . "', '" . $p ['parent_doc_id'] . "')" );
					}
				}
			}
			
			$position ++;
		}
	}
	function deleteProductFromStockIn($stock_in_id, $product_id, $qty) {
		$z = "update ecmstockoperations set quantity=quantity-" . $qty . " where id='" . $stock_in_id . "' and product_id='" . $product_id . "' and deleted=0";
		$GLOBALS ['db']->query ( $z );
	}
	function addProductToStockOut($stock_in_id, $product_id, $quantity, $price, $date, $id, $stock_id, $itemid) {
		require_once ("modules/EcmStockOperations/EcmStockOperation.php");
		$o = new EcmStockOperation ();
		$o->unformat_all_fields ();
		
		require_once ("modules/EcmProducts/EcmProduct.php");
		$o->product_id = $product_id;
		$p = new EcmProduct ();
		$p->retrieve ( $product_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 = $id;
		$r = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "select document_no from ecminvoiceoutolds where id='" . $id . "'" ) );
		$o->parent_name = $r ['document_no'];
		$o->parent_type = "EcmInvoiceOutOlds";
		
		$o->quantity = $quantity;
		$o->price = floatval ( $price );
		$o->in_id = $stock_in_id;
		$o->documentitem_id = $itemid;
		$o->type = 1;
		$o->save ();
		
		require_once ("modules/EcmStockStates/EcmStockState.php");
		$ss = new EcmStockState ();
		$ss->UpdateStockState ( $o->stock_id, $o->product_id );
	}
	function addProducts($p, $id, $itemid) {
		$arr = array ();
		
		$wq = "select quantity as qty,id,price from ecmstockoperations where deleted='0' and type='0' and used=0 and in_id IS NULL and stock_id='" . $this->stock_id . "' and product_id='" . $p ['id'] . "'";
		
		$w = $GLOBALS ['db']->query ( $wq );
		
		while ( $rrr = $GLOBALS ['db']->fetchByAssoc ( $w ) ) {
			$wwq = "select quantity from ecmstockoperations where in_id='" . $rrr ['id'] . "' and type='1' and in_id IS NOT NULL and stock_id='" . $this->stock_id . "' and product_id='" . $p ['id'] . "' and deleted='0'";
			
			$ww = $GLOBALS ['db']->query ( $wwq );
			
			$rqty = 0;
			while ( $rrp = $GLOBALS ['db']->fetchByAssoc ( $ww ) ) {
				$rqty += $rrp ['quantity'];
			}
			
			$qty = $rrr ['qty'] - $rqty;
			
			if ($qty > 0) {
				$arr [] = array (
						"qty" => $qty,
						"id" => $rrr ['id'],
						"price" => $rrr ['price'] 
				);
			}
		}
		
		$rr = array ();
		$used_qty = 0;
		$stop = 0;
		
		foreach ( $arr as $value ) {
			if ($p ['quantity'] - $used_qty <= $value ['qty']) {
				$rr [] = array (
						"id" => $value ['id'],
						"qty" => $p ['quantity'] - $used_qty,
						"price" => $value ['price'] 
				);
				$stop = 1;
			} else {
				$rr [] = array (
						"id" => $value ['id'],
						"qty" => $value ['qty'],
						"price" => $value ['price'] 
				);
				$used_qty += $value ['qty'];
			}
			if ($stop) {
				$stop = 0;
				break;
			}
		}
		
		$qq = 0;
		$pp = 0;
		$avg_pq = 0;
		$avg_q = 0;
		
		foreach ( $rr as $r ) {
			if (! $_REQUEST ['correct_id']) {
				$this->addProductToStockOut ( $r ['id'], $p ['id'], $r ['qty'], $r ['price'], $this->register_date, $id, $this->stock_id, $itemid );
				
				$avg_pq += $r ['qty'] * $r ['price'];
				$avg_q += $r ['qty'];
			}
		}
		
		if (! $_REQUEST ['correct_id']) {
			$GLOBALS ['db']->query ( "update ecminvoiceoutolditems set purchase_price = '" . ($avg_pq / $avg_q) . "' where id = '" . $itemid . "'" );
		}
	}
	function getPosition($position, $stockOperations = false) {
		if (! is_array ( $position ))
			return '';
		
		global $timedate;
		
		$return_array = array ();
		
		if (false == $stockOperations) {
			
			// get ENG name
			$db = $GLOBALS ['db'];
			$en = $db->fetchByAssoc ( $db->query ( "SELECT short_description FROM ecmproduct_language_en_view WHERE ecmproduct_id='" . $position ['ecmproduct_id'] . "'" ) );
			$return_array ['name_en'] = $en ['short_description'];
			
			if ($return_array ['name_en'] == '&nbsp')
				$return_array ['name_en'] = '';
			
			$return_array ['iid'] = $position ['id'];
			$return_array ['id'] = $position ['ecmproduct_id'];
			$return_array ['position'] = $position ['position'];
			$return_array ['code'] = $position ['code'];
			$return_array ['name'] = $position ['name'];
			$return_array ['quantity'] = $position ['quantity'];
			$return_array ['price'] = $position ['price'];
			$return_array ['subprice'] = $position ['subprice'];
			$return_array ['startprice'] = $position ['startprice'];
			$return_array ['discount'] = $position ['discount'];
			$return_array ['total'] = $position ['total'];
			$return_array ['subtotal'] = $position ['subtotal'];
			$return_array ['unit_id'] = $position ['dd_unit_id'];
			$return_array ['unit_name'] = $position ['dd_unit_name'];
			$return_array ['vat_id'] = $position ['ecmvat_id'];
			$return_array ['vat_name'] = $position ['ecmvat_name'];
			$return_array ['vat_value'] = $position ['ecmvat_value'];
			$return_array ['category_id'] = $position ['ecmproductcategory_id'];
			$return_array ['currency_id'] = $position ['currency_id'];
			$return_array ['currency_name'] = $position ['currency_name'];
			$return_array ['tax_code'] = $position ['tax_code'];
			$return_array ['recipient_code'] = $position ['recipient_code'];
			$return_array ['netto_weight'] = $position ['netto_weight'];
			$return_array ['brutto_weight'] = $position ['brutto_weight'];
			$return_array ['ecmstockdocout_id'] = $position ['ecmstockdocout_id'];
			$return_array ['type'] = $position ['product_type'];
			$return_array ['parent_doc_id'] = $position ['parent_doc_id'];
			$return_array ['parent_doc_type'] = $position ['parent_doc_type'];
			$return_array ['parent_doc_item_id'] = $position ['product_parent_doc_item_id'];
			$return_array ['date_entered'] = $position ['date_entered'];
			$return_array ['old_ecminvoiceoutolditem_id'] = $position ['old_ecminvoiceoutolditem_id'];
			$return_array ['old_total'] = $position ['old_total'];
			$return_array ['old_subtotal'] = $position ['old_subtotal'];
			
			// mh
			$return_array ['origin_country_code'] = $position ['origin_country_code'];
			$return_array ['product_code'] = $position ['product_code'];
			
			if ($_REQUEST ['isCorrect'] == "true") {
				$return_array ['item_id'] = $position ['id'];
				
				// get values from previous corrects
				
				$cc = $GLOBALS ['db']->fetchByAssoc ( $GLOBALS ['db']->query ( "SELECT ii.startprice, ii.subprice, ii.price, ii.quantity, ii.discount, 
						ii.ecmvat_value, ii.ecmvat_id, ii.ecmvat_name FROM ecminvoiceoutolditems as ii
						 INNER JOIN ecminvoiceoutolds AS i ON i.id=ii.ecminvoiceoutold_id WHERE i.canceled='0' and ii.ecminvoiceoutolditem_id='" . $position ['id'] . "' ORDER BY ii.date_entered DESC LIMIT 0,1" ) );
				if ($cc ['subprice']) {
					$return_array ['startprice'] = $cc ['startprice'];
					$return_array ['subprice'] = $cc ['subprice'];
					$return_array ['price'] = $cc ['price'];
					$return_array ['quantity'] = $cc ['quantity'];
					$return_array ['discount'] = $cc ['discount'];
					$return_array ['vat_value'] = $cc ['ecmvat_value'];
					$return_array ['vat_id'] = $cc ['ecmvat_id'];
					$return_array ['vat_name'] = $cc ['ecmvat_name'];
				}
			} else {
				$return_array ['item_id'] = $position ['ecminvoiceoutolditem_id'];
			}
		} else {
			
			// echo '<pre>' . var_export($position, true);
			// exit;
			
			$return_array ['iid'] = $position ['id'];
			$return_array ['id'] = $position ['product_id'];
			// $return_array['position'] = $position['position'];
			$return_array ['code'] = $position ['code'];
			$return_array ['name'] = $position ['product_name'];
			$return_array ['quantity'] = $position ['quantity'];
			$return_array ['price'] = $position ['price'];
			// $return_array['discount'] = $position['discount'];
			// $return_array['total'] = $position['total'];
			// $return_array['unit_id'] = $position['dd_unit_id'];
			$return_array ['unit_name'] = $position ['unit_name'];
			// $return_array['vat_id'] = $position['ecmvat_id'];
			// $return_array['vat_name'] = $position['ecmvat_name'];
			// $return_array['vat_value'] = $position['ecmvat_value'];
			// $return_array['category_id'] = $position['ecmproductcategory_id'];
			// $return_array['currency_id'] = $position['currency_id'];
			// $return_array['currency_name'] = $position['currency_name'];
			// $return_array['tax_code'] = $position['tax_code'];
			// $return_array['recipient_code'] = $position['recipient_code'];
			// $return_array['netto_weight'] = $position['netto_weight'];
			// $return_array['brutto_weight'] = $position['brutto_weight'];
			// $return_array['ecmstockdocout_id'] = $position['ecmstockdocout_id'];
			// $return_array['type'] = $position['product_type'];
			// $return_array['parent_doc_id'] = $position['parent_doc_id'];
			// $return_array['parent_doc_type'] = $position['parent_doc_type'];
			// $return_array['parent_doc_item_id'] = $position['product_parent_doc_item_id'];
			
			// mh
			// $return_array['origin_country_code'] = $position['origin_country_code'];
			// $return_array['product_code'] = $position['product_code'];
			
			// if ($_REQUEST['isCorrect'] == "true") {
			// $return_array['item_id'] = $position['id'];
			// } else {
			// $return_array['item_id'] = $position['ecminvoiceoutolditem_id'];
			// }
			
			$return_array ['in_name'] = $position ['in_name'];
			$return_array ['in_type'] = $position ['in_type'];
		}
		
		return $return_array;
	}
	function getPositionList($array = false, $stockOperations = false) {
		if (isset ( $this->id ) && $this->id != '') {
			$query = '';
			
			if (false == $stockOperations) {
				$query = 'SELECT  ii.* FROM `ecmproducts` AS p JOIN `ecminvoiceoutolditems` AS ii ON p.`id` = ii.`ecmproduct_id` WHERE ii.`ecminvoiceoutold_id` = \'' . $this->id . '\' AND ii.deleted=\'0\' ORDER BY ii.`position` ASC;';
				// echo 'SELECT ii.*, p.`weight_netto` AS `netto_weight` FROM `ecmproducts` AS p JOIN `ecminvoiceoutolditems` AS ii ON p.`id` = ii.`ecmproduct_id` WHERE ii.`ecminvoiceoutold_id` = \'' . $this->id . '\' ORDER BY ii.`position` ASC;';
			} else {
				// $query = 'SELECT p.`origin_country_code`, p.`product_code`, ii.* FROM `ecmproducts` AS p JOIN `ecminvoiceoutolditems` AS ii ON p.`id` = ii.`ecmproduct_id` WHERE ii.`ecminvoiceoutold_id` = \'' . $this->id . '\' ORDER BY ii.`position` ASC';
				// $query = 'SELECT soo.`parent_name` AS in_name, p.`unit_name`, so.*, p.`product_code` FROM `ecmstockoperations` AS so JOIN `ecmstockoperations` AS soo ON soo.`id` = so.`in_id` JOIN `ecmproducts` AS p ON p.`id` = so.`product_id` WHERE so.`parent_id` = \'' . $this->id . '\';';
				$query = 'SELECT so.*, soo.`parent_name` AS `in_name`, soo.`parent_type` AS `in_type`, p.`index_dbf` AS `code`, p.`unit_name`, p.`weight_netto` AS `netto_weight` FROM `ecmstockoperations` AS so JOIN `ecmstockoperations` AS soo ON soo.`id` = so.`in_id` JOIN `ecmproducts` AS p ON p.`id` = so.`product_id` WHERE so.`parent_id` = \'' . $this->id . '\';';
			}
			
			// echo $query; //exit;
			
			$r = $this->db->query ( $query );
			$return_array = array ();
			
			if ($r) {
				while ( $w = $this->db->fetchByAssoc ( $r ) ) {
					$return_array [] = $this->getPosition ( $w, $stockOperations );
				}
				
				$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;
	}
	
	// ***************************End Managing Positions*************************//
	static function getTranslation($module, $id, $language) {
		if (isset ( $id ) && $id != '' && isset ( $module ) && $module != '') {
			global $beanList, $beanFiles;
			$file = $beanFiles [$beanList [$module]];
			if (file_exists ( $file )) {
				require_once ($file);
				$bean = new $beanList [$module] ();
				$bean->retrieve ( $id );
				if (isset ( $bean->id ) && $bean->id != '') {
					if (isset ( $bean->translations [$language] ) && $bean->translations [$language] != '')
						return $bean->translations [$language];
				}
			}
		}
		return null;
	}
	function getTemplateList() {
		global $db;
		$query = "select `id`,`name` from `ecmdocumenttemplates` where `deleted`='0' order by `name`";
		
		$result = $db->query ( $query );
		
		$arr = array ();
		
		if ($result)
			while ( $row = $db->fetchByAssoc ( $result ) )
				$arr [$row ['id']] = $row ['name'];
		
		return $arr;
	}
	function setTemplate() {
		if (! isset ( $this->template_id ) || $this->template_id == '')
			return null;
		
		if (isset ( $this->template ))
			return $this->template;
		
		require_once ('modules/EcmDocumentTemplates/EcmDocumentTemplate.php');
		
		$this->template = new EcmDocumentTemplate ();
		
		// $this->template->retrieve($this->template_id);
		$this->template->retrieve ( $this->template_id, true, false );
		
		if (isset ( $this->template->id ) && $this->template->id != '') {
			
			$this->template->format_all_fields ();
		} else
			$this->template = null;
		
		return $this->template;
	}
	function generateNumber() {
		$this->setTemplate ();
		$this->number = isset ( $this->template ) ? $this->template->generateNumber ( $this->table_name ) : '';
		return $this->number;
	}
	function formatNumber() {
		$this->setTemplate ();
		$this->document_no = isset ( $this->template ) ? $this->template->formatNumber ( $this->number, $this->module_dir ) : '';
		return $this->document_no;
	}
	function generateNumberCorrect() {
		$this->setTemplate ();
		$this->number = $this->template->generateNumberCorrect ( $this->table_name );
		return $this->number;
	}
	function formatNumberCorrect() {
		$this->setTemplate ();
		$this->document_no = $this->template->formatNumberCorrect ( $this->number, $this->module_dir );
		return $this->document_no;
	}
	function formatDocumentNumber($documentNumber = '', $code = '') {
		return isset ( $this->template ) ? $this->template->formatDocumentNumber ( $documentNumber, $code ) : '';
	}
	function DrawPositions($pdf = null) {
		global $mod_strings;
		
		$currency = new Currency ();
		$currency->retrieve ( $this->currency_id );
		$this->currency_symbol = $currency->iso4217;
		
		if (! isset ( $this->position_list ) || ! is_array ( $this->position_list ))
			$this->position_list = $this->getPositionList ( true );
		$calc = $this->calculate ( $this->position_list, true );
		// $this->position_list = $this->formatPositions($this->position_list);
		
		$calc ['total'] .= ' ' . $this->currency_symbol;
		$calc ['subtotal'] .= ' ' . $this->currency_symbol;
		if ($calc ['discount']) {
			$calc ['total2'] .= ' ' . $this->currency_symbol;
			$calc ['discount'] ['value'] .= ' ' . $this->currency_symbol;
		}
		
		if (isset ( $calc ['vats'] ) && is_array ( $calc ['vats'] ) && count ( $calc ['vats'] ) > 0)
			foreach ( $calc ['vats'] as $key => $value )
				$calc ['vats'] [$key] .= ' ' . $this->currency_symbol;
		
		$name_w = 22;
		// if($calc['draw_discount']) $name_w -= 8;
		// if($calc['draw_vat']) $name_w -= 8;
		$table = array ();
		$table [0] ['position'] = array (
				'width' => 4,
				'value' => $mod_strings ['LBL_PDF_LIST_POSITION'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 8 
		);
		$table [0] ['description'] = array (
				'width' => $name_w,
				'value' => $mod_strings ['LBL_PDF_LIST_DESCRIPTION'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		$table [0] ['tax_code'] = array (
				'width' => 8,
				'value' => $mod_strings ['LBL_PDF_LIST_TAX_CODE'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		$table [0] ['quantity'] = array (
				'width' => 7,
				'value' => $mod_strings ['LBL_PDF_LIST_QUANTITY'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		$table [0] ['unit'] = array (
				'width' => 5,
				'value' => $mod_strings ['LBL_PDF_LIST_UNIT'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 8 
		);
		$table [0] ['unit_price'] = array (
				'width' => 10,
				'value' => $mod_strings ['LBL_PDF_LIST_PRICE'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		$table [0] ['unit_price_total'] = array (
				'width' => 12,
				'value' => $mod_strings ['LBL_PDF_LIST_TOTAL_PRICE'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		// if($calc['draw_discount']) $table [0]['discount'] = array('width' => 8, 'value' => $mod_strings['LBL_PDF_LIST_DISCOUNT'], 'border' => 0, 'overflow' => 1, 'align' => 'C', 'font-style' => 'b', 'font-size' => 7);
		// if($calc['draw_vat']) {
		$table [0] ['vat_id'] = array (
				'width' => 5,
				'value' => $mod_strings ['LBL_PDF_LIST_VAT'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		$table [0] ['vat_value'] = array (
				'width' => 13,
				'value' => $mod_strings ['LBL_PDF_LIST_VAT_VALUE'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		// }
		$table [0] ['total'] = array (
				'width' => 14,
				'value' => $mod_strings ['LBL_PDF_LIST_TOTAL'],
				'border' => 1,
				'overflow' => 1,
				'align' => 'C',
				'font-style' => 'b',
				'font-size' => 7 
		);
		$pdf->DrawTable ( $table, array (
				0 
		) );
		$pdf->Ln ( 0 );
		
		$i = 1;
		
		$table = array ();
		if ($this->position_list != '')
			foreach ( $this->position_list as $p ) {
				$table [$i] ['position'] = array (
						'width' => 4,
						'value' => $i,
						'border' => 1,
						'align' => 'R',
						'font-size' => 7 
				);
				$table [$i] ['description'] = array (
						'width' => $name_w,
						'value' => htmlspecialchars_decode ( $p ['name'] ),
						'border' => 1,
						'align' => 'L',
						'font-size' => 7 
				);
				$table [$i] ['tax_code'] = array (
						'width' => 8,
						'value' => $p ['tax_code'],
						'border' => 1,
						'align' => 'C',
						'font-size' => 7 
				);
				$table [$i] ['quantity'] = array (
						'width' => 7,
						'value' => $p ['quantity'],
						'border' => 1,
						'align' => 'C',
						'font-size' => 7 
				);
				$table [$i] ['unit'] = array (
						'width' => 5,
						'value' => $GLOBALS ['app_list_strings'] ['ecmproducts_unit_dom'] [$p ['unit']],
						'border' => 1,
						'align' => 'C',
						'font-size' => 7 
				);
				$table [$i] ['unit_price'] = array (
						'width' => 10,
						'value' => $p ['price'],
						'border' => 1,
						'align' => 'R',
						'font-size' => 7 
				);
				$price_total = $p ['price'] * $p ['quantity'];
				$table [$i] ['unit_price_total'] = array (
						'width' => 12,
						'value' => ($price_total),
						'border' => 1,
						'align' => 'R',
						'font-size' => 7 
				);
				// if($calc['draw_discount']) $table [$i]['discount'] = array('width' => 8, 'value' => $p['discount'], 'border' => 0, 'align' => 'R', 'font-size' => 7 );
				// if($calc['draw_vat']){
				$table [$i] ['vat_id'] = array (
						'width' => 5,
						'value' => ($p ['vat_value']),
						'border' => 1,
						'align' => 'R',
						'font-size' => 7 
				);
				$vat_value = $p ['vat_value'] / 100 * $p ['price'] * $p ['quantity'];
				$table [$i] ['vat_value'] = array (
						'width' => 13,
						'value' => ($vat_value),
						'border' => 1,
						'align' => 'R',
						'font-size' => 7 
				);
				
				// }
				$table [$i] ['total'] = array (
						'width' => 14,
						'value' => ($price_total + $vat_value),
						'border' => 1,
						'align' => 'R',
						'font-size' => 7 
				);
				$totals [$p ['vat_id']] ['price'] += $price_total;
				$totals [$p ['vat_id']] ['total'] += $price_total + $vat_value;
				$totals [$p ['vat_id']] ['vat'] += $vat_value;
				$i ++;
			}
		
		$pdf->DrawTable ( $table, array (
				0 
		) );
		// total, vat, subtotal
		
		$pdf->Ln ( 4 );
		$pr = ($pdf->fw - $pdf->lMargin - $pdf->rMargin) / 100;
		// $pdf->SetX($pdf->fw-$pdf->rMargin-$pr*34);
		$table = array ();
		
		if ($calc ['vats']) {
			/*
			 * $table [] = array( 'subtotal1' => array('width' => 42, 'value' => $mod_strings['LBL_PDF_TOTAL'], 'background' => array(255,255,255), 'border' => 1, 'overflow' => 1, 'align' => 'L', 'font-size' => 7), 'subtotal2' => array('width' => 14, 'value' => $calc['subtotal'].' PLN', 'border' => 1, 'overflow' => 1, 'align' => 'R', 'font-size' => 7), );
			 */
			foreach ( $calc ['vats'] as $key => $value ) {
				$r = $GLOBALS [db]->fetchByAssoc ( $GLOBALS [db]->query ( "select id,name,value from ecmvats where id='" . $key . "'" ) );
				$vvn = $r ['name'];
				$table [] = array (
						'vat1' => array (
								'width' => 10,
								'value' => $mod_strings ['LBL_PDF_VAT'] . ' (' . $vvn . ')',
								'background' => array (
										255,
										255,
										255 
								),
								'border' => 1,
								'overflow' => 1,
								'align' => 'L',
								'font-size' => 7 
						),
						'netto_total' => array (
								'width' => 12,
								'value' => format_number ( $totals [$r ['id']] ['price'] ),
								'background' => array (
										255,
										255,
										255 
								),
								'border' => 1,
								'overflow' => 1,
								'align' => 'R',
								'font-size' => 7 
						),
						'vat_rate' => array (
								'width' => 5,
								'value' => format_number ( $r ['value'] ),
								'background' => array (
										255,
										255,
										255 
								),
								'border' => 1,
								'overflow' => 1,
								'align' => 'R',
								'font-size' => 7 
						),
						'vat_total' => array (
								'width' => 13,
								'value' => format_number ( $totals [$r ['id']] ['vat'] ),
								'background' => array (
										255,
										255,
										255 
								),
								'border' => 1,
								'overflow' => 1,
								'align' => 'R',
								'font-size' => 7 
						),
						'vat2' => array (
								'width' => 14,
								'value' => format_number ( $totals [$r ['id']] ['total'] ),
								'border' => 1,
								'overflow' => 1,
								'align' => 'R',
								'font-size' => 7 
						) 
				);
			}
		}
		
		if (isset ( $calc ['discount'] )) {
			$table [] = array (
					'total21' => array (
							'width' => 66,
							'value' => $mod_strings ['LBL_PDF_TOTAL'],
							'background' => array (
									255,
									255,
									255 
							),
							'border' => 0,
							'overflow' => 1,
							'align' => 'L',
							'font-size' => 7,
							'font-style' => 'b' 
					),
					'total22' => array (
							'width' => 34,
							'value' => $calc ['total2'],
							'border' => 0,
							'overflow' => 1,
							'align' => 'R',
							'font-size' => 7 
					) 
			);
			$table [] = array (
					'discount1' => array (
							'width' => 86,
							'value' => $mod_strings ['LBL_PDF_DISCOUNT'] . ' ' . $calc ['discount'] ['procent'],
							'background' => array (
									255,
									255,
									255 
							),
							'border' => 0,
							'overflow' => 1,
							'align' => 'L',
							'font-size' => 7,
							'font-style' => 'b' 
					),
					'discount2' => array (
							'width' => 14,
							'value' => $calc ['discount'] ['value'],
							'border' => 0,
							'overflow' => 1,
							'align' => 'R',
							'font-size' => 7 
					) 
			);
		}
		$table [] = array (
				'total1' => array (
						'width' => 40,
						'value' => $mod_strings ['LBL_PDF_END_TOTAL'],
						'border' => 1,
						'overflow' => 1,
						'align' => 'L',
						'font-size' => 7,
						'font-style' => 'b' 
				),
				'total2' => array (
						'width' => 14,
						'value' => $calc ['total'],
						'border' => 1,
						'overflow' => 1,
						'align' => 'R',
						'font-size' => 7,
						'font-style' => 'b' 
				) 
		);
		$pdf->SetX ( 103 );
		$pdf->DrawTable ( $table );
		$pdf->Ln ( 1 );
		
		// $table=array();
		// $pdf->DrawTable($table);
	}
	
	/**
	 *
	 * @var $pdf
	 * @var $type => pdf_type
	 */
	function DrawMainPDF($pdf, $type = null) {
		global $mod_strings;
		
		$arr = $this->template->getTemplateFile ( 'EcmInvoiceOuts' );
		
		// var_dump($type ? : $this->pdf_type); exit;
		
		switch (strtolower ( $type ?  : $this->pdf_type )) {
			case 'exp' :
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subheader_exp.php");
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subfooter_exp.php");
				
				break;
			case 'e' :
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subheader_e.php");
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subfooter_e.php");
				
				break;
			default :
			case 'k' :
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subheader_k.php");
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subfooter_k.php");
				
				break;
			case 'u' :
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subheader_u.php");
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subfooter_u.php");
				
				break;
			case 'pl' :
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subheader_pl.php");
				include_once ("modules/EcmDocumentTemplates/templates/" . $arr [0] . "/" . $arr [1] . "/subfooter_pl.php");
				
				break;
		}
		
		return;
	}
	function getPDF($id = null, $method = 'I', $name = null, $type = null) {
		global $sugar_config;
		
		if ($id != null) {
			
			$this->retrieve ( $id );
			
			if ($this->id == '')
				return;
		}
		
		global $mod_strings;
		
		require_once ('modules/EcmTexts/EcmText.php');
		
		if (isset ( $this->ecmlanguage ) && $this->ecmlanguage != '') {
			$data = EcmText::LoadText ( null, null, "EcmInvoiceOutOlds", $this->ecmlanguage );
			if (isset ( $data [0] ) && isset ( $data [0] ['data'] ) && isset ( $data [0] ['data'] ['labels'] )) {
				$data = $data [0] ['data'] ['labels'];
				foreach ( $data as $key => $value ) {
					$mod_strings [$value ['label']] = $value ['translation'];
				}
			}
		}
		
		$this->format_all_fields ();
		
		$this->setTemplate ();
		
		// $type = $_REQUEST['type'];
		
		if (isset ( $this->template->id ) && $this->template->id != '') {
			$this->template->setPDF ( $this->template_id );
			$this->template->pdf->SetAutoPageBreak ( true, 40 );
			
			$this->DrawMainPDF ( $this->template->pdf, $type );
			
			$this->template->outputPDF ( (($name) ? $name : $this->createPdfFileName ()), 'I' );
		}
	}
	function calculate($position_list, $format = false) {
		global $db;
		
		if (! is_array ( $position_list ))
			return false;
		
		$result = array (
				'total' => 0.0,
				'vats' => false,
				'subtotal' => 0.0,
				'draw_vat' => false,
				'draw_discount' => false,
				'draw_recipient_code' => false 
		);
		
		$vats = array ();
		
		$weight_netto = 0;
		
		foreach ( $position_list as $p ) {
			$w = $db->fetchByAssoc ( $db->query ( "SELECT weight_netto FROM ecmproducts WHERE id='" . $p ['id'] . "'" ) );
			$weight_netto += $w ['weight_netto'] * $p ['quantity'];
			
			if (! isset ( $vats [$p ['vat_id']] ))
				$vats [$p ['vat_id']] = 0;
			
			$p ['total'] = floatval ( $p ['price'] ) * floatval ( $p ['quantity'] );
			
			$vats [$p ['vat_id']] += floatval ( $p ['total'] );
			
			$result ['subtotal'] += floatval ( $p ['total'] );
			
			if (! $result ['draw_discount'] && floatval ( $p ['discount'] ) > 0)
				$result ['draw_discount'] = true;
			
			if (! $result ['draw_recipient_code'] && $p ['recipient_code'] != '')
				$result ['draw_recipient_code'] = true;
		}
		
		$result ['total'] = $result ['subtotal'];
		
		if (! $this->to_is_vat_free) {
			$vats2 = array ();
			
			foreach ( $vats as $key => $value ) {
				$r = $db->fetchByAssoc ( $db->query ( "select value from ecmvats where id='" . $key . "'" ) );
				$vva = $r ['value'];
				
				if (! $format) {
					$vats2 [$key] = floatval ( $value ) * (floatval ( $vva ) / 100);
				} else {
					$vats2 [$key] = format_number ( floatval ( $value ) * (floatval ( $vva ) / 100) );
				}
				
				$result ['total'] += floatval ( $value ) * (floatval ( $vva ) / 100);
			}
			
			$this->total;
			// die();
			asort ( $vats2, SORT_NUMERIC );
			
			$result ['vats'] = $vats2;
			
			if (count ( $result ['vats'] ) > 1)
				$result ['draw_vat'] = true;
		}
		
		$discount = $this->discount;
		
		if (! is_float ( $discount ))
			$discount = unformat_number ( $discount );
		
		if (isset ( $discount ) && $discount != 0 && $discount != '') {
			$result ['discount'] = array (
					'procent' => format_number ( floatval ( $discount ) ) . '%',
					'value' => $result ['subtotal'] * $discount / 100 
			);
			
			$result ['total2'] = $result ['total'];
			$result ['total'] = $result ['total'] - $result ['discount'] ['value'];
		}
		
		if ($format) {
			if (isset ( $result ['discount'] ) && isset ( $result ['discount'] ['value'] ) && $result ['discount'] ['value'] != '' && $result ['discount'] ['value'] != 0) {
				$result ['discount'] ['value'] = format_number ( $result ['discount'] ['value'] );
				$result ['total2'] = format_number ( $result ['total2'] );
			}
			
			$result ['total'] = format_number ( $result ['total'] );
			
			$result ['subtotal'] = format_number ( $result ['subtotal'] );
		}
		
		$result ['weight_netto'] = $weight_netto;
		
		return $result;
	}
	function formatPositions($position_list) {
		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] ['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;
			
			$this->currency_symbol = $currency->iso4217;
		}
		return $position_list;
	}
	function loadParser() {
		$this->template->mfp->clear ();
		$this->template->mfp->add ( "EcmQuotes", "quote_", $this );
		$this->template->mfp->add ( "Users", "user_", $this->setUser () );
		if ($this->setAccount () != null)
			$this->template->mfp->add ( "Accounts", 'account_', $this->account );
		if ($this->setContact () != null)
			$this->template->mfp->add ( "Contacts", 'contact_', $this->contact );
		$this->template->mfp->add ( "EcmDocumentTemplates", "documenttemplate_", $this->template );
	}
	function loadParserarray($name = '') {
		require_once ('modules/EcmDocumentTemplates/ModuleFieldsParser/ModuleFieldsParser.php');
		$mfp = new ModuleFieldsParser ();
		$mfp->clear ();
		
		global $app_list_strings;
		
		$mfp->add ( "EcmInvoiceOutOlds", "invoiceout_", '', $app_list_strings ['moduleList'] ['EcmInvoiceOutOlds'] );
		$mfp->add ( "Users", "user_", '', $app_list_strings ['moduleList'] ['Users'] );
		$mfp->add ( "Accounts", 'account_', '', $app_list_strings ['moduleList'] ['Accounts'] );
		$mfp->add ( "Contacts", 'contact_', '', $app_list_strings ['moduleList'] ['Contacts'] );
		$mfp->add ( "EcmDocumentTemplates", "documenttemplate_", '', $app_list_strings ['moduleList'] ['EcmDocumentTemplates'] );
		
		if ($name == '') {
			$mfp_arr = array (
					'header' => $mfp->getFormHTML ( false, 'header' ),
					'footer' => $mfp->getFormHTML ( false, 'footer' ),
					'ads' => $mfp->getFormHTML ( false, 'ads' ) 
			);
		} else
			$mfp_arr = $mfp->getFormHTML ( false, $name );
		return $mfp_arr;
	}
	function setAccount() {
		require_once ('modules/Accounts/Account.php');
		$this->account = new Account ();
		$this->account->retrieve ( $this->parent_id );
		return $this->account;
	}
	function setContact() {
		require_once ('modules/Contacts/Contact.php');
		$us = new Contact ();
		$us->retrieve ( $this->contact_id );
		$this->contact = $us;
		return $this->contact;
	}
	function setUser() {
		if (is_object ( $this->user ))
			return $this->user;
		require_once ('modules/Users/User.php');
		$us = new User ();
		global $current_user;
		$us->retrieve ( ($this->assigned_user_id) ? $this->assigned_user_id : $current_user->id );
		if (isset ( $us->id ) && $us->id != '') {
			$this->user = $us;
		} else
			$this->user = null;
		return $this->user;
	}
	function doNotAccepted() {
		global $current_user;
		$cq = $current_user->getPreference ( 'confirm_invoiceouts' );
		if (isset ( $cq ) && $cq) {
			$query = "UPDATE `ecminvoiceoutolds` SET `status` = 'not_accepted',`accepted` = '0' WHERE CONVERT( `id` USING utf8 ) = '" . $this->id . "' LIMIT 1 ;";
			$result = $this->db->query ( $query );
			if ($result) {
				$this->status = 'not_accepted';
				$this->accepted = 0;
			}
		}
	}
	function loadEcmInvoiceOutOld() {
		$this->ecminvoiceoutold = new EcmInvoiceOutOld ();
		if (isset ( $this->ecminvoiceoutold_id ) && $this->ecminvoiceoutold_id != '') {
			$this->ecminvoiceoutold->retrieve ( $this->ecminvoiceoutold_id );
		}
	}
	function slownieEN($kw) {
	}
	function slowniePL($kw) {
		$t_a = array (
				'',
				'sto',
				'dwieście',
				'trzysta',
				'czterysta',
				'pięćset',
				'sześćset',
				'siedemset',
				'osiemset',
				'dziewięćset' 
		);
		$t_b = array (
				'',
				'dziesięć',
				'dwadzieścia',
				'trzydzieści',
				'czterdzieści',
				'pięćdziesiąt',
				'sześćdziesiąt',
				'siedemdziesiąt',
				'osiemdziesiąt',
				'dziewięćdziesiąt' 
		);
		$t_c = array (
				'',
				'jeden',
				'dwa',
				'trzy',
				'cztery',
				'pięć',
				'sześć',
				'siedem',
				'osiem',
				'dziewięć' 
		);
		$t_d = array (
				'dziesięć',
				'jedenaście',
				'dwanaście',
				'trzynaście',
				'czternaście',
				'piętnaście',
				'szesnaście',
				'siedmnaście',
				'osiemnaście',
				'dziewiętnaście' 
		);
		
		$t_kw_15 = array (
				'septyliard',
				'septyliardów',
				'septyliardy' 
		);
		$t_kw_14 = array (
				'septylion',
				'septylionów',
				'septyliony' 
		);
		$t_kw_13 = array (
				'sekstyliard',
				'sekstyliardów',
				'sekstyliardy' 
		);
		$t_kw_12 = array (
				'sekstylion',
				'sekstylionów',
				'sepstyliony' 
		);
		$t_kw_11 = array (
				'kwintyliard',
				'kwintyliardów',
				'kwintyliardy' 
		);
		$t_kw_10 = array (
				'kwintylion',
				'kwintylionów',
				'kwintyliony' 
		);
		$t_kw_9 = array (
				'kwadryliard',
				'kwadryliardów',
				'kwaryliardy' 
		);
		$t_kw_8 = array (
				'kwadrylion',
				'kwadrylionów',
				'kwadryliony' 
		);
		$t_kw_7 = array (
				'tryliard',
				'tryliardów',
				'tryliardy' 
		);
		$t_kw_6 = array (
				'trylion',
				'trylionów',
				'tryliony' 
		);
		$t_kw_5 = array (
				'biliard',
				'biliardów',
				'biliardy' 
		);
		$t_kw_4 = array (
				'bilion',
				'bilionów',
				'bilony' 
		);
		$t_kw_3 = array (
				'miliard',
				'miliardów',
				'miliardy' 
		);
		$t_kw_2 = array (
				'milion',
				'milionów',
				'miliony' 
		);
		$t_kw_1 = array (
				'tysiąc',
				'tysięcy',
				'tysiące' 
		);
		// $t_kw_0 = array('złoty','złotych','złote');
		$t_kw_0 = array (
				'',
				'',
				'' 
		);
		
		if ($kw != '') {
			$kw = (substr_count ( $kw, ',' ) == 0) ? $kw . ',00' : $kw;
			$tmp = explode ( ",", $kw );
			$ln = strlen ( $tmp [0] );
			$tmp_a = ($ln % 3 == 0) ? (floor ( $ln / 3 ) * 3) : ((floor ( $ln / 3 ) + 1) * 3);
			for($i = $ln; $i < $tmp_a; $i ++) {
				$l_pad .= '0';
				$kw_w = $l_pad . $tmp [0];
			}
			$kw_w = ($kw_w == '') ? $tmp [0] : $kw_w;
			$paczki = (strlen ( $kw_w ) / 3) - 1;
			$p_tmp = $paczki;
			for($i = 0; $i <= $paczki; $i ++) {
				$t_tmp = 't_kw_' . $p_tmp;
				$p_tmp --;
				$p_kw = substr ( $kw_w, ($i * 3), 3 );
				$kw_w_s = ($p_kw {1} != 1) ? $t_a [$p_kw {0}] . ' ' . $t_b [$p_kw {1}] . ' ' . $t_c [$p_kw {2}] : $t_a [$p_kw {0}] . ' ' . $t_d [$p_kw {2}];
				if (($p_kw {0} == 0) && ($p_kw {2} == 1) && ($p_kw {1} < 1))
					$ka = ${$t_tmp} [0]; // mozliwe ze $p_kw{1}!=1
				else if (($p_kw {2} > 1 && $p_kw {2} < 5) && $p_kw {1} != 1)
					$ka = ${$t_tmp} [2];
				else
					$ka = ${$t_tmp} [1];
				$kw_slow .= $kw_w_s . ' ' . $ka . ' ';
			}
		}
		if ($kw < 1000000 && eregi ( "milion", $kw_slow )) {
			
			$kw_slow = substr ( $kw_slow, 11, strlen ( $kw_slow ) );
		}
		$text = $kw_slow . ' ' . str_replace ( "PLN", "", str_replace ( "USD", "", $tmp [1] ) ) . '/100.';
		return $text;
	}
	
	// add mz
	function getCorrectInvoiceOldValues() {
		$db = $GLOBALS ['db'];
		global $datetime;
		
		$w = $db->query ( "select id, date_entered, subtotal,total ,ecminvoiceoutolditem_id, parent_doc_type from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "' AND deleted='0'" );
		while ( $r = $db->fetchByAssoc ( $w ) ) {
			// if ($r['parent_doc_type'] == 'EcmReturn')
			// TODO: return invoice old values search
			$oi = $db->fetchByAssoc ( $db->query ( "SELECT ii.id, ii.ecminvoiceoutold_id, ii.total,ii.subtotal, ii.quantity FROM ecminvoiceoutolditems as ii INNER JOIN ecminvoiceoutolds AS i ON i.id=ii.ecminvoiceoutold_id WHERE ii.date_entered < '" . $r ['date_entered'] . "' AND i.canceled='0' AND i.deleted='0' AND ii.ecminvoiceoutolditem_id='" . $r ['ecminvoiceoutolditem_id'] . "' AND ii.ecminvoiceoutold_id!='" . $this->id . "' order by ii.date_entered desc limit 0,1" ) );
			if ($oi && $oi ['id'] && $oi ['id'] != '') {
				// była wcześniejsza korekta
				if (( float ) $r ['subtotal'] == ( float ) $oi ['subtotal'])
					continue; // produkt nie był korygowany
						          // wpisz old_
				$db->query ( "UPDATE ecminvoiceoutolditems SET subtotal_corrected = '" . round ( floatval ( $r ['subtotal'] ) - floatval ( $oi ['old_subtotal'] ), 2 ) . "', old_subtotal='" . $oi ['subtotal'] . "', old_total='" . $oi ['total'] . "',old_quantity='" . $oi ['quantity'] . "', old_ecminvoiceoutolditem_id='" . $oi ['id'] . "' WHERE id='" . $r ['id'] . "'" );
			} else {
				// nie było korekty - weź dane z FV
				$oi = $db->fetchByAssoc ( $db->query ( "SELECT id, quantity, subtotal, total, ecminvoiceoutold_id FROM ecminvoiceoutolditems WHERE id='" . $r ['ecminvoiceoutolditem_id'] . "'" ) );
				if (( float ) $r ['subtotal'] == ( float ) $oi ['subtotal'])
					continue;
					// update old_
				$db->query ( "UPDATE ecminvoiceoutolditems SET subtotal_corrected = '" . round ( floatval ( $r ['subtotal'] ) - floatval ( $oi ['old_subtotal'] ), 2 ) . "', old_subtotal='" . $oi ['subtotal'] . "',old_total='" . $oi ['total'] . "', old_quantity='" . $oi ['quantity'] . "', old_ecminvoiceoutolditem_id='" . $oi ['id'] . "' WHERE id='" . $r ['id'] . "'" );
			}
		}
	}
	function getInvoiceSubtotal($search_old = true) {
		$db = $GLOBALS ['db'];
		
		$multi_correct = false;
		// is multi corect??
		$ret = $db->query ( "
SELECT distinct o.ecminvoiceoutold_id
FROM
    ecminvoiceoutolditems as ii
INNER JOIN ecminvoiceoutolds as i
ON ii.ecminvoiceoutold_id = i.id
INNER JOIN ecminvoiceoutolditems AS o
ON o.id = ii.ecminvoiceoutolditem_id
WHERE
    ii.ecminvoiceoutold_id = '" . $this->id . "'" );
		if ($ret->num_rows > 1) {
			$this->getMultiCorrectTotals ();
			// $multi_correct = true;
		}
		
		$subtotal = 0;
		if ($this->type == 'correct') {
			if ($search_old && ! $multi_correct)
				$this->getCorrectInvoiceOldValues ();
			$w = $db->query ( "select id, subtotal, old_subtotal, old_ecminvoiceoutolditem_id from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "' AND deleted='0'" );
			while ( $r = $db->fetchByAssoc ( $w ) ) {
				if (is_null ( $r ['old_ecminvoiceoutolditem_id'] ) || $r ['old_ecminvoiceoutolditem_id'] == '')
					continue; // ten produkt nie był korygowany
				$subtotal += $r ['subtotal'] - $r ['old_subtotal'];
			}
		} else {
			$w = $db->query ( "select subtotal from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "' AND deleted='0'" );
			while ( $r = $db->fetchByAssoc ( $w ) ) {
				$subtotal += $r ['subtotal'];
			}
		}
		return round ( $subtotal, 2 );
	}
	function getInvoiceTotal() {
		$db = $GLOBALS ['db'];
		$total = 0;
		if ($this->type == 'correct') {
			$w = $db->query ( "select id, total, old_total, old_ecminvoiceoutolditem_id from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "' AND deleted='0'" );
			while ( $r = $db->fetchByAssoc ( $w ) ) {
				if (is_null ( $r ['old_ecminvoiceoutolditem_id'] ) || $r ['old_ecminvoiceoutolditem_id'] == '')
					continue; // ten produkt nie był korygowany
				$total += ($r ['total'] - $r ['old_total']);
			}
		} else {
			$w = $db->query ( "select total from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "' AND deleted='0'" );
			while ( $r = $db->fetchByAssoc ( $w ) ) {
				$total += $r ['total'];
			}
		}
		return round ( $total, 2 );
	}
	function CalculatePurchasePrices() {
		$db = $GLOBALS ['db'];
		
		// update items
		if ($this->type == 'normal')
			$query = "
update 
    ecminvoiceoutolditems as ii
        inner join
    ecmstockdocoutitems as wi ON ii.parent_doc_item_id = wi.id
set
	ii.purchase_price = wi.price
where
    ii.ecminvoiceoutold_id = '$this->id';	
";
		else 
			$query = "
UPDATE ecminvoiceoutolditems AS ii
INNER JOIN ecminvoiceoutolds as i
ON ii.ecminvoiceoutold_id = i.id
INNER JOIN ecminvoiceoutolditems AS o
ON o.id = ii.ecminvoiceoutolditem_id
INNER JOIN ecmstockdocoutitems AS wi
ON wi.id = o.parent_doc_item_id
SET ii.purchase_price = wi.price
WHERE
    ii.ecminvoiceoutold_id = '".$this->id."';
";
		
		$db->query ( $query );
		
		// update purchase_price on invoice
		if ($this->type == 'normal')
			$r = $db->fetchByAssoc ( $db->query ( "SELECT sum(purchase_price*quantity) as sum FROM ecminvoiceoutolditems WHERE ecminvoiceoutold_id='$this->id' and deleted='0'" ) );
		else
			$r = $db->fetchByAssoc ( $db->query ( "SELECT sum(purchase_price*quantity_corrected) as sum FROM ecminvoiceoutolditems WHERE ecminvoiceoutold_id='$this->id' and deleted='0'" ) );
		$db->query ( "UPDATE ecminvoiceoutolds SET purchase_price='" . $r ['sum'] . "' WHERE id='$this->id'" );
	}
	function getMultiCorrectTotals() {
		$db = $GLOBALS ['db'];
		
		$res = $db->query ( "select id, old_ecminvoiceoutolditem_id as old, code, subtotal from ecminvoiceoutolditems where ecminvoiceoutold_id='" . $this->id . "' AND deleted='0'" );
		while ( $row = $db->fetchByAssoc ( $res ) ) {
			echo $row ['old_ecminvoiceoutolditem_id'];
			$ww = $db->fetchByAssoc ( $db->query ( "SELECT code, subprice,price,quantity,subtotal, total FROM ecminvoiceoutolditems WHERE id='" . $row ['old'] . "'" ) );
			if (! $ww ['subtotal'] || $ww ['subtotal'] == "" || $ww ['subtotal'] == 0)
				$ww ['subtotal'] = $ww ['subprice'] * $ww ['quantity'];
			if (! $ww ['total'] || $ww ['total'] == '')
				$ww ['total'] = $ww ['price'] * $ww ['quantity'];
			$db->query ( "UPDATE ecminvoiceoutolditems SET subtotal_corrected = '" . round ( floatval ( $row ['subtotal'] ) - floatval ( $oi ['old_subtotal'] ), 2 ) . "', old_subtotal='" . $ww ['subtotal'] . "', old_total='" . $ww ['total'] . "' WHERE id='" . $row ['id'] . "'" );
		}
	}
	
	// add mz 2012-05-21
	// for subpanels
	// public function get_parent_for_subpanel() {
	// return "SELECT
	// }
	// end mz
}