コード例 #1
0
 private function save($publicId = null)
 {
     $action = Input::get('action');
     if ($action == 'archive' || $action == 'delete') {
         return InvoiceController::bulk();
     }
     $input = json_decode(Input::get('data'));
     $invoice = $input->invoice;
     // if ($errors = $this->invoiceRepo->getErrors($invoice))
     // {
     // 	Session::flash('error', trans('texts.invoice_error'));
     // 	return Redirect::to('invoices/create')
     // 		->withInput()->withErrors($errors);
     // }
     // else
     // {
     $this->taxRateRepo->save($input->tax_rates);
     $clientData = (array) $invoice->client;
     $client = $this->clientRepo->save($invoice->client->public_id, $clientData);
     $invoiceData = (array) $invoice;
     $invoiceData['client_id'] = $client->id;
     $invoiceData['nit'] = $client->nit;
     $invoiceData['name'] = $client->name;
     $invoice = $this->invoiceRepo->save($publicId, $invoiceData);
     $account = Auth::user()->account;
     if ($account->invoice_taxes != $input->invoice_taxes || $account->invoice_item_taxes != $input->invoice_item_taxes || $account->invoice_design_id != $input->invoice->invoice_design_id) {
         $account->invoice_taxes = $input->invoice_taxes;
         $account->invoice_item_taxes = $input->invoice_item_taxes;
         $account->invoice_design_id = $input->invoice->invoice_design_id;
         $account->save();
     }
     $client->load('contacts');
     $sendInvoiceIds = [];
     foreach ($client->contacts as $contact) {
         if ($contact->send_invoice || count($client->contacts) == 1) {
             $sendInvoiceIds[] = $contact->id;
         }
     }
     foreach ($client->contacts as $contact) {
         $invitation = Invitation::scope()->whereContactId($contact->id)->whereInvoiceId($invoice->id)->first();
         if (in_array($contact->id, $sendInvoiceIds) && !$invitation) {
             $invitation = Invitation::createNew();
             $invitation->invoice_id = $invoice->id;
             $invitation->contact_id = $contact->id;
             $invitation->invitation_key = str_random(RANDOM_KEY_LENGTH);
             $invitation->save();
         } else {
             if (!in_array($contact->id, $sendInvoiceIds) && $invitation) {
                 $invitation->delete();
             }
         }
     }
     $branch = Auth::user()->branch;
     $invoice_dateCC = date("Ymd", strtotime($invoice->invoice_date));
     $invoice_date = date("d/m/Y", strtotime($invoice->invoice_date));
     $invoice_date_limitCC = date("d/m/Y", strtotime($branch->deadline));
     require_once app_path() . '/includes/control_code.php';
     $cod_control = codigoControl($invoice->invoice_number, $client->nit, $invoice_dateCC, $invoice->amount, $branch->number_autho, $branch->key_dosage);
     $invoice->control_code = $cod_control;
     $invoice->number_autho = $branch->number_autho;
     $invoice->deadline = $branch->deadline;
     $invoice->key_dosage = $branch->key_dosage;
     $invoice->activity_pri = $branch->activity_pri;
     $invoice->activity_sec1 = $branch->activity_sec1;
     $invoice->law = $branch->law;
     $invoice->branch = $branch->name;
     $invoice->address1 = $branch->address1;
     $invoice->address2 = $branch->address2;
     $invoice->work_phone = $branch->postal_code;
     $invoice->city = $branch->city;
     $invoice->state = $branch->state;
     $invoice->save();
     require_once app_path() . '/includes/BarcodeQR.php';
     $ice = $invoice->amount - $invoice->fiscal;
     $desc = $invoice->subtotal - $invoice->amount;
     $amount = number_format($invoice->amount, 2, '.', '');
     $fiscal = number_format($invoice->fiscal, 2, '.', '');
     $icef = number_format($ice, 2, '.', '');
     $descf = number_format($desc, 2, '.', '');
     if ($icef == "0.00") {
         $icef = 0;
     }
     if ($descf == "0.00") {
         $descf = 0;
     }
     $qr = new BarcodeQR();
     $datosqr = '1006909025|' . $invoice->invoice_number . '|' . $invoice->number_autho . '|' . $invoice_date . '|' . $amount . '|' . $fiscal . '|' . $invoice->control_code . '|' . $invoice->nit . '|' . $icef . '|0|0|' . $descf;
     $qr->text($datosqr);
     $qr->draw(150, 'qr/' . $account->account_key . '_' . $invoice->invoice_number . '.png');
     $input_file = 'qr/' . $account->account_key . '_' . $invoice->invoice_number . '.png';
     $output_file = 'qr/' . $account->account_key . '_' . $invoice->invoice_number . '.jpg';
     $inputqr = imagecreatefrompng($input_file);
     list($width, $height) = getimagesize($input_file);
     $output = imagecreatetruecolor($width, $height);
     $white = imagecolorallocate($output, 255, 255, 255);
     imagefilledrectangle($output, 0, 0, $width, $height, $white);
     imagecopy($output, $inputqr, 0, 0, 0, 0, $width, $height);
     imagejpeg($output, $output_file);
     $invoice->qr = HTML::image_data('qr/' . $account->account_key . '_' . $invoice->invoice_number . '.jpg');
     $invoice->save();
     $message = trans($publicId ? 'texts.updated_invoice' : 'texts.created_invoice');
     if ($input->invoice->client->public_id == '-1') {
         $message = $message . ' ' . trans('texts.and_created_client');
         $url = URL::to('clients/' . $client->public_id);
         Utils::trackViewed($client->getDisplayName(), ENTITY_CLIENT, $url);
     }
     if ($action == 'clone') {
         return InvoiceController::cloneInvoice($publicId);
     } else {
         if ($action == 'email') {
             if (Auth::user()->confirmed) {
                 $message = trans('texts.emailed_invoice');
                 $this->mailer->sendInvoice($invoice);
                 Session::flash('message', $message);
             } else {
                 $errorMessage = trans(Auth::user()->registered ? 'texts.confirmation_required' : 'texts.registration_required');
                 Session::flash('error', $errorMessage);
                 Session::flash('message', $message);
             }
         } else {
             Session::flash('message', $message);
         }
     }
     $url = 'invoices/' . $invoice->public_id . '/edit';
     return Redirect::to($url);
     // }
 }