1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 00:11:35 +02:00

Revert "Re-revert "Improve Import Support"""

This commit is contained in:
Hillel Coren 2015-12-31 15:36:53 +02:00
parent 4c4315c836
commit f5530a30b2
12 changed files with 21 additions and 149 deletions

View File

@ -64,22 +64,10 @@ class BaseTransformer extends TransformerAbstract
return str_pad($number, 4, '0', STR_PAD_LEFT);
}
protected function getInvoiceId($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
return isset($this->maps[ENTITY_INVOICE][$invoiceNumber]) ? $this->maps[ENTITY_INVOICE][$invoiceNumber] : null;
}
protected function hasInvoice($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
return isset($this->maps[ENTITY_INVOICE][$invoiceNumber]);
}
protected function getInvoiceClientId($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
return isset($this->maps[ENTITY_INVOICE.'_'.ENTITY_CLIENT][$invoiceNumber])? $this->maps[ENTITY_INVOICE.'_'.ENTITY_CLIENT][$invoiceNumber] : null;
}
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => $data->paid,
'payment_date_sql' => isset($data->invoice_date) ? $data->invoice_date : null,
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => $data->paid,
'payment_date_sql' => $data->create_date,
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => $data->paid_amount,
'payment_date_sql' => $this->getDate($data->last_payment_date, 'm/d/Y'),
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => $data->paid_total,
'payment_date_sql' => $this->getDate($data->last_paid_on),
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => $data->paid,
'payment_date_sql' => $data->date_paid,
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => (float) $data->paid_to_date,
'payment_date_sql' => $this->getDate($data->date),
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -12,7 +12,7 @@ class PaymentTransformer extends BaseTransformer
'amount' => (float) $data->total - (float) $data->balance,
'payment_date_sql' => $data->date_paid,
'client_id' => $data->client_id,
'invoice_id' => $this->getInvoiceId($data->invoice_id),
'invoice_id' => $data->invoice_id,
];
});
}

View File

@ -1,37 +0,0 @@
<?php namespace App\Ninja\Import\Wave;
use App\Ninja\Import\BaseTransformer;
use League\Fractal\Resource\Item;
class InvoiceTransformer extends BaseTransformer
{
public function transform($data)
{
if ( ! $this->getClientId($data->customer)) {
return false;
}
if ($this->hasInvoice($data->invoice_num)) {
return false;
}
return new Item($data, function ($data) {
return [
'client_id' => $this->getClientId($data->customer),
'invoice_number' => $this->getInvoiceNumber($data->invoice_num),
'po_number' => $data->po_so,
'invoice_date_sql' => $this->getDate($data->invoice_date),
'due_date_sql' => $this->getDate($data->due_date),
'paid' => 0,
'invoice_items' => [
[
'product_key' => $data->product,
'notes' => $data->description,
'cost' => (float) $data->amount,
'qty' => (float) $data->quantity,
]
],
];
});
}
}

View File

@ -1,23 +0,0 @@
<?php namespace App\Ninja\Import\Wave;
use App\Ninja\Import\BaseTransformer;
use League\Fractal\Resource\Item;
class PaymentTransformer extends BaseTransformer
{
public function transform($data, $maps)
{
if ( ! $this->getInvoiceClientId($data->invoice_num)) {
return false;
}
return new Item($data, function ($data) use ($maps) {
return [
'amount' => (float) $data->amount,
'payment_date_sql' => $this->getDate($data->payment_date),
'client_id' => $this->getInvoiceClientId($data->invoice_num),
'invoice_id' => $this->getInvoiceId($data->invoice_num),
];
});
}
}

View File

@ -23,13 +23,11 @@ class ImportService
protected $invoiceRepo;
protected $clientRepo;
protected $contactRepo;
protected $processedRows = array();
public static $entityTypes = [
ENTITY_CLIENT,
ENTITY_CONTACT,
ENTITY_INVOICE,
ENTITY_PAYMENT,
ENTITY_TASK,
];
@ -75,45 +73,31 @@ class ImportService
RESULT_FAILURE => [],
];
// Convert the data
$row_list = array();
$maps = $this->createMaps();
Excel::load($file, function ($reader) use ($source, $entityType, $maps, &$row_list, &$results) {
Excel::load($file, function ($reader) use ($source, $entityType, &$results) {
$this->checkData($entityType, count($reader->all()));
$maps = $this->createMaps();
$reader->each(function ($row) use ($source, $entityType, $maps, &$row_list, &$results) {
$data_index = $this->transformRow($source, $entityType, $row, $maps);
if ($data_index !== false){
if($data_index !== true){// Wasn't merged with another row
$row_list[] = array('row'=>$row, 'data_index'=>$data_index);
}
$reader->each(function ($row) use ($source, $entityType, $maps, &$results) {
$result = $this->saveData($source, $entityType, $row, $maps);
if ($result) {
$results[RESULT_SUCCESS][] = $result;
} else {
$results[RESULT_FAILURE][] = $row;
}
});
});
// Save the data
foreach($row_list as $row_data){
$result = $this->saveData($source, $entityType, $row_data['row'], $row_data['data_index'], $maps);
if ($result) {
$results[RESULT_SUCCESS][] = $result;
} else {
$results[RESULT_FAILURE][] = $row_data['row'];
}
}
return $results;
}
private function transformRow($source, $entityType, $row, $maps)
private function saveData($source, $entityType, $row, $maps)
{
$transformer = $this->getTransformer($source, $entityType, $maps);
$resource = $transformer->transform($row, $maps);
if (!$resource) {
return false;
return;
}
$data = $this->fractal->createData($resource)->toArray();
@ -124,32 +108,11 @@ class ImportService
$invoice = Invoice::createNew();
$data['invoice_number'] = $account->getNextInvoiceNumber($invoice);
}
if ($this->validate($source, $data, $entityType) !== true) {
return false;
return;
}
if($entityType == ENTITY_INVOICE){
if(empty($this->processedRows[$data['invoice_number']])){
$this->processedRows[$data['invoice_number']] = $data;
}
else{
// Merge invoice items
$this->processedRows[$data['invoice_number']]['invoice_items'] = array_merge($this->processedRows[$data['invoice_number']]['invoice_items'], $data['invoice_items']);
return true;
}
}
else{
$this->processedRows[] = $data;
}
end($this->processedRows);
return key($this->processedRows);
}
private function saveData($source, $entityType, $row, $data_index, $maps)
{
$data = $this->processedRows[$data_index];
$entity = $this->{"{$entityType}Repo"}->save($data);
// if the invoice is paid we'll also create a payment record
@ -241,12 +204,10 @@ class ImportService
}
$invoiceMap = [];
$invoiceClientMap = [];
$invoices = $this->invoiceRepo->all();
foreach ($invoices as $invoice) {
if ($number = strtolower(trim($invoice->invoice_number))) {
$invoiceMap[$number] = $invoice->id;
$invoiceClientMap[$number] = $invoice->client_id;
}
}
@ -267,7 +228,6 @@ class ImportService
return [
ENTITY_CLIENT => $clientMap,
ENTITY_INVOICE => $invoiceMap,
ENTITY_INVOICE.'_'.ENTITY_CLIENT => $invoiceClientMap,
'countries' => $countryMap,
'countries2' => $countryMap2,
'currencies' => $currencyMap,
@ -411,8 +371,6 @@ class ImportService
$this->checkData($entityType, count($data));
$maps = $this->createMaps();
// Convert the data
$row_list = array();
foreach ($data as $row) {
if ($hasHeaders) {
$hasHeaders = false;
@ -420,21 +378,8 @@ class ImportService
}
$row = $this->convertToObject($entityType, $row, $map);
$data_index = $this->transformRow($source, $entityType, $row, $maps);
if ($data_index !== false) {
if($data_index !== true){// Wasn't merged with another row
$row_list[] = array('row'=>$row, 'data_index'=>$data_index);
}
} else {
$results[RESULT_FAILURE][] = $row;
}
}
// Save the data
foreach($row_list as $row_data){
$result = $this->saveData($source, $entityType, $row_data['row'], $row_data['data_index'], $maps);
$result = $this->saveData($source, $entityType, $row, $maps);
if ($result) {
$results[RESULT_SUCCESS][] = $result;
} else {

View File

@ -240,7 +240,6 @@ return array(
'deleted_invoices' => 'Successfully deleted :count invoices',
'created_payment' => 'Successfully created payment',
'created_payments' => 'Successfully created :count payment(s)',
'archived_payment' => 'Successfully archived payment',
'archived_payments' => 'Successfully archived :count payments',
'deleted_payment' => 'Successfully deleted payment',