/**
  * Display a listing of the resource.
  * GET /tax_rates
  *
  * @return Response
  */
 public function index()
 {
     $user = Auth::user()->id;
     // Grab all the user billers
     $tax_rates = $this->tax_rate->where('user_id', $user)->get();
     return View::make('tax_rates.index', compact('tax_rates'));
 }
 /**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
 public function store()
 {
     $sucurasl = Branch::find(Session::get('branch_id'));
     if ($sucurasl->type_third != 2) {
         if (sizeof(Input::get('productos')) > 1) {
             if (Input::has('client')) {
                 $account = Account::where('id', Auth::user()->account_id)->first();
                 $branch = Branch::find(Session::get('branch_id'));
                 $tax = TaxRate::where("name", 'ICE')->first();
                 $invoice = Invoice::createNew();
                 $invoice->setBranch(Session::get('branch_id'));
                 $invoice->setTerms(trim(Input::get('terms')));
                 $invoice->setPublicNotes(trim(Input::get('public_notes')));
                 $invoice->setInvoiceDate(trim(Input::get('invoice_date')));
                 $invoice->setClient(trim(Input::get('client')));
                 $invoice->setEconomicActivity($branch->economic_activity);
                 $dateparser = explode("/", Input::get('due_date'));
                 if (Input::get('due_date')) {
                     $date = $dateparser[2] . '-' . $dateparser[1] . '-' . $dateparser[0];
                     $invoice->setDueDate($date);
                 }
                 $invoice->setDiscount(trim(Input::get('discount')));
                 $invoice->setClientName(trim(Input::get('razon')));
                 $invoice->setClientNit(trim(Input::get('nit')));
                 $invoice->setUser(Auth::user()->id);
                 $dateparser = explode("/", Input::get('invoice_date'));
                 $date = $dateparser[2] . '-' . $dateparser[1] . '-' . $dateparser[0];
                 $invoice->setInvoiceDate($date);
                 $invoice->importe_neto = trim(Input::get('total'));
                 $invoice->importe_total = trim(Input::get('subtotal'));
                 if (Input::get('nota')) {
                     $nota = array();
                     $nota[0] = ['date' => date('d-m-Y H:i:s'), 'note' => '<b>' . Auth::user()->first_name . " " . Auth::user()->last_name . "</b>: " . trim(Input::get('nota'))];
                     $invoice->note = json_encode($nota);
                 }
                 //ACCOUTN AND BRANCK
                 $invoice->balance = trim(Input::get('total'));
                 $invoice->discount = Input::get('descuento_send');
                 $invoice->setAccountName($account->name);
                 $invoice->setAccountNit($account->nit);
                 $invoice->setBranchName($branch->name);
                 $invoice->setAddress1($branch->address1);
                 $invoice->setAddress2($branch->address2);
                 $invoice->setPhone($branch->work_phone);
                 $invoice->setCity($branch->city);
                 $invoice->setState($branch->state);
                 $invoice->setNumberAutho($branch->number_autho);
                 $invoice->setKeyDosage($branch->key_dosage);
                 $invoice->setTypeThird($branch->type_third);
                 $invoice->setDeadline($branch->deadline);
                 $invoice->setLaw($branch->law);
                 $type_document = TypeDocument::where('account_id', Auth::user()->account_id)->first();
                 $numAuth = $invoice->number_autho;
                 $invoice->invoice_number = branch::getInvoiceNumber();
                 $numfactura = $invoice->invoice_number;
                 $nit = $invoice->client_nit;
                 $fechaEmision = date("Ymd", strtotime($invoice->invoice_date));
                 $total = $invoice->importe_neto;
                 $llave = $branch->key_dosage;
                 $codigoControl = Utils::getControlCode($numfactura, $nit, $fechaEmision, $total, $numAuth, $llave);
                 //calculates ICE
                 //$desc = $invoice->subtotal-$invoice->amount;
                 $invoice->importe_ice = number_format(Input::get('importe_ice'), 2, '.', '');
                 $invoice->debito_fiscal = number_format(Input::get('importe_fiscal'), 2, '.', '');
                 //$invoice->discount = number_format($desc, 2, '.', '');
                 $invoice->setControlCode($codigoControl);
                 $documents = TypeDocumentBranch::where('branch_id', $invoice->branch_id)->orderBy('id', 'ASC')->get();
                 foreach ($documents as $document) {
                     $actual_document = TypeDocument::where('id', $document->type_document_id)->first();
                     if ($actual_document->master_id == 1) {
                         $id_documento = $actual_document->id;
                     }
                 }
                 $invoice->setJavascript($id_documento);
                 if (Input::get('printer_type') == 1) {
                     $invoice->logo = 1;
                 } else {
                     $invoice->logo = 0;
                 }
                 $invoice->sfc = $branch->sfc;
                 $invoice->qr = $invoice->account_nit . '|' . $invoice->invoice_number . '|' . $invoice->number_autho . '|' . $invoice->invoice_date . '|' . $invoice->importe_neto . '|' . $invoice->importe_total . '|' . $invoice->client_nit . '|' . $invoice->importe_ice . '|0|0|' . $invoice->descuento_total;
                 if ($account->is_uniper) {
                     $invoice->account_uniper = $account->uniper;
                 }
                 $invoice->save();
                 $invoice_items = [];
                 foreach (Input::get('productos') as $producto) {
                     $prod = $producto;
                     $product = Product::where('account_id', Auth::user()->account_id)->where('product_key', $producto["'product_key'"])->first();
                     if ($product != null) {
                         $invoiceItem = InvoiceItem::createNew();
                         $invoiceItem->setInvoice($invoice->id);
                         $invoiceItem->setProduct($product->id);
                         $invoiceItem->setProductKey($producto["'product_key'"]);
                         $proo = DB::table('products')->where('product_key', '=', $producto["'product_key'"])->first();
                         $invoiceItem->setNotes($proo->notes);
                         $invoiceItem->setCost($producto["'cost'"]);
                         ///$invoiceItem->setQty($producto["'qty'"]/$proo->units+$producto["'pack'"]);
                         $invoiceItem->setQty($proo->units * $producto["'pack'"]);
                         $invoiceItem->packs = $producto["'pack'"];
                         $invoiceItem->discount = $producto["'disc'"];
                         $invoiceItem->boni = $producto["'bonus'"];
                         $invoiceItem->is_web = 1;
                         $invoiceItem->price_type_id = Auth::user()->price_type_id;
                         $invoiceItem->subtotal = round($producto["'pack'"] * $producto["'cost'"], 2);
                         //$invoiceItem->importe_neto=$producto["'pack'"]*$producto["'cost'"]-$producto["'bonus'"]*$producto["'cost'"]-$producto["'disc'"];
                         //$invoiceItem->importe_fiscal=
                         $invoiceItem->ice = $proo->cc * $invoiceItem->getQty() / 1000 * $tax->rate;
                         $invoiceItem->save();
                         $new_item = ['boni' => $producto["'bonus'"], 'desc' => $producto["'disc'"], 'qty' => $producto["'qty'"] / $proo->units + $producto["'pack'"], 'id' => $invoice->id, 'units' => 1, 'cost' => $producto["'cost'"], 'ice' => $proo->ice, 'cc' => $proo->cc * $proo->units, 'product_key' => $producto["'product_key'"], 'notes' => $proo->notes, 'packs' => $producto["'qty'"] + $proo->units * $producto["'pack'"], 'is_web' => 1];
                         array_push($invoice_items, $new_item);
                     }
                 }
                 //adicionando cargo al cliente
                 $cliente = Client::find($invoice->client_id);
                 $cliente->balance = $cliente->balance + $invoice->balance;
                 $cliente->save();
                 $new = ['fecha' => $invoice->invoice_date, 'name' => $invoice->client_name, 'cod_control' => $invoice->control_code, 'nit' => $invoice->client_nit, 'invoice_number' => $invoice->invoice_number, 'client_id' => $invoice->client_id . "1", 'user_id' => $invoice->user_id, 'ice' => $tax->rate, 'deadline' => $branch->deadline, 'account_id' => '1', 'branch_id' => $branch->id, 'law' => $branch->law, 'activity_pri' => $branch->economic_activity, 'activity_sec1' => "-", 'address1' => $branch->address1, 'address2' => $branch->address2, 'number_autho' => $branch->number_autho, 'postal_code' => $branch->sfc, 'city' => $branch->city, 'state' => $branch->state, 'country_id' => $branch->id, 'key_dosage' => $branch->key_dosage, 'branch' => $branch->name, 'invoice_items' => $invoice_items, 'terceros' => $branch->terceros, 'discount' => $invoice->discount];
                 /*
                 						return $new;*/
                 $array = [];
                 array_push($array, $new);
                 //$this->saveBackUpToMirror($array);
                 //print_r($array);
                 //return;
                 $newInvoice = Invoice::where('id', '=', $invoice->getId())->first();
                 return Redirect::to("factura/" . $newInvoice->id);
             }
             Session::flash('error', 'por favor ingrese cliente');
             return Redirect::to('factura/create');
         }
         Session::flash('error', 'por favor ingrese productos');
         return Redirect::to('factura/create');
     }
     Session::flash('error', 'La Dosificación es para un dispositivo POS razon por la cual no se puede facturar via web');
     return Redirect::to('factura');
 }
 /**
  * Show the form for editing the specified resource.
  * GET /invoices/{id}/edit
  *
  * @param  int  $id
  * @return Response
  */
 public function edit($id)
 {
     $invoice = Invoice::find($id);
     $user = Auth::user();
     $clients = $user->client;
     $billers = $user->biller;
     $tax_rates = TaxRate::where('user_id', $user->id)->get();
     $items = $invoice->item;
     $countries = Country::all();
     $currency = Country::where('id', $invoice->currency_id)->pluck('currency_code');
     return View::make('invoices.edit', compact('invoice', 'clients', 'billers', 'tax_rates', 'items', 'countries', 'currency'));
 }