Пример #1
0
 protected function createInvoice($params)
 {
     $invoice = new Invoice();
     $invoice->id_vendor = $params['id_vendor'];
     $invoice->invoice_date = $params['date'];
     $invoice->invoice_value = $params['value'];
     $invoice->invoice_type = $params['invoice_type'];
     $invoice->due_date = date('Y-m-d', strtotime('+1 month'));
     $invoice->status = 0;
     if (!$invoice->save()) {
         throw new UserException(implode("\n", $invoice->getFirstErrors()));
     }
     $invDtl = new InvoiceDtl();
     $invDtl->id_invoice = $invoice->id_invoice;
     $invDtl->id_reff = $params['id_ref'];
     $invDtl->trans_value = $params['value'];
     if (!$invDtl->save()) {
         throw new UserException(implode("\n", $invDtl->getFirstErrors()));
     }
 }
Пример #2
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getInvoiceDtl()
 {
     return $this->hasOne(InvoiceDtl::className(), ['id_invoice' => 'id_invoice']);
 }
Пример #3
0
 public function createFromSales($data, $model = null)
 {
     $inv_vals = ArrayHelper::map($data['details'], 'id_sales', 'value');
     $ids = array_keys($inv_vals);
     $vendors = [];
     $sales_values = Sales::find()->where(['id_sales' => $ids])->indexBy('id_sales')->asArray()->all();
     $vendor = null;
     foreach ($purchase_values as $row) {
         $vendor = $row['id_customer'];
         $vendors[$row['id_customer']] = true;
     }
     if (count($vendors) !== 1) {
         throw new UserException('Vendor harus sama');
     }
     $sales_invoiced = InvoiceDtl::find()->select(['id_reff', 'total' => 'sum(trans_value)'])->where(['reff_type' => InvoiceDtl::TYPE_SALES, 'id_reff' => $ids])->groupBy('id_reff')->indexBy('id_reff')->asArray()->all();
     $data['id_vendor'] = $vendor;
     $data['invoice_type'] = MInvoice::TYPE_OUT;
     $details = [];
     foreach ($inv_vals as $id => $value) {
         $sisa = $sales_values[$id]['sales_value'] - $purchase_values[$id]['discount'];
         if (isset($sales_invoiced[$id])) {
             $sisa -= $sales_invoiced[$id]['total'];
         }
         if ($value > $sisa) {
             throw new UserException('Tagihan lebih besar dari sisa');
         }
         $details[] = ['id_reff' => $id, 'trans_value' => $value];
     }
     $data['details'] = $details;
     return static::create($data, $model);
 }