get('decimalnumbers'), $this->get('decimalseparator'), $this->get('thousendsseparator'));
}
/**
* @param \Workflow\VTInventoryEntity $context
* @return string
*/
public function handleTask(&$context) {
/* Insert here source code to execute the task */
$content = $this->get('content', $context);
$content = preg_replace('/(\$[A-Za-z0-9]+)\$/', '$1', $content);
$firstPos = strpos($content, '#PRODUCTBLOC_START#');
$trStartPos = strrpos(substr($content, 0, $firstPos), '
');
$firstPos = strpos($content, '#PRODUCTBLOC_END#');
$trLastpos = strpos($content, '
', $firstPos) + 5;
$ReplaceThis = trim(substr($content, $trStartPos, $trLastpos - $trStartPos));
$trStartNextPos = strpos($ReplaceThis, '');
$trLaststartPos = strrpos($ReplaceThis, '');
$WITHINTEXT = substr($ReplaceThis, $trStartNextPos + 5, $trLaststartPos - $trStartNextPos - 5);
$items = $context->exportInventory();
$ProductVars = array();
$RecordVars = array(
'DISCOUNTTOTAL' => 0,
'TAXTOTAL' => 0,
'NETTOTAL' => 0,
'TOTALWITHOUTVAT' => 0,
'FINALDISCOUNT' => 0,
'FINALDISCOUNTPERCENT' => 0
);
$taxes = getAllTaxes('all');
foreach($items['listitems'] as $POSITION => $item) {
$productContext = \Workflow\VTEntity::getForId($item['productid']);
$PRODUCTTOTAL = floatval($item['unitprice']) * floatval($item['quantity']);
$PRODUCTSUBTOTAL = $PRODUCTTOTAL;
$PRODUCTDISCOUNT = $item['discount_amount'];
if(!empty($item['discount_percent'])) {
$PRODUCTDISCOUNT += $PRODUCTTOTAL * ($item['discount_percent'] / 100);
}
$PRODUCTSTOTALAFTERDISCOUNTSUM = $PRODUCTTOTAL - $PRODUCTDISCOUNT;
$PRODUCTVATPERCENT = 0;
if($context->get('hdnTaxType') == 'individual') {
foreach($taxes as $tax) {
if(!empty($item[$tax['taxname']])) {
$PRODUCTVATPERCENT += floatval($item[$tax['taxname']]);
}
}
}
$PRODUCTVATSUM = $PRODUCTSTOTALAFTERDISCOUNTSUM * ($PRODUCTVATPERCENT / 100);
$PRODUCTTOTALSUM = $PRODUCTTOTAL + $PRODUCTVATSUM;
$ProductVars[$POSITION] = array(
'PRODUCTNAME' => $productContext->get('productname'),
'PRODUCTTITLE' => $productContext->get('productname'),
'PRODUCTDESCRIPTION' => $productContext->get('description'),
'PRODUCTEDITDESCRIPTION' => $productContext->get('description'),
'PRODUCTLISTPRICE' => $this->formatNumber($item['unitprice']),
'PRODUCTTOTAL' => $this->formatNumber($PRODUCTTOTAL),
'PRODUCTQUANTITY' => $this->formatNumber($item['quantity']),
'PRODUCTQINSTOCK' => $this->formatNumber($productContext->get('qtyinstock')),
'PRODUCTPRICE' => $this->formatNumber($productContext->get('unit_price')),
'PRODUCTPOSITION' => $POSITION + 1,
'PRODUCTQTYPERUNIT' => $this->formatNumber($productContext->get('qty_per_unit')),
'PRODUCTUSAGEUNIT' => $productContext->get('usageunit'),
'PRODUCTDISCOUNT' => $this->formatNumber($PRODUCTDISCOUNT),
"PRODUCTDISCOUNTPERCENT" => $this->formatNumber($item['discount_percent']),
'PRODUCTSTOTALAFTERDISCOUNTSUM' => $PRODUCTSTOTALAFTERDISCOUNTSUM,
'PRODUCTSTOTALAFTERDISCOUNT' => $this->formatNumber($PRODUCTSTOTALAFTERDISCOUNTSUM),
'PRODUCTTOTALSUM' => $this->formatNumber($PRODUCTTOTALSUM),
'PRODUCTVATSUM' => $this->formatNumber($PRODUCTVATSUM),
'PRODUCTVATPERCENT' => $PRODUCTVATPERCENT
);
$RecordVars['NETTOTAL'] += $PRODUCTSUBTOTAL;
$RecordVars['TOTALWITHOUTVAT'] += $PRODUCTSTOTALAFTERDISCOUNTSUM;
$RecordVars['FINALDISCOUNT'] += $PRODUCTDISCOUNT;
}
$discountPercent = $context->get('hdnDiscountPercent');
$discountAmount = $context->get('hdnDiscountAmount');
if(!empty($discountPercent)) {
$discountAmount = $RecordVars['TOTALWITHOUTVAT'] * ($discountPercent / 100);
}
if(empty($discountAmount)) $discountAmount = 0;
if($context->get('hdnTaxType') == 'group') {
$GROUPTAXPERCENT = 0;
foreach($items['groupTax'] as $groupTax) {
$GROUPTAXPERCENT += floatval($groupTax);
}
$RecordVars['TAXTOTALPERCENT'] = $RecordVars['VATPERCENT'] = $this->formatNumber($GROUPTAXPERCENT);
foreach($ProductVars as $POSITION => $PRODUCTDATA) {
$ProductVars[$POSITION]['PRODUCTVATPERCENT'] = $this->formatNumber($GROUPTAXPERCENT);
$ProductVars[$POSITION]['PRODUCTVAT'] = $this->formatNumber($PRODUCTDATA["PRODUCTSTOTALAFTERDISCOUNTSUM"] * ($GROUPTAXPERCENT / 100));
$ProductVars[$POSITION]['PRODUCTVATSUM'] = $this->formatNumber($PRODUCTDATA["PRODUCTSTOTALAFTERDISCOUNTSUM"] * ($GROUPTAXPERCENT / 100));
$ProductVars[$POSITION]['PRODUCTTOTALSUM'] = $this->formatNumber($PRODUCTDATA["PRODUCTSTOTALAFTERDISCOUNTSUM"] + $PRODUCTDATA['PRODUCTVAT']);
}
}
$RecordVars['FINALDISCOUNTSUM'] = $discountAmount;
$RecordVars['FINALDISCOUNT'] = $RecordVars['TOTALDISCOUNT'] = $this->formatNumber($discountAmount);
$RecordVars['TAXTOTAL'] = ($RecordVars['TOTALWITHOUTVAT'] - $RecordVars['FINALDISCOUNTSUM']) * ($GROUPTAXPERCENT / 100);
$RecordVars['TAXTOTALSUM'] = $RecordVars['TAXTOTAL'];
$RecordVars['TAXTOTAL'] = $RecordVars['VAT'] = $this->formatNumber($RecordVars['TAXTOTAL']);
$RecordVars['FINALDISCOUNTPERCENT'] = $RecordVars['TOTALDISCOUNTPERCENT'] = $this->formatNumber($discountPercent);
$RecordVars['TOTALAFTERDISCOUNT'] = $this->formatNumber($RecordVars['TOTALWITHOUTVAT'] - $discountAmount);
$RecordVars['TOTALWITHOUTVATSUM'] = $RecordVars['TOTALWITHOUTVAT'] ;
$RecordVars['TOTALWITHOUTVAT'] = $this->formatNumber( $RecordVars['TOTALWITHOUTVAT'] );
$RecordVars['NETTOTAL'] = $this->formatNumber( $RecordVars['NETTOTAL'] );
$RecordVars['TOTALWITHVAT'] = $this->formatNumber( ($RecordVars['TOTALWITHOUTVATSUM'] - $RecordVars['FINALDISCOUNTSUM']) + $RecordVars['TAXTOTALSUM']);
$RecordVars['SHTAXAMOUNTSUM'] = $items['shippingCost'];
$RecordVars['SHTAXAMOUNT'] = $this->formatNumber($items['shippingCost']);
$shPercent = 0;
foreach($items['shipTaxes'] as $taxId => $taxPercent) {
$shPercent += floatval($taxPercent);
}
$RecordVars['SHTAXPERCENT'] = $this->formatNumber($shPercent);
$RecordVars['SHTAXTOTAL'] = $this->formatNumber($RecordVars['SHTAXAMOUNTSUM'] * ($shPercent / 100));
$RecordVars['ADJUSTMENTSUM'] = $context->get('txtAdjustment');
$RecordVars['ADJUSTMENT'] = $this->formatNumber($RecordVars['ADJUSTMENTSUM']);
$RecordVars['TOTAL'] = $this->formatNumber($context->get('hdnGrandTotal'));
$RecordVars['SUBTOTAL'] = $this->formatNumber($context->get('hdnSubTotal'));
$currency = getInventoryCurrencyInfo($context->getModuleName(), $context->getId());
$RecordVars['CURRENCYCODE'] = $currency['currency_code'];
$RecordVars['CURRENCYSYMBOL'] = $currency['currency_symbol'];
if(empty($RecordVars['CURRENCYCODE'])) $RecordVars['CURRENCYCODE'] = '';
if(empty($RecordVars['CURRENCYSYMBOL'])) $RecordVars['CURRENCYSYMBOL'] = '';
$RecordVars['CURRENCYNAME'] = getTranslatedCurrencyString($currency["currency_name"]);
$finalHTML = '';
foreach($ProductVars as $POSITION => $Vars) {
$dummy = \Workflow\VTEntity::getDummy();
$dummy->initData($Vars);
$finalHTML .= \Workflow\VTTemplate::parse($WITHINTEXT, $dummy);
}
$CONTENT = str_replace($ReplaceThis, $finalHTML, $content);
$dummy = \Workflow\VTEntity::getDummy();
$dummy->initData($RecordVars);
$CONTENT = \Workflow\VTTemplate::parse($CONTENT, $dummy);
$envid = $this->get('envid');
if(empty($envid) || $envid == -1) {
return 'yes';
}
$context->setEnvironment($envid, $CONTENT);
return "yes";
}
public function beforeGetTaskform($viewer) {
if(!$this->notEmpty('decimalnumbers')) {
$this->set('decimalnumbers', 2);
}
if(!$this->notEmpty('decimalseparator')) {
$this->set('decimalseparator', ',');
}
if(!$this->notEmpty('thousendsseparator')) {
$this->set('thousendsseparator', '.');
}
if(!$this->notEmpty('content')) {
$this->set('content', '
| Pos |
%G_Qty% |
Text |
%G_LBL_LIST_PRICE% |
%G_Subtotal% |
%G_Discount% |
Mwst |
%M_Total% |
| #PRODUCTBLOC_START# |
| $PRODUCTPOSITION$ |
$PRODUCTQUANTITY$ |
$PRODUCTUSAGEUNIT$ |
$PRODUCTNAME$ |
$PRODUCTLISTPRICE$ |
$PRODUCTTOTAL$ |
$PRODUCTDISCOUNT$ |
$PRODUCTVATPERCENT$
$PRODUCTVATSUM$ |
$PRODUCTSTOTALAFTERDISCOUNT$ |
| #PRODUCTBLOC_END# |
| %G_LBL_NET_PRICE% without TAX |
|
$TOTALWITHOUTVAT$ $CURRENCYSYMBOL$ |
| %G_Discount% |
|
$TOTALDISCOUNT$ $CURRENCYSYMBOL$ |
| Total without TAX |
|
$TOTALAFTERDISCOUNT$ $CURRENCYSYMBOL$ |
| %G_Tax% $VATPERCENT$ % %G_LBL_LIST_OF% $TOTALAFTERDISCOUNT$ |
|
$VAT$ $CURRENCYSYMBOL$ |
| Total with TAX |
|
$TOTALWITHVAT$ $CURRENCYSYMBOL$ |
| %G_LBL_SHIPPING_AND_HANDLING_CHARGES% |
|
$SHTAXAMOUNT$ $CURRENCYSYMBOL$ |
| %G_LBL_TAX_FOR_SHIPPING_AND_HANDLING% |
|
$SHTAXTOTAL$ $CURRENCYSYMBOL$ |
| %G_Adjustment% |
|
$ADJUSTMENT$ $CURRENCYSYMBOL$ |
| %G_LBL_GRAND_TOTAL% ($CURRENCYCODE$) |
|
$TOTAL$ $CURRENCYSYMBOL$ |
');
}
/* Insert here source code to create custom configurations pages */
}
public function beforeSave(&$values) {
/* Insert here source code to modify the values the user submit on configuration */
}
}