Exemple #1
0
 public function Execute()
 {
     $conn = \ZCL\DB\DB::getConnect();
     $conn->StartTrans();
     $ret = 0;
     // торговая  наценка
     $amount = 0;
     foreach ($this->detaildata as $value) {
         //списываем  со склада
         $stockfrom = Stock::getStock($this->headerdata['storefrom'], $value['item_id'], $value['partion']);
         $sc = new SubConto($this, $value['type'], 0 - $value['quantity'] / 1000 * $stockfrom->partion);
         $sc->setStock($stockfrom->stock_id);
         $sc->setQuantity(0 - $value['quantity']);
         $sc->save();
         $store = Store::load($this->headerdata['storeto']);
         if ($store->store_type == Store::STORE_TYPE_OPT) {
             //оптовый
             $stockto = Stock::getStock($this->headerdata['storeto'], $value['item_id'], $value['price'], true);
             $sc = new SubConto($this, $value['type'], $value['quantity'] / 1000 * $stockto->price);
             $sc->setStock($stockto->stock_id);
             $sc->setQuantity($value['quantity']);
             $sc->save();
         }
         if ($store->store_type == Store::STORE_TYPE_RET) {
             //розница
             $stockto = Stock::getFirst("store_id={$this->headerdata['storeto']} and item_id={$value['item_id']} and price={$value['price']} and partion={$value['partion']} and closed <> 1");
             if ($stockto instanceof Stock) {
             } else {
                 $stockto = new Stock();
                 $stockto->document_id = $this->document_id;
                 $stockto->store_id = $this->headerdata['storeto'];
                 $stockto->item_id = $value['item_id'];
                 $stockto->price = $value['price'];
                 $stockto->partion = $value['partion'];
                 // себестоимость
                 $stockto->Save();
             }
             $sc = new SubConto($this, 282, $value['quantity'] / 1000 * $stockto->price);
             $sc->setStock($stockto->stock_id);
             $sc->setQuantity($value['quantity']);
             $sc->save();
             $ret += $value['quantity'] / 1000 * ($value['price'] - $value['partion']);
             $amount += $value['quantity'] / 1000 * $value['price'];
         }
         if ($store->store_type == Store::STORE_TYPE_RET_SUM) {
             //розница суммовой учет
             //специальный  товар  для  cуммового  учета
             $item = \ZippyERP\ERP\Entity\Item::getSumItem();
             $stockto = Stock::getStock($this->headerdata['storeto'], $item->item_id, 1, true);
             $sc = new SubConto($this, 282, $value['quantity'] / 1000 * $value['price']);
             $sc->setStock($stockto->stock_id);
             $sc->setQuantity($value['quantity'] * $value['price']);
             //цена  единицы  товара - 1 копейка.
             $sc->save();
             $ret += $value['quantity'] / 1000 * ($value['price'] - $value['partion']);
             $amount += $value['quantity'] / 1000 * $value['price'];
         }
     }
     if ($amount > 0) {
         // розница
         Entry::AddEntry(282, 281, $amount - $ret, $this->document_id, $this->document_date);
         Entry::AddEntry(282, 285, $ret, $this->document_id, $this->document_date);
         $sc = new SubConto($this, 285, 0 - $ret);
         $sc->setExtCode($store->store_id);
         //запоминаем на  каком  магащине  сколько наценки
         $sc->save();
     }
     $conn->CompleteTrans();
     return true;
 }