Akaunting/app/Utilities/Import.php

124 lines
3.2 KiB
PHP
Raw Normal View History

2018-06-23 12:59:13 +00:00
<?php
namespace App\Utilities;
2018-09-12 12:15:23 +00:00
use Date;
2018-06-23 12:59:13 +00:00
use Illuminate\Validation\ValidationException;
2019-11-16 07:21:14 +00:00
use Illuminate\Support\Str;
2018-06-23 12:59:13 +00:00
class Import
{
2019-04-04 14:54:03 +00:00
public static function createFromFile($import, $slug, $namespace = 'App')
2018-06-23 12:59:13 +00:00
{
$success = true;
// Loop through all sheets
2019-04-04 14:54:03 +00:00
$import->each(function ($sheet) use (&$success, $slug, $namespace) {
2018-06-27 14:01:26 +00:00
if (!static::isValidSheetName($sheet, $slug)) {
$message = trans('messages.error.import_sheet');
flash($message)->error()->important();
return false;
}
2019-04-04 14:54:03 +00:00
if (!$success = static::createFromSheet($sheet, $slug, $namespace)) {
2018-06-23 12:59:13 +00:00
return false;
}
});
return $success;
}
2019-04-04 14:54:03 +00:00
public static function createFromSheet($sheet, $slug, $namespace = 'App')
2018-06-23 12:59:13 +00:00
{
$success = true;
2019-04-04 14:54:03 +00:00
$model = '\\' . $namespace . '\Models\\' . $slug;
$request = '\\' . $namespace . '\Http\Requests\\' . $slug;
2018-06-23 12:59:13 +00:00
if (!class_exists($model) || !class_exists($request)) {
return false;
}
// Loop through all rows
$sheet->each(function ($row, $index) use ($sheet, &$success, $model, $request) {
2018-09-12 12:56:08 +00:00
$data = static::fixRow($row->toArray());
2018-06-23 12:59:13 +00:00
// Set the line values so that request class could validate
request()->merge($data);
try {
app($request);
$data['company_id'] = session('company_id');
$model::create($data);
} catch (ValidationException $e) {
2018-06-27 14:01:26 +00:00
$message = trans('messages.error.import_column', [
2018-06-23 12:59:13 +00:00
'message' => $e->validator->errors()->first(),
'sheet' => $sheet->getTitle(),
'line' => $index + 2,
]);
flash($message)->error()->important();
$success = false;
// Break the import process
return false;
}
// Unset added line values
foreach ($data as $key => $value) {
request()->offsetUnset($key);
}
});
return $success;
}
2018-06-27 14:01:26 +00:00
public static function isValidSheetName($sheet, $slug)
{
$t = explode('\\', $slug);
2019-04-04 14:54:03 +00:00
if (count($t) == 1) {
$title = $slug;
} else {
if (empty($t[1])) {
return false;
}
$title = $t[1];
2018-06-27 14:01:26 +00:00
}
2019-11-16 07:21:14 +00:00
if ($sheet->getTitle() != Str::plural(Str::snake($title))) {
2018-06-27 14:01:26 +00:00
return false;
}
return true;
}
2018-09-12 12:56:08 +00:00
protected static function fixRow($data)
{
// Fix the date fields
$date_fields = ['paid_at', 'due_at', 'billed_at', 'invoiced_at'];
foreach ($date_fields as $date_field) {
if (empty($data[$date_field])) {
continue;
}
$new_date = Date::parse($data[$date_field])->format('Y-m-d') . ' ' . Date::now()->format('H:i:s');
$data[$date_field] = $new_date;
}
// Make enabled field integer
if (isset($data['enabled'])) {
$data['enabled'] = (int) $data['enabled'];
}
return $data;
}
2018-06-23 12:59:13 +00:00
}