public function store()
 {
     $Input = Request::all();
     $objInvoice = \App\Invoice::findorFail($Input['InvoiceID']);
     if (!$this->objLoggedInUser->HasPermission("Edit/{$objInvoice->type}")) {
         abort('404');
     }
     $tWarnings = [];
     foreach ($Input['InvoiceItem'] as $ID => $tItem) {
         if ($ID == 'new') {
             foreach ($tItem as $tNewItem) {
                 if (trim($tNewItem['Title']) || trim($tNewItem['Type'])) {
                     $objInvoiceItem = new \App\InvoiceItem();
                     $objInvoiceItem->title = trim($tNewItem['Title']);
                     $objInvoiceItem->type = trim($tNewItem['Type']);
                     $objInvoiceItem->invoice_id = $objInvoice->id;
                     $objInvoiceItem->save();
                 }
             }
             continue;
         }
         $objInvoiceItem = \App\InvoiceItem::find($ID);
         // Precautionary check to make sure we are not modifying other order items
         if (!$objInvoiceItem || $objInvoiceItem->invoice_id != $objInvoice->id) {
             $tWarnings[] = 'Order Item (id=' . $objInvoiceItem->id . ') could not be saved properly.  Did not match parent order id.';
             continue;
         }
         if (trim(strtolower($objInvoiceItem->title)) != trim(strtolower($tItem['Title'])) || trim(strtolower($objInvoiceItem->type)) != trim(strtolower($tItem['Type']))) {
             $objInvoiceItem->status = \App\InvoiceItem::STATUS_MODIFIED;
         }
         $objInvoiceItem->title = $tItem['Title'];
         $objInvoiceItem->type = $tItem['Type'];
         $objInvoiceItem->save();
     }
     $objInvoice->first_name = Request::get('InvoiceFirstName');
     $objInvoice->last_name = Request::get('InvoiceLastName');
     $objInvoice->type = Request::get('InvoiceType');
     $objInvoice->email = Request::get('InvoiceEmail');
     $objInvoice->phone = Request::get('InvoicePhone');
     $objInvoice->company_name = Request::get('InvoiceCompany');
     $objInvoice->minitrac_invoice_number = Request::get('MinitracInvoiceNumber');
     $objInvoice->comments = $Input['Comments'];
     $objInvoice->assigned_to = $Input['AssignTo'];
     if ($objInvoice->status != \App\Invoice::STATUS_REVIEWED && $Input['Status'] == \App\Invoice::STATUS_REVIEWED) {
         $objInvoice->reviewed_by = $this->objLoggedInUser->id;
     }
     $objInvoice->status = $Input['Status'];
     $objInvoice->save();
     if ($tWarnings) {
         return redirect('admin/invoices/edit/' . $objInvoice->id)->with('FormResponse', ['ResponseType' => static::MESSAGE_WARNING, 'Content' => implode('<br />', $tWarnings) . ' <br />Contact Administrator']);
     }
     if (Request::get('Submit') == 'Save') {
         $Path = $Input['ReturnTo'] == 'Dashboard' ? '' : '/invoices';
     } else {
         $Path = '/invoices/edit/' . $objInvoice->id;
     }
     return redirect("admin{$Path}")->with('FormResponse', ['ResponseType' => static::MESSAGE_SUCCESS, 'Content' => 'Invoice saved successfully']);
 }
 public function ProcessSaleRequest($Input)
 {
     // Get logged user, or register as guest
     $objUser = \Auth::User() ?: \App\User::GetGuestAccount();
     // TODO:  Nice error handling would be nice
     if (!$objUser) {
         App::abort('500', 'Invalid form request:  Could not determine user account to submit form');
     }
     // Create invoice
     $objInvoice = new \App\Invoice();
     $objInvoice->user_id = $objUser->id;
     $objInvoice->type = $Input['RequestType'];
     $objInvoice->company_name = $Input['CompanyName'];
     $objInvoice->first_name = $Input['FirstName'];
     $objInvoice->last_name = $Input['LastName'];
     $objInvoice->email = $Input['EmailAddress'];
     $objInvoice->phone = $Input['PhoneNumber'];
     $objInvoice->status = \App\Invoice::STATUS_NEW;
     $objInvoice->comments = $Input['Comments'];
     if (!$objInvoice->save()) {
         App::abort('500', 'Master invoice could not save.  Breaking page.  Not saving invoice items.');
     }
     // Invoice Items
     $tInvoiceItemFields = ['Brand', 'Environment', 'MotivePower', 'Capacity', 'Attachment', 'OperatingHours', 'Accessories' => ['LP Tank', 'Opportunity Charger', 'Seat Belt', 'Strobe Light', 'Fire Extinguisher', 'Side Shifter']];
     if ($Input['RequestType'] == static::REQUEST_TYPE_RENTAL) {
         unset($tInvoiceItemFields[0]);
     }
     // Brand
     foreach ($tInvoiceItemFields as $Item) {
         if (is_array($Item)) {
             foreach ($Item as $Accessory) {
                 if (in_array($Accessory, $Input['Accessories'])) {
                     $objInvoiceItem = new \App\InvoiceItem();
                     $objInvoiceItem->invoice_id = $objInvoice->id;
                     $objInvoiceItem->type = 'Accessory';
                     $objInvoiceItem->title = "{$Accessory}";
                     $objInvoiceItem->status = \App\InvoiceItem::STATUS_ACTIVE;
                     $objInvoiceItem->save();
                 }
             }
         } else {
             if ($Input[$Item]) {
                 $objInvoiceItem = new \App\InvoiceItem();
                 $objInvoiceItem->invoice_id = $objInvoice->id;
                 $objInvoiceItem->type = $Item;
                 $objInvoiceItem->title = $Input[$Item];
                 $objInvoiceItem->status = \App\InvoiceItem::STATUS_ACTIVE;
                 $objInvoiceItem->save();
             }
         }
     }
     EmailController::sendSalesEmail($Input);
     return redirect('/forms/success');
 }