App\Http\Controllers\InvoiceApiController::store PHP Method

store() public method

public store ( CreateInvoiceAPIRequest $request )
$request App\Http\Requests\CreateInvoiceAPIRequest
    public function store(CreateInvoiceAPIRequest $request)
    {
        $data = Input::all();
        $error = null;
        if (isset($data['email'])) {
            $email = $data['email'];
            $client = Client::scope()->whereHas('contacts', function ($query) use($email) {
                $query->where('email', '=', $email);
            })->first();
            if (!$client) {
                $validator = Validator::make(['email' => $email], ['email' => 'email']);
                if ($validator->fails()) {
                    $messages = $validator->messages();
                    return $messages->first();
                }
                $clientData = ['contact' => ['email' => $email]];
                foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'private_notes', 'currency_code'] as $field) {
                    if (isset($data[$field])) {
                        $clientData[$field] = $data[$field];
                    }
                }
                foreach (['first_name', 'last_name', 'phone'] as $field) {
                    if (isset($data[$field])) {
                        $clientData['contact'][$field] = $data[$field];
                    }
                }
                $client = $this->clientRepo->save($clientData);
            }
        } else {
            if (isset($data['client_id'])) {
                $client = Client::scope($data['client_id'])->firstOrFail();
            }
        }
        $data = self::prepareData($data, $client);
        $data['client_id'] = $client->id;
        $invoice = $this->invoiceService->save($data);
        $payment = false;
        if ($invoice->isInvoice()) {
            if (isset($data['auto_bill']) && boolval($data['auto_bill'])) {
                $payment = $this->paymentService->autoBillInvoice($invoice);
            } else {
                if (isset($data['paid']) && $data['paid']) {
                    $payment = $this->paymentRepo->save(['invoice_id' => $invoice->id, 'client_id' => $client->id, 'amount' => $data['paid']]);
                }
            }
        }
        if (isset($data['email_invoice']) && $data['email_invoice']) {
            if ($payment) {
                $this->mailer->sendPaymentConfirmation($payment);
            } elseif (!$invoice->is_recurring) {
                $this->mailer->sendInvoice($invoice);
            }
        }
        $invoice = Invoice::scope($invoice->public_id)->with('client', 'invoice_items', 'invitations')->first();
        if (isset($data['download_invoice']) && boolval($data['download_invoice'])) {
            return $this->fileReponse($invoice->getFileName(), $invoice->getPDFString());
        }
        return $this->itemResponse($invoice);
    }