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())); } }
/** * @return \yii\db\ActiveQuery */ public function getInvoiceDtl() { return $this->hasOne(InvoiceDtl::className(), ['id_invoice' => 'id_invoice']); }
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); }