public function save($publicId = null, $input) { if ($publicId) { $payment = Payment::scope($publicId)->firstOrFail(); } else { $payment = Payment::createNew(); } $paymentTypeId = $input['payment_type_id'] ? $input['payment_type_id'] : null; $payment->payment_type_id = $paymentTypeId; $payment->payment_date = Utils::toSqlDate($input['payment_date']); $payment->transaction_reference = trim($input['transaction_reference']); if (!$publicId) { $clientId = Client::getPrivateId($input['client']); $amount = Utils::parseFloat($input['amount']); if ($paymentTypeId == PAYMENT_TYPE_CREDIT) { $credits = Credit::scope()->where('client_id', '=', $clientId)->where('balance', '>', 0)->orderBy('created_at')->get(); $applied = 0; foreach ($credits as $credit) { $applied += $credit->apply($amount); if ($applied >= $amount) { break; } } } $payment->client_id = $clientId; $payment->invoice_id = isset($input['invoice']) && $input['invoice'] != "-1" ? Invoice::getPrivateId($input['invoice']) : null; $payment->amount = $amount; } $payment->save(); return $payment; }
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { if ($this->action == ACTION_ARCHIVE) { return []; } $publicId = $this->route('invoices'); $invoiceId = Invoice::getPrivateId($publicId); $rules = ['invoice_items' => 'valid_invoice_items', 'invoice_number' => 'unique:invoices,invoice_number,' . $invoiceId . ',id,account_id,' . Auth::user()->account_id, 'discount' => 'positive']; return $rules; }
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $publicId = Request::get('public_id'); $invoiceId = $publicId ? Invoice::getPrivateId($publicId) : ''; $rules = ['client.contacts' => 'valid_contacts', 'invoice_number' => 'required|unique:invoices,invoice_number,' . $invoiceId . ',id,account_id,' . Auth::user()->account_id, 'discount' => 'positive']; /* There's a problem parsing the dates if (Request::get('is_recurring') && Request::get('start_date') && Request::get('end_date')) { $rules['end_date'] = 'after' . Request::get('start_date'); } */ return $rules; }
public function getErrors($input) { $contact = (array) $input->client->contacts[0]; $rules = ['email' => 'email|required_without:first_name', 'first_name' => 'required_without:email']; $validator = \Validator::make($contact, $rules); if ($validator->fails()) { return $validator; } $invoice = (array) $input; $invoiceId = isset($invoice['public_id']) && $invoice['public_id'] ? Invoice::getPrivateId($invoice['public_id']) : null; $rules = ['invoice_number' => 'required|unique:invoices,invoice_number,' . $invoiceId . ',id,account_id,' . \Auth::user()->account_id, 'discount' => 'positive']; if ($invoice['is_recurring'] && $invoice['start_date'] && $invoice['end_date']) { $rules['end_date'] = 'after:' . $invoice['start_date']; } $validator = \Validator::make($invoice, $rules); if ($validator->fails()) { return $validator; } return false; }
public function store(CreatePaymentRequest $request) { $input = $request->input(); $input['invoice_id'] = Invoice::getPrivateId($input['invoice']); $input['client_id'] = Client::getPrivateId($input['client']); $payment = $this->paymentRepo->save($input); if (Input::get('email_receipt')) { $this->contactMailer->sendPaymentConfirmation($payment); Session::flash('message', trans('texts.created_payment_emailed_client')); } else { Session::flash('message', trans('texts.created_payment')); } return redirect()->to($payment->client->getRoute()); }