diff --git a/app/Export/CSV/CreditExport.php b/app/Export/CSV/CreditExport.php index c5858f49854e..4391f9f55a43 100644 --- a/app/Export/CSV/CreditExport.php +++ b/app/Export/CSV/CreditExport.php @@ -20,13 +20,15 @@ use App\Utils\Ninja; use Illuminate\Support\Facades\App; use League\Csv\Writer; -class CreditExport +class CreditExport extends BaseExport { - private $company; + private Company $company; - private $report_keys; + protected array $input; - private $credit_transformer; + private CreditTransformer $credit_transformer; + + protected string $date_key = 'created_at'; private array $entity_keys = [ 'amount' => 'amount', @@ -73,10 +75,10 @@ class CreditExport 'currency', ]; - public function __construct(Company $company, array $report_keys) + public function __construct(Company $company, array $input) { $this->company = $company; - $this->report_keys = $report_keys; + $this->input = $input; $this->credit_transformer = new CreditTransformer(); } @@ -95,15 +97,18 @@ class CreditExport //insert the header $this->csv->insertOne($this->buildHeader()); - Credit::with('client')->where('company_id', $this->company->id) - ->where('is_deleted',0) - ->cursor() - ->each(function ($credit){ + $query = Credit::query() + ->with('client')->where('company_id', $this->company->id) + ->where('is_deleted',0); - $this->csv->insertOne($this->buildRow($credit)); + $query = $this->addDateRange($query); - }); + $query->cursor() + ->each(function ($credit){ + $this->csv->insertOne($this->buildRow($credit)); + + }); return $this->csv->toString(); @@ -114,7 +119,7 @@ class CreditExport $header = []; - foreach(array_keys($this->report_keys) as $key) + foreach(array_keys($this->input['report_keys']) as $key) $header[] = ctrans("texts.{$key}"); return $header; @@ -127,7 +132,7 @@ class CreditExport $entity = []; - foreach(array_values($this->report_keys) as $key){ + foreach(array_values($this->input['report_keys']) as $key){ $entity[$key] = $transformed_credit[$key]; } diff --git a/app/Export/CSV/DocumentExport.php b/app/Export/CSV/DocumentExport.php index 45179ec8e609..9716d1946bb4 100644 --- a/app/Export/CSV/DocumentExport.php +++ b/app/Export/CSV/DocumentExport.php @@ -21,14 +21,16 @@ use App\Utils\Ninja; use Illuminate\Support\Facades\App; use League\Csv\Writer; -class DocumentExport +class DocumentExport extends BaseExport { - private $company; + private Company $company; - private $report_keys; + protected array $input; private $entity_transformer; + protected $date_key = 'created_at'; + private array $entity_keys = [ 'record_type' => 'record_type', 'record_name' => 'record_name', @@ -41,10 +43,10 @@ class DocumentExport ]; - public function __construct(Company $company, array $report_keys) + public function __construct(Company $company, array $input) { $this->company = $company; - $this->report_keys = $report_keys; + $this->input = $input; $this->entity_transformer = new DocumentTransformer(); } @@ -63,14 +65,16 @@ class DocumentExport //insert the header $this->csv->insertOne($this->buildHeader()); - Document::where('company_id', $this->company->id) - ->cursor() - ->each(function ($entity){ + $query = Document::query()->where('company_id', $this->company->id); - $this->csv->insertOne($this->buildRow($entity)); + $query = $this->addDateRange($query); - }); + $query->cursor() + ->each(function ($entity){ + $this->csv->insertOne($this->buildRow($entity)); + + }); return $this->csv->toString(); @@ -81,7 +85,7 @@ class DocumentExport $header = []; - foreach(array_keys($this->report_keys) as $key) + foreach(array_keys($this->input['report_keys']) as $key) $header[] = ctrans("texts.{$key}"); return $header; @@ -94,7 +98,7 @@ class DocumentExport $entity = []; - foreach(array_values($this->report_keys) as $key){ + foreach(array_values($this->input['report_keys']) as $key){ $entity[$key] = $transformed_entity[$key]; diff --git a/app/Export/CSV/ExpenseExport.php b/app/Export/CSV/ExpenseExport.php index 26520f7a6da9..c4e0eb1afbdf 100644 --- a/app/Export/CSV/ExpenseExport.php +++ b/app/Export/CSV/ExpenseExport.php @@ -20,14 +20,16 @@ use App\Utils\Ninja; use Illuminate\Support\Facades\App; use League\Csv\Writer; -class ExpenseExport +class ExpenseExport extends BaseExport { - private $company; + private Company $company; - private $report_keys; + protected array $input; private $expense_transformer; + protected $date_key = 'date'; + private array $entity_keys = [ 'amount' => 'amount', 'category' => 'category_id', @@ -71,10 +73,10 @@ class ExpenseExport 'payment_type_id', ]; - public function __construct(Company $company, array $report_keys) + public function __construct(Company $company, array $input) { $this->company = $company; - $this->report_keys = $report_keys; + $this->input = $input; $this->expense_transformer = new ExpenseTransformer(); } @@ -93,14 +95,19 @@ class ExpenseExport //insert the header $this->csv->insertOne($this->buildHeader()); - Expense::with('client')->where('company_id', $this->company->id) - ->where('is_deleted',0) - ->cursor() - ->each(function ($expense){ + $query = Expense::query() + ->with('client') + ->where('company_id', $this->company->id) + ->where('is_deleted',0); - $this->csv->insertOne($this->buildRow($expense)); + $query = $this->addDateRange($query); - }); + $query->cursor() + ->each(function ($expense){ + + $this->csv->insertOne($this->buildRow($expense)); + + }); return $this->csv->toString(); @@ -112,7 +119,7 @@ class ExpenseExport $header = []; - foreach(array_keys($this->report_keys) as $key) + foreach(array_keys($this->input['report_keys']) as $key) $header[] = ctrans("texts.{$key}"); return $header; @@ -125,7 +132,7 @@ class ExpenseExport $entity = []; - foreach(array_values($this->report_keys) as $key){ + foreach(array_values($this->input['report_keys']) as $key){ $entity[$key] = $transformed_expense[$key]; } diff --git a/app/Http/Controllers/OpenAPI/ClientReportSchema.php b/app/Http/Controllers/OpenAPI/GenericReportSchema.php similarity index 96% rename from app/Http/Controllers/OpenAPI/ClientReportSchema.php rename to app/Http/Controllers/OpenAPI/GenericReportSchema.php index c92e9f117cfa..dba4b18fab5c 100644 --- a/app/Http/Controllers/OpenAPI/ClientReportSchema.php +++ b/app/Http/Controllers/OpenAPI/GenericReportSchema.php @@ -1,7 +1,7 @@ streamDownload(function () use ($csv) { echo $csv; - }, 'clients.csv', $headers); + }, $this->filename, $headers); } diff --git a/app/Http/Controllers/Reports/CreditReportController.php b/app/Http/Controllers/Reports/CreditReportController.php new file mode 100644 index 000000000000..3ebe56d3927e --- /dev/null +++ b/app/Http/Controllers/Reports/CreditReportController.php @@ -0,0 +1,84 @@ +user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = array( + 'Content-Disposition' => 'attachment', + 'Content-Type' => 'text/csv', + ); + + return response()->streamDownload(function () use ($csv) { + echo $csv; + }, $this->filename, $headers); + + } + + + +} diff --git a/app/Http/Controllers/Reports/DocumentReportController.php b/app/Http/Controllers/Reports/DocumentReportController.php new file mode 100644 index 000000000000..6ca4264caf8a --- /dev/null +++ b/app/Http/Controllers/Reports/DocumentReportController.php @@ -0,0 +1,84 @@ +user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = array( + 'Content-Disposition' => 'attachment', + 'Content-Type' => 'text/csv', + ); + + return response()->streamDownload(function () use ($csv) { + echo $csv; + }, $this->filename, $headers); + + } + + + +} diff --git a/app/Http/Controllers/Reports/ExpenseReportController.php b/app/Http/Controllers/Reports/ExpenseReportController.php new file mode 100644 index 000000000000..e797437fe37f --- /dev/null +++ b/app/Http/Controllers/Reports/ExpenseReportController.php @@ -0,0 +1,85 @@ +user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = array( + 'Content-Disposition' => 'attachment', + 'Content-Type' => 'text/csv', + ); + + return response()->streamDownload(function () use ($csv) { + echo $csv; + }, $this->filename, $headers); + + } + + + +} diff --git a/app/Http/Requests/Report/ClientContactReportRequest.php b/app/Http/Requests/Report/ClientContactReportRequest.php deleted file mode 100644 index a8c8035a1246..000000000000 --- a/app/Http/Requests/Report/ClientContactReportRequest.php +++ /dev/null @@ -1,38 +0,0 @@ -user()->isAdmin(); - } - - public function rules() - { - return [ - 'start_date' => 'string|date', - 'end_date' => 'string|date', - 'date_key' => 'string', - 'date_range' => 'string', - 'report_keys' => 'sometimes|array' - ]; - } -} diff --git a/app/Http/Requests/Report/ClientReportRequest.php b/app/Http/Requests/Report/GenericReportRequest.php similarity index 95% rename from app/Http/Requests/Report/ClientReportRequest.php rename to app/Http/Requests/Report/GenericReportRequest.php index 8112e3be19c5..9f80bd87c719 100644 --- a/app/Http/Requests/Report/ClientReportRequest.php +++ b/app/Http/Requests/Report/GenericReportRequest.php @@ -13,7 +13,7 @@ namespace App\Http\Requests\Report; use App\Http\Requests\Request; -class ClientReportRequest extends Request +class GenericReportRequest extends Request { /** * Determine if the user is authorized to make this request. diff --git a/routes/api.php b/routes/api.php index d3a56076c9af..41df2c8996c6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -156,6 +156,9 @@ Route::group(['middleware' => ['throttle:300,1', 'api_db', 'token_auth', 'locale Route::post('reports/clients', 'Reports\ClientReportController'); Route::post('reports/contacts', 'Reports\ClientContactReportController'); + Route::post('reports/credits', 'Reports\CreditReportController'); + Route::post('reports/documents', 'Reports\DocumentReportController'); + Route::post('reports/expenses', 'Reports\ExpenseReportController'); Route::get('scheduler', 'SchedulerController@index');