App\Ninja\Repositories\PaymentRepository::save PHP Method

save() public method

public save ( $input, $payment = null )
    public function save($input, $payment = null)
    {
        $publicId = isset($input['public_id']) ? $input['public_id'] : false;
        if ($payment) {
            // do nothing
        } elseif ($publicId) {
            $payment = Payment::scope($publicId)->firstOrFail();
            if (Utils::isNinjaDev()) {
                \Log::warning('Entity not set in payment repo save');
            }
        } else {
            $payment = Payment::createNew();
        }
        if ($payment->is_deleted) {
            return $payment;
        }
        $paymentTypeId = false;
        if (isset($input['payment_type_id'])) {
            $paymentTypeId = $input['payment_type_id'] ? $input['payment_type_id'] : null;
            $payment->payment_type_id = $paymentTypeId;
        }
        if (isset($input['payment_date_sql'])) {
            $payment->payment_date = $input['payment_date_sql'];
        } elseif (isset($input['payment_date'])) {
            $payment->payment_date = Utils::toSqlDate($input['payment_date']);
        } else {
            $payment->payment_date = date('Y-m-d');
        }
        if (isset($input['transaction_reference'])) {
            $payment->transaction_reference = trim($input['transaction_reference']);
        }
        if (!$publicId) {
            $clientId = $input['client_id'];
            $amount = Utils::parseFloat($input['amount']);
            if ($paymentTypeId == PAYMENT_TYPE_CREDIT) {
                $credits = Credit::scope()->where('client_id', '=', $clientId)->where('balance', '>', 0)->orderBy('created_at')->get();
                $remaining = $amount;
                foreach ($credits as $credit) {
                    $remaining -= $credit->apply($remaining);
                    if (!$remaining) {
                        break;
                    }
                }
            }
            $payment->invoice_id = $input['invoice_id'];
            $payment->client_id = $clientId;
            $payment->amount = $amount;
        }
        $payment->save();
        return $payment;
    }

Usage Example

 /**
  * @param UpdatePaymentRequest $request
  * @return \Illuminate\Http\RedirectResponse
  */
 public function update(UpdatePaymentRequest $request)
 {
     $payment = $this->paymentRepo->save($request->input(), $request->entity());
     Session::flash('message', trans('texts.updated_payment'));
     return redirect()->to($payment->getRoute());
 }