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;
 }
예제 #3
0
 /**
  * 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());
 }