build( CashIn::selectRaw('id, CONCAT(name, " | ", rate, "%") as text, rate'), (new PaginateBuilderAttr)->setSearchKeyword($search), new PaginateSchemaCashIn ); } public function findByImportId($id) { return CashIn::where('import_id', $id)->first(); } public function findById($id) { return CashIn::find($id); } public function paginate(PaginateBuilderAttr $paginateBuilderAttr): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( CashIn::with(['project.deal.tax']), $paginateBuilderAttr, new PaginateSchemaCashIn ); } public function fetchActualCashIn($deal_id, $customer_id) { $cek_buku = Invoice::where('deal_id', $deal_id) ->whereHas('payments', function ($q) use ($customer_id) { $q->where('payment_for', 'invoice') ->where('customer_id', $customer_id); }) ->get(); // $cek = collect($cek_buku); // dd($cek); // $data = $cek_buku->map(function ($item, $key) { // return [ // 'payment_date' => $item->payment_date, // 'total' => $item->total_sum, // ]; // }); $data = $cek_buku->flatMap(function ($invoice) { return $invoice->payments->map(function ($payment) { return [ 'payment_date' => $payment['payment_date'], 'total' => numberOnly($payment['amount']), ]; }); })->groupBy('payment_date')->map(function ($items, $payment_date) { return [ 'payment_date' => $payment_date, 'total' => $items->sum('total'), ]; })->values(); return $data; } public function fetch($id) { return CashIn::with(['project' => function ($project) { $project->selectRaw('id, deal_id'); $project->with(['deal']); }, 'cashInDetails'])->findOrFail($id); } public function create(CashInAttr $cashInAttr) { $cashIn = CashIn::create([ 'project_id' => $cashInAttr->getProjectId(), ]); // harusnya ini bisa dipisah foreach ($cashInAttr->getCashInDetails() ?? [] as $detail) { $detail = CashInDetail::create([ 'cash_in_id' => $cashIn->id, 'date' => $detail->getDate(), 'progress_in_plan' => $detail->getProgress(), 'cash_in_plan' => $detail->getPercentage(), ]); } return $this->fetch($cashIn->id); } public function update(CashInAttr $cashInAttr, $id) { $cashIn = $this->fetch($id); $cashIn->update([ 'project_id' => $cashInAttr->getProjectId(), ]); // harusnya ini bisa dipisah CashInDetail::where('cash_in_id', $cashIn->id)->delete(); foreach ($cashInAttr->getCashInDetails() ?? [] as $detail) { $detail = CashInDetail::create([ 'cash_in_id' => $cashIn->id, 'date' => $detail->getDate(), 'progress_in_plan' => $detail->getProgress(), 'cash_in_plan' => $detail->getPercentage(), ]); } return $this->fetch($id); } public function delete($id) { $cashIn = $this->fetch($id); $cashIn->delete(); return $cashIn; } }