diff --git a/app/DataProviders/USStates.php b/app/DataProviders/USStates.php index f66493667b86..d973bfe5f4e7 100644 --- a/app/DataProviders/USStates.php +++ b/app/DataProviders/USStates.php @@ -33868,7 +33868,7 @@ class USStates return self::$states; } - public static function getState(string $zip): string + public static function getState(?string $zip = '90210'): string { if(isset(self::$zip_code_map[$zip])) return self::$zip_code_map[$zip]; diff --git a/app/Http/Controllers/Reports/ARDetailReportController.php b/app/Http/Controllers/Reports/ARDetailReportController.php new file mode 100644 index 000000000000..4f6c460e7a31 --- /dev/null +++ b/app/Http/Controllers/Reports/ARDetailReportController.php @@ -0,0 +1,84 @@ +has('send_email') && $request->get('send_email')) { + SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ARDetailReport::class, $this->filename); + + return response()->json(['message' => 'working...'], 200); + } + // expect a list of visible fields, or use the default + + $export = new ARDetailReport(auth()->user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = [ + '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/ARSummaryReportController.php b/app/Http/Controllers/Reports/ARSummaryReportController.php new file mode 100644 index 000000000000..a9c9f6e68946 --- /dev/null +++ b/app/Http/Controllers/Reports/ARSummaryReportController.php @@ -0,0 +1,84 @@ +has('send_email') && $request->get('send_email')) { + SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ARSummaryReport::class, $this->filename); + + return response()->json(['message' => 'working...'], 200); + } + // expect a list of visible fields, or use the default + + $export = new ARSummaryReport(auth()->user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = [ + '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/ClientBalanceReportController.php b/app/Http/Controllers/Reports/ClientBalanceReportController.php new file mode 100644 index 000000000000..0202af3d2f68 --- /dev/null +++ b/app/Http/Controllers/Reports/ClientBalanceReportController.php @@ -0,0 +1,85 @@ +has('send_email') && $request->get('send_email')) { + SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ClientBalanceReport::class, $this->filename); + + return response()->json(['message' => 'working...'], 200); + } + // expect a list of visible fields, or use the default + + $export = new ClientBalanceReport(auth()->user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = [ + '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/ClientSalesReportController.php b/app/Http/Controllers/Reports/ClientSalesReportController.php new file mode 100644 index 000000000000..056b157775b3 --- /dev/null +++ b/app/Http/Controllers/Reports/ClientSalesReportController.php @@ -0,0 +1,85 @@ +has('send_email') && $request->get('send_email')) { + SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ClientSalesReport::class, $this->filename); + + return response()->json(['message' => 'working...'], 200); + } + // expect a list of visible fields, or use the default + + $export = new ClientSalesReport(auth()->user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = [ + '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/TaxSummaryReportController.php b/app/Http/Controllers/Reports/TaxSummaryReportController.php new file mode 100644 index 000000000000..776fa988d694 --- /dev/null +++ b/app/Http/Controllers/Reports/TaxSummaryReportController.php @@ -0,0 +1,85 @@ +has('send_email') && $request->get('send_email')) { + SendToAdmin::dispatch(auth()->user()->company(), $request->all(), TaxSummaryReport::class, $this->filename); + + return response()->json(['message' => 'working...'], 200); + } + // expect a list of visible fields, or use the default + + $export = new TaxSummaryReport(auth()->user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = [ + '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/UserSalesReportController.php b/app/Http/Controllers/Reports/UserSalesReportController.php new file mode 100644 index 000000000000..582eb4e71727 --- /dev/null +++ b/app/Http/Controllers/Reports/UserSalesReportController.php @@ -0,0 +1,85 @@ +has('send_email') && $request->get('send_email')) { + SendToAdmin::dispatch(auth()->user()->company(), $request->all(), UserSalesReport::class, $this->filename); + + return response()->json(['message' => 'working...'], 200); + } + // expect a list of visible fields, or use the default + + $export = new UserSalesReport(auth()->user()->company(), $request->all()); + + $csv = $export->run(); + + $headers = [ + 'Content-Disposition' => 'attachment', + 'Content-Type' => 'text/csv', + ]; + + return response()->streamDownload(function () use ($csv) { + echo $csv; + }, $this->filename, $headers); + } +} diff --git a/lang/en/texts.php b/lang/en/texts.php index 1b9cc11b114b..78d7862dddb9 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -5063,6 +5063,8 @@ $LANG = array( 'industry_Restaurant & Catering' => 'Restaurant & Catering', 'show_credits_table' => 'Show Credits Table', 'manual_payment' => 'Payment Manual', + 'tax_summary_report' => 'Tax Summary Report', + ); diff --git a/routes/api.php b/routes/api.php index 4eed06948c5f..350e547333e5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -90,12 +90,18 @@ use App\Http\Controllers\Reports\PaymentReportController; use App\Http\Controllers\Reports\ProductReportController; use App\Http\Controllers\Reports\ProfitAndLossController; use App\Http\Controllers\Reports\ActivityReportController; +use App\Http\Controllers\Reports\ARDetailReportController; use App\Http\Controllers\Reports\DocumentReportController; +use App\Http\Controllers\Reports\ARSummaryReportController; use App\Http\Controllers\Reports\QuoteItemReportController; +use App\Http\Controllers\Reports\UserSalesReportController; +use App\Http\Controllers\Reports\TaxSummaryReportController; use App\Http\Controllers\Support\Messages\SendingController; +use App\Http\Controllers\Reports\ClientSalesReportController; use App\Http\Controllers\Reports\InvoiceItemReportController; use App\Http\Controllers\PaymentNotificationWebhookController; use App\Http\Controllers\Reports\ProductSalesReportController; +use App\Http\Controllers\Reports\ClientBalanceReportController; use App\Http\Controllers\Reports\ClientContactReportController; use App\Http\Controllers\Reports\RecurringInvoiceReportController; @@ -285,7 +291,14 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] Route::post('reports/product_sales', ProductSalesReportController::class); Route::post('reports/tasks', TaskReportController::class); Route::post('reports/profitloss', ProfitAndLossController::class); - + + Route::post('reports/ar_detail_report', ARDetailReportController::class); + Route::post('reports/ar_summary_report', ARSummaryReportController::class); + Route::post('reports/client_balance_report', ClientBalanceReportController::class); + Route::post('reports/client_sales_report', ClientSalesReportController::class); + Route::post('reports/tax_summary_report', TaxSummaryReportController::class); + Route::post('reports/user_sales_report', UserSalesReportController::class); + Route::resource('task_schedulers', TaskSchedulerController::class); Route::post('task_schedulers/bulk', [TaskSchedulerController::class, 'bulk'])->name('task_schedulers.bulk'); diff --git a/tests/Feature/Export/ArDetailReportTest.php b/tests/Feature/Export/ArDetailReportTest.php index 0d053f34c710..8f523a52c551 100644 --- a/tests/Feature/Export/ArDetailReportTest.php +++ b/tests/Feature/Export/ArDetailReportTest.php @@ -22,6 +22,7 @@ use App\Services\Report\ARDetailReport; use App\Services\Report\UserSalesReport; use App\Utils\Traits\MakesHash; use Illuminate\Routing\Middleware\ThrottleRequests; +use Tests\MockAccountData; use Tests\TestCase; /** @@ -44,6 +45,7 @@ class ARDetailReportTest extends TestCase ); $this->withoutExceptionHandling(); + } public $company; diff --git a/tests/Unit/Tax/EuTaxTest.php b/tests/Unit/Tax/EuTaxTest.php index b56c13050711..537cfaa5fd19 100644 --- a/tests/Unit/Tax/EuTaxTest.php +++ b/tests/Unit/Tax/EuTaxTest.php @@ -399,7 +399,7 @@ class EuTaxTest extends TestCase 'status_id' => Invoice::STATUS_SENT, 'tax_data' => new Response([ 'geoState' => 'CA', - ]), + ]), ]); $process = new Rule();