How to update price for orderItem in Custom calculations for Quote totals

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • smartinsar
    Member
    • Dec 2021
    • 33

    How to update price for orderItem in Custom calculations for Quote totals

    Hi, can you help me pls.
    Is it possible to update SalesOrderItem while doing calculations.

    My aim is to reduce the price for vat amount, while I change taxRate to zero.

    I'm doing custom calculation following the manual https://docs.espocrm.com/development...tions/#problem

    To change List price I'm trying to get OrderItems and set new price.

    I think that entity manager didn't save the data:

    Code:
    foreach ($OrderItems as $OrderItem) {
    
    
    if($OrderItem->get('id') == $o->id) {
    
    $OrderItem->set('listPrice',$o->unitPrice);
    $OrderItem->set('unitPrice',$o->unitPrice);
    $OrderItem->set('discount','0');
    
    $this->entityManager->saveEntity($OrderItem);
    
    
    $log_response = date("Y-m-d H:i:s") . ' $OrderItem-> ' . $OrderItem->get('id') . ' and $o-> ' . $o->id;
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    
    $log_response = date("Y-m-d H:i:s") . ' listPrice ' . $OrderItem->get('listPrice'). ' unitPrice ' . $OrderItem->get('unitPrice');
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    }
    the full code according to the question here:

    Code:
    <?php
    /* CUSTOM CALCULATION*/
    
    namespace Espo\Custom\Repositories;
    
    use Espo\ORM\Entity;
    use Espo\ORM\EntityManager;
    
    use Espo\Core\ORM\Repositories\RDB;
    
    class SalesOrder extends \Espo\Modules\Sales\Repositories\SalesOrder
    {
    
    
    protected function calculateItems(\Espo\ORM\Entity $entity, array $itemptions = array())
    {
    parent::calculateItems($entity, $itemptions);
    
    $log_response = date("Y-m-d H:i:s") . ' START ' ;
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    
    
    
    $itemList = $entity->get('itemList');
    $amount = 0.0;
    $OrderItems = $this->entityManager->getRDBRepository('SalesOrder')->getRelation($entity, 'items')->find();
    // $OrderItems = $this->getEntityManager()->getRepository('SalesOrder')->getRelation($entity, 'items')->find();
    
    foreach ($itemList as $o) {
    $log_response = date("Y-m-d H:i:s") . ' TAX RATE is ' . $o->taxRate;
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    
    if($o->taxRate != 0) {
    $o->unitPrice = $o->listPrice / (1 + $o->taxRate / 100.0);
    
    $itemTaxAmount = $o->unitPrice * $o->taxRate / 100.0;
    $taxAmount += $o->unitPrice * $o->quantity * $o->taxRate / 100.0;
    $amount += $o->quantity * ($o->unitPrice + $itemTaxAmount);
    
    }
    
    
    if($o->taxRate == 0) {
    $o->unitPrice = $o->listPrice / 1.21;
    
    $log_response = date("Y-m-d H:i:s") . 'TAX RATE ' . $o->taxRate;
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    
    $o->listPrice = $o->unitPrice;
    $itemTaxAmount = 0;
    
    $taxAmount += $o->unitPrice * $o->quantity * $o->taxRate / 100.0;
    
    $amount += $o->quantity * ($o->unitPrice + $itemTaxAmount);
    
    foreach ($OrderItems as $OrderItem) {
    
    
    if($OrderItem->get('id') == $o->id) {
    
    $OrderItem->set('listPrice',$o->unitPrice);
    $OrderItem->set('unitPrice',$o->unitPrice);
    $OrderItem->set('discount','0');
    
    $this->entityManager->saveEntity($OrderItem);
    
    
    $log_response = date("Y-m-d H:i:s") . ' $OrderItem-> ' . $OrderItem->get('id') . ' and $o-> ' . $o->id;
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    
    $log_response = date("Y-m-d H:i:s") . ' listPrice ' . $OrderItem->get('listPrice'). ' unitPrice ' . $OrderItem->get('unitPrice');
    file_put_contents('data/logs/calculateItems-' . date("Y-m-d") . '.log', $log_response . PHP_EOL, FILE_APPEND | LOCK_EX);
    }
    }
    
    }
    
    }
    
    $entity->set('taxAmount', $taxAmount);
    $entity->set('amount', $amount);
    
    
    }
    
    
    }

    Thank you
Working...