diff --git a/app/Http/Livewire/ImporterFile.php b/app/Http/Livewire/ImporterFile.php index f7f8badbd5..052f5ba05d 100644 --- a/app/Http/Livewire/ImporterFile.php +++ b/app/Http/Livewire/ImporterFile.php @@ -8,76 +8,6 @@ use App\Models\CustomField; use Log; -global $general, $accessories, $assets, $consumables, $licenses, $users; - -$general = [ - 'category' => 'Category', - 'company' => 'Company', - 'email' => 'Email', - 'item_name' => 'Item Name', - 'location' => 'Location', - 'maintained' => 'Maintained', - 'manufacturer' => 'Manufacturer', - 'notes' => 'Notes', - 'order_number' => 'Order Number', - 'purchase_cost' => 'Purchase Cost', - 'purchase_date' => 'Purchase Date', - 'quantity' => 'Quantity', - 'requestable' => 'Requestable', - 'serial' => 'Serial Number', - 'supplier' => 'Supplier', - 'username' => 'Username', - 'department' => 'Department', -]; - -$accessories = [ - 'model_number' => 'Model Number', -]; - -$assets = [ - 'asset_tag' => 'Asset Tag', - 'asset_model' => 'Model Name', - 'checkout_class' => 'Checkout Type', - 'checkout_location' => 'Checkout Location', - 'image' => 'Image Filename', - 'model_number' => 'Model Number', - 'full_name' => 'Full Name', - 'status' => 'Status', - 'warranty_months' => 'Warranty Months', -]; - -$consumables = [ - 'item_no' => "Item Number", - 'model_number' => "Model Number", - 'min_amt' => "Minimum Quantity", -]; - -$licenses = [ - 'asset_tag' => 'Assigned To Asset', - 'expiration_date' => 'Expiration Date', - 'full_name' => 'Full Name', - 'license_email' => 'Licensed To Email', - 'license_name' => 'Licensed To Name', - 'purchase_order' => 'Purchase Order', - 'reassignable' => 'Reassignable', - 'seats' => 'Seats', -]; - -$users = [ - 'employee_num' => 'Employee Number', - 'first_name' => 'First Name', - 'jobtitle' => 'Job Title', - 'last_name' => 'Last Name', - 'phone_number' => 'Phone Number', - 'manager_first_name' => 'Manager First Name', - 'manager_last_name' => 'Manager Last Name', - 'activated' => 'Activated', - 'address' => 'Address', - 'city' => 'City', - 'state' => 'State', - 'country' => 'Country', -]; - class ImporterFile extends Component { public $activeFile; //this gets automatically populated on instantiation @@ -109,10 +39,76 @@ class ImporterFile extends Component return json_encode($tmp); } + static $general = [ + 'category' => 'Category', + 'company' => 'Company', + 'email' => 'Email', + 'item_name' => 'Item Name', + 'location' => 'Location', + 'maintained' => 'Maintained', + 'manufacturer' => 'Manufacturer', + 'notes' => 'Notes', + 'order_number' => 'Order Number', + 'purchase_cost' => 'Purchase Cost', + 'purchase_date' => 'Purchase Date', + 'quantity' => 'Quantity', + 'requestable' => 'Requestable', + 'serial' => 'Serial Number', + 'supplier' => 'Supplier', + 'username' => 'Username', + 'department' => 'Department', + ]; + + static $accessories = [ + 'model_number' => 'Model Number', + ]; + + static $assets = [ + 'asset_tag' => 'Asset Tag', + 'asset_model' => 'Model Name', + 'checkout_class' => 'Checkout Type', + 'checkout_location' => 'Checkout Location', + 'image' => 'Image Filename', + 'model_number' => 'Model Number', + 'full_name' => 'Full Name', + 'status' => 'Status', + 'warranty_months' => 'Warranty Months', + ]; + + static $consumables = [ + 'item_no' => "Item Number", + 'model_number' => "Model Number", + 'min_amt' => "Minimum Quantity", + ]; + + static $licenses = [ + 'asset_tag' => 'Assigned To Asset', + 'expiration_date' => 'Expiration Date', + 'full_name' => 'Full Name', + 'license_email' => 'Licensed To Email', + 'license_name' => 'Licensed To Name', + 'purchase_order' => 'Purchase Order', + 'reassignable' => 'Reassignable', + 'seats' => 'Seats', + ]; + + static $users = [ + 'employee_num' => 'Employee Number', + 'first_name' => 'First Name', + 'jobtitle' => 'Job Title', + 'last_name' => 'Last Name', + 'phone_number' => 'Phone Number', + 'manager_first_name' => 'Manager First Name', + 'manager_last_name' => 'Manager Last Name', + 'activated' => 'Activated', + 'address' => 'Address', + 'city' => 'City', + 'state' => 'State', + 'country' => 'Country', + ]; + private function getColumns($type) //maybe static? { - global $general, $accessories, $assets, $consumables, $licenses, $users; // TODO - why is this global? - $customFields = []; foreach($this->customFields AS $field) { $customFields[$field->id] = $field->name; @@ -120,22 +116,22 @@ class ImporterFile extends Component switch($type) { case 'asset': - $results = $general + $assets + $customFields; + $results = self::$general + self::$assets + $customFields; break; case 'accessory': - $results = $general + $accessories; + $results = self::$general + self::$accessories; break; case 'consumable': - $results = $general + $consumables; + $results = self::$general + self::$consumables; break; case 'license': - $results = $general + $licenses; + $results = self::$general + self::$licenses; break; case 'user': - $results = $general + $users; + $results = self::$general + self::$users; break; default: - $results = $general; + $results = self::$general; } asort($results); // FIXME - this isn't sorting right yet. return $results; @@ -166,6 +162,87 @@ class ImporterFile extends Component public function postSave() { + if (!$this->activeFile->import_type) { + Log::info("didn't find an import type :("); + $this->statusType ='error'; + $this->statusText = "An import type is required... "; // TODO - translate me! + return false; + } + $this->statusType = 'pending'; + $this->statusText = "Processing..."; + + axios.post('{{ route('api.imports.importFile', $activeFile->id) }}', { + 'import-update': !!@this.update, + 'send-welcome': !!@this.send_welcome, + 'import-type': @this.activeFile.import_type, + 'run-backup': !!@this.run_backup, + 'column-mappings': mappings // FIXME - terrible name + }).then( (body) => { + Log::warn("success!!!") + // Success + $this->statusType = "success"; + $this->statusText = "Success... Redirecting."; + // FIXME - can we 'flash' an update here? + window.location.href = body.data.messages.redirect_url; // definite fixme here! + }, (body) => { + // Failure + console.warn("failure!!!!") + if(body.response.data.status == 'import-errors') { + //window.eventHub.$emit('importErrors', body.messages); + console.warn("import error") + console.dir(body) + @this.set('statusType','error'); + @this.emit('importError', body.response.data.messages) + //@this.set('statusText', "Error: "+body.response.data.messages.join("
")); + } else { + console.warn("not import-errors, just regular errors") + console.dir(body) + @this.set('statusType','error'); + @this.emit('importError',body.response.data.messages ? body.response.data.messages : {'import-type': ['Unknown error']}) + @this.set('statusText',body.response.data.messages ? body.response.data.messages : 'Unknown error'); + } + // @this.emit('hideDetails'); + }); + } +$(function () { + $('#import').on('click',function () { + console.warn("okay, click handler firing!!!") + postSave() + }) + console.warn("JS click handler loaded!") + }) +window.setTimeout(function() { + var what = @this.dinglefarts + console.warn("What is this: ",what) + },1000) + + $class = title_case($this->option('item-type')); + $classString = "App\\Importer\\{$class}Importer"; + $importer = new $classString($filename); + $importer->setCallbacks([$this, 'log'], [$this, 'progress'], [$this, 'errorCallback']) + ->setUserId($this->option('user_id')) + ->setUpdating($this->option('update')) + ->setShouldNotify($this->option('send-welcome')) + ->setUsernameFormat($this->option('username_format')); + + // This $logFile/useFiles() bit is currently broken, so commenting it out for now + // $logFile = $this->option('logfile'); + // \Log::useFiles($logFile); + $this->comment('======= Importing Items from '.$filename.' ========='); + $importer->import(); + + $this->bar = null; + + if (! empty($this->errors)) { + $this->comment('The following Errors were encountered.'); + foreach ($this->errors as $asset => $error) { + $this->comment('Error: Item: '.$asset.' failed validation: '.json_encode($error)); + } + } else { + $this->comment('All Items imported successfully!'); + } + $this->comment(''); + } public function changeTypes() // UNUSED? diff --git a/resources/views/livewire/importer-file.blade.php b/resources/views/livewire/importer-file.blade.php index e65fbdc833..e80783b281 100644 --- a/resources/views/livewire/importer-file.blade.php +++ b/resources/views/livewire/importer-file.blade.php @@ -1,6 +1,6 @@ {{--