mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-08-11 15:34:21 -04:00
Working on data import
This commit is contained in:
parent
d98a185c04
commit
ff139bc09c
@ -31,6 +31,12 @@ class BaseTransformer extends TransformerAbstract
|
|||||||
return isset($this->maps['countries'][$name]) ? $this->maps['countries'][$name] : null;
|
return isset($this->maps['countries'][$name]) ? $this->maps['countries'][$name] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getCountryIdBy2($name)
|
||||||
|
{
|
||||||
|
$name = strtolower($name);
|
||||||
|
return isset($this->maps['countries2'][$name]) ? $this->maps['countries2'][$name] : null;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getFirstName($name)
|
protected function getFirstName($name)
|
||||||
{
|
{
|
||||||
$name = Utils::splitName($name);
|
$name = Utils::splitName($name);
|
||||||
|
34
app/Ninja/Import/Invoiceable/ClientTransformer.php
Normal file
34
app/Ninja/Import/Invoiceable/ClientTransformer.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php namespace App\Ninja\Import\Invoiceable;
|
||||||
|
|
||||||
|
use App\Ninja\Import\BaseTransformer;
|
||||||
|
use League\Fractal\Resource\Item;
|
||||||
|
|
||||||
|
class ClientTransformer extends BaseTransformer
|
||||||
|
{
|
||||||
|
public function transform($data)
|
||||||
|
{
|
||||||
|
if ($this->hasClient($data->client_name)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Item($data, function ($data) {
|
||||||
|
return [
|
||||||
|
'name' => $data->client_name,
|
||||||
|
'work_phone' => $data->tel,
|
||||||
|
'website' => $data->website,
|
||||||
|
'address1' => $data->address,
|
||||||
|
'city' => $data->city,
|
||||||
|
'state' => $data->state,
|
||||||
|
'postal_code' => $data->postcode,
|
||||||
|
'country_id' => $this->getCountryIdBy2($data->country),
|
||||||
|
'private_notes' => $data->notes,
|
||||||
|
'contacts' => [
|
||||||
|
[
|
||||||
|
'email' => $data->email,
|
||||||
|
'phone' => $data->mobile,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
37
app/Ninja/Import/Invoiceable/InvoiceTransformer.php
Normal file
37
app/Ninja/Import/Invoiceable/InvoiceTransformer.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php namespace App\Ninja\Import\Invoiceable;
|
||||||
|
|
||||||
|
use App\Ninja\Import\BaseTransformer;
|
||||||
|
use League\Fractal\Resource\Item;
|
||||||
|
|
||||||
|
class InvoiceTransformer extends BaseTransformer
|
||||||
|
{
|
||||||
|
public function transform($data)
|
||||||
|
{
|
||||||
|
if ( ! $this->getClientId($data->client_name)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->hasInvoice($data->ref)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Item($data, function ($data) {
|
||||||
|
return [
|
||||||
|
'client_id' => $this->getClientId($data->client_name),
|
||||||
|
'invoice_number' => $data->ref,
|
||||||
|
'po_number' => $data->po_number,
|
||||||
|
'invoice_date_sql' => $data->date,
|
||||||
|
'due_date_sql' => $data->due_date,
|
||||||
|
'invoice_footer' => $data->footer,
|
||||||
|
'paid' => (float) $data->paid,
|
||||||
|
'invoice_items' => [
|
||||||
|
[
|
||||||
|
'notes' => $data->description,
|
||||||
|
'cost' => (float) $data->total,
|
||||||
|
'qty' => 1,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
19
app/Ninja/Import/Invoiceable/PaymentTransformer.php
Normal file
19
app/Ninja/Import/Invoiceable/PaymentTransformer.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php namespace App\Ninja\Import\Invoiceable;
|
||||||
|
|
||||||
|
use App\Ninja\Import\BaseTransformer;
|
||||||
|
use League\Fractal\Resource\Item;
|
||||||
|
|
||||||
|
class PaymentTransformer extends BaseTransformer
|
||||||
|
{
|
||||||
|
public function transform($data, $maps)
|
||||||
|
{
|
||||||
|
return new Item($data, function ($data) use ($maps) {
|
||||||
|
return [
|
||||||
|
'amount' => $data->paid,
|
||||||
|
'payment_date_sql' => $data->date_paid,
|
||||||
|
'client_id' => $data->client_id,
|
||||||
|
'invoice_id' => $data->invoice_id,
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -36,7 +36,7 @@ class ImportService
|
|||||||
IMPORT_FRESHBOOKS,
|
IMPORT_FRESHBOOKS,
|
||||||
IMPORT_HARVEST,
|
IMPORT_HARVEST,
|
||||||
IMPORT_HIVEAGE,
|
IMPORT_HIVEAGE,
|
||||||
//IMPORT_INVOICEABLE,
|
IMPORT_INVOICEABLE,
|
||||||
//IMPORT_NUTCACHE,
|
//IMPORT_NUTCACHE,
|
||||||
//IMPORT_RONIN,
|
//IMPORT_RONIN,
|
||||||
//IMPORT_WAVE,
|
//IMPORT_WAVE,
|
||||||
@ -190,19 +190,25 @@ class ImportService
|
|||||||
$clientMap = [];
|
$clientMap = [];
|
||||||
$clients = $this->clientRepo->all();
|
$clients = $this->clientRepo->all();
|
||||||
foreach ($clients as $client) {
|
foreach ($clients as $client) {
|
||||||
$clientMap[strtolower($client->name)] = $client->id;
|
if ($name = strtolower(trim($client->name))) {
|
||||||
|
$clientMap[$name] = $client->id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$invoiceMap = [];
|
$invoiceMap = [];
|
||||||
$invoices = $this->invoiceRepo->all();
|
$invoices = $this->invoiceRepo->all();
|
||||||
foreach ($invoices as $invoice) {
|
foreach ($invoices as $invoice) {
|
||||||
$invoiceMap[strtolower($invoice->invoice_number)] = $invoice->id;
|
if ($number = strtolower(trim($invoice->invoice_number))) {
|
||||||
|
$invoiceMap[$number] = $invoice->id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$countryMap = [];
|
$countryMap = [];
|
||||||
|
$countryMap2 = [];
|
||||||
$countries = Cache::get('countries');
|
$countries = Cache::get('countries');
|
||||||
foreach ($countries as $country) {
|
foreach ($countries as $country) {
|
||||||
$countryMap[strtolower($country->name)] = $country->id;
|
$countryMap[strtolower($country->name)] = $country->id;
|
||||||
|
$countryMap2[strtolower($country->iso_3166_2)] = $country->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$currencyMap = [];
|
$currencyMap = [];
|
||||||
@ -215,6 +221,7 @@ class ImportService
|
|||||||
ENTITY_CLIENT => $clientMap,
|
ENTITY_CLIENT => $clientMap,
|
||||||
ENTITY_INVOICE => $invoiceMap,
|
ENTITY_INVOICE => $invoiceMap,
|
||||||
'countries' => $countryMap,
|
'countries' => $countryMap,
|
||||||
|
'countries2' => $countryMap2,
|
||||||
'currencies' => $currencyMap,
|
'currencies' => $currencyMap,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -62,14 +62,13 @@ There are two options:
|
|||||||
### Frameworks/Libraries
|
### Frameworks/Libraries
|
||||||
* [laravel/laravel](https://github.com/laravel/laravel) - A PHP Framework For Web Artisans
|
* [laravel/laravel](https://github.com/laravel/laravel) - A PHP Framework For Web Artisans
|
||||||
* [twbs/bootstrap](https://github.com/twbs/bootstrap) - Sleek, intuitive, and powerful front-end framework for faster and easier web development.
|
* [twbs/bootstrap](https://github.com/twbs/bootstrap) - Sleek, intuitive, and powerful front-end framework for faster and easier web development.
|
||||||
|
* [jquery/jquery](https://github.com/jquery/jquery) - jQuery JavaScript Library
|
||||||
|
* [jquery/jquery-ui](https://github.com/jquery/jquery-ui) - The official jQuery user interface library
|
||||||
* [patricktalmadge/bootstrapper](https://github.com/patricktalmadge/bootstrapper) - Laravel Twitter Bootstrap Bundle
|
* [patricktalmadge/bootstrapper](https://github.com/patricktalmadge/bootstrapper) - Laravel Twitter Bootstrap Bundle
|
||||||
* [danielfarrell/bootstrap-combobox](https://github.com/danielfarrell/bootstrap-combobox) - A combobox plugin
|
* [danielfarrell/bootstrap-combobox](https://github.com/danielfarrell/bootstrap-combobox) - A combobox plugin
|
||||||
* [jquery/jquery](https://github.com/jquery/jquery) - jQuery JavaScript Library
|
|
||||||
* [eternicode/bootstrap-datepicker](https://github.com/eternicode/bootstrap-datepicker) - A datepicker for @twitter bootstrap
|
* [eternicode/bootstrap-datepicker](https://github.com/eternicode/bootstrap-datepicker) - A datepicker for @twitter bootstrap
|
||||||
* [jquery/jquery-ui](https://github.com/jquery/jquery-ui) - The official jQuery user interface library
|
|
||||||
* [knockout/knockout](https://github.com/knockout/knockout) - Knockout makes it easier to create rich, responsive UIs with JavaScript
|
* [knockout/knockout](https://github.com/knockout/knockout) - Knockout makes it easier to create rich, responsive UIs with JavaScript
|
||||||
* [rniemeyer/knockout-sortable](https://github.com/rniemeyer/knockout-sortable) - A Knockout.js binding to connect observableArrays with jQuery UI sortable functionality
|
* [rniemeyer/knockout-sortable](https://github.com/rniemeyer/knockout-sortable) - A Knockout.js binding to connect observableArrays with jQuery UI sortable functionality
|
||||||
* [MrRio/jsPDF](https://github.com/MrRio/jsPDF) - Generate PDF files in JavaScript. HTML5 FTW.
|
|
||||||
* [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake) - Client/server side PDF printing in pure JavaScript
|
* [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake) - Client/server side PDF printing in pure JavaScript
|
||||||
* [FortAwesome/Font-Awesome](https://github.com/FortAwesome/Font-Awesome) - The iconic font designed for Bootstrap that works with twitter bootstrap
|
* [FortAwesome/Font-Awesome](https://github.com/FortAwesome/Font-Awesome) - The iconic font designed for Bootstrap that works with twitter bootstrap
|
||||||
* [Anahkiasen/former](https://github.com/Anahkiasen/former) - A powerful form builder, for Laravel and other frameworks (stand-alone too)
|
* [Anahkiasen/former](https://github.com/Anahkiasen/former) - A powerful form builder, for Laravel and other frameworks (stand-alone too)
|
||||||
@ -91,4 +90,5 @@ There are two options:
|
|||||||
* [josdejong/jsoneditor](https://github.com/josdejong/jsoneditor/) - A web-based tool to view, edit and format JSON
|
* [josdejong/jsoneditor](https://github.com/josdejong/jsoneditor/) - A web-based tool to view, edit and format JSON
|
||||||
* [simshaun/recurr](https://github.com/simshaun/recurr) - PHP library for working with recurrence rules
|
* [simshaun/recurr](https://github.com/simshaun/recurr) - PHP library for working with recurrence rules
|
||||||
* [quilljs/quill](https://github.com/quilljs/quill/) - A cross browser rich text editor with an API
|
* [quilljs/quill](https://github.com/quilljs/quill/) - A cross browser rich text editor with an API
|
||||||
* [Maatwebsite/Laravel-Excel](https://github.com/Maatwebsite/Laravel-Excel) - An eloquent way of importing and exporting Excel and CSV files for Laravel
|
* [Maatwebsite/Laravel-Excel](https://github.com/Maatwebsite/Laravel-Excel) - An eloquent way of importing and exporting Excel and CSV files for Laravel
|
||||||
|
* [thephpleague/fractal](https://github.com/thephpleague/fractal) - Output complex, flexible, AJAX/RESTful data structures
|
@ -3,6 +3,7 @@
|
|||||||
@section('head')
|
@section('head')
|
||||||
@parent
|
@parent
|
||||||
|
|
||||||
|
@include('money_script')
|
||||||
<link href="{{ asset('css/quill.snow.css') }}" rel="stylesheet" type="text/css"/>
|
<link href="{{ asset('css/quill.snow.css') }}" rel="stylesheet" type="text/css"/>
|
||||||
<script src="{{ asset('js/quill.min.js') }}" type="text/javascript"></script>
|
<script src="{{ asset('js/quill.min.js') }}" type="text/javascript"></script>
|
||||||
|
|
||||||
|
@ -88,11 +88,13 @@
|
|||||||
<span data-bind="html: email.display"></span>
|
<span data-bind="html: email.display"></span>
|
||||||
</label>
|
</label>
|
||||||
<span data-bind="html: $data.view_as_recipient"></span>
|
<span data-bind="html: $data.view_as_recipient"></span>
|
||||||
|
@if (Utils::isConfirmed())
|
||||||
<span style="vertical-align:text-top;color:red" class="fa fa-exclamation-triangle"
|
<span style="vertical-align:text-top;color:red" class="fa fa-exclamation-triangle"
|
||||||
data-bind="visible: $data.email_error, tooltip: {title: $data.email_error}"></span>
|
data-bind="visible: $data.email_error, tooltip: {title: $data.email_error}"></span>
|
||||||
<span style="vertical-align:text-top" class="glyphicon glyphicon-info-sign"
|
<span style="vertical-align:text-top" class="glyphicon glyphicon-info-sign"
|
||||||
data-bind="visible: $data.invitation_status, tooltip: {title: $data.invitation_status, html: true},
|
data-bind="visible: $data.invitation_status, tooltip: {title: $data.invitation_status, html: true},
|
||||||
style: {color: $data.hasOwnProperty('invitation_viewed') && $data.invitation_viewed() ? '#57D172':'#B1B5BA'}"></span>
|
style: {color: $data.hasOwnProperty('invitation_viewed') && $data.invitation_viewed() ? '#57D172':'#B1B5BA'}"></span>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -173,10 +175,10 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="min-width:32px;" class="hide-border"></th>
|
<th style="min-width:32px;" class="hide-border"></th>
|
||||||
<th style="min-width:160px" data-bind="text: productLabel"></th>
|
<th style="min-width:160px" data-bind="text: productLabel">{{ $invoiceLabels['item'] }}</th>
|
||||||
<th style="width:100%">{{ $invoiceLabels['description'] }}</th>
|
<th style="width:100%">{{ $invoiceLabels['description'] }}</th>
|
||||||
<th style="min-width:120px" data-bind="text: costLabel"></th>
|
<th style="min-width:120px" data-bind="text: costLabel">{{ $invoiceLabels['unit_cost'] }}</th>
|
||||||
<th style="{{ $account->hide_quantity ? 'display:none' : 'min-width:120px' }}" data-bind="text: qtyLabel"></th>
|
<th style="{{ $account->hide_quantity ? 'display:none' : 'min-width:120px' }}" data-bind="text: qtyLabel">{{ $invoiceLabels['quantity'] }}</th>
|
||||||
<th style="min-width:120px;display:none;" data-bind="visible: $root.invoice_item_taxes.show">{{ trans('texts.tax') }}</th>
|
<th style="min-width:120px;display:none;" data-bind="visible: $root.invoice_item_taxes.show">{{ trans('texts.tax') }}</th>
|
||||||
<th style="min-width:120px;">{{ trans('texts.line_total') }}</th>
|
<th style="min-width:120px;">{{ trans('texts.line_total') }}</th>
|
||||||
<th style="min-width:32px;" class="hide-border"></th>
|
<th style="min-width:32px;" class="hide-border"></th>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user