mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-12 14:12:44 +01:00
Activity Export
This commit is contained in:
parent
1a503cf290
commit
6da98e2a3a
121
app/Export/CSV/ActivityExport.php
Normal file
121
app/Export/CSV/ActivityExport.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Export\CSV;
|
||||
|
||||
use App\Models\Task;
|
||||
use App\Utils\Ninja;
|
||||
use League\Csv\Writer;
|
||||
use App\Models\Company;
|
||||
use App\Models\Activity;
|
||||
use App\Libraries\MultiDB;
|
||||
use App\Models\DateFormat;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use App\Transformers\ActivityTransformer;
|
||||
|
||||
class ActivityExport extends BaseExport
|
||||
{
|
||||
private Company $company;
|
||||
|
||||
private $entity_transformer;
|
||||
|
||||
public string $date_key = 'created_at';
|
||||
|
||||
private string $date_format = 'YYYY-MM-DD';
|
||||
|
||||
public Writer $csv;
|
||||
|
||||
public array $entity_keys = [
|
||||
'date' => 'date',
|
||||
'activity' => 'activity',
|
||||
'address' => 'address',
|
||||
];
|
||||
|
||||
private array $decorate_keys = [
|
||||
|
||||
];
|
||||
|
||||
public function __construct(Company $company, array $input)
|
||||
{
|
||||
$this->company = $company;
|
||||
$this->input = $input;
|
||||
$this->entity_transformer = new ActivityTransformer();
|
||||
}
|
||||
|
||||
public function run()
|
||||
{
|
||||
MultiDB::setDb($this->company->db);
|
||||
App::forgetInstance('translator');
|
||||
App::setLocale($this->company->locale());
|
||||
$t = app('translator');
|
||||
$t->replace(Ninja::transformTranslations($this->company->settings));
|
||||
|
||||
$this->date_format = DateFormat::find($this->company->settings->date_format_id)->format;
|
||||
|
||||
//load the CSV document from a string
|
||||
$this->csv = Writer::createFromString();
|
||||
|
||||
ksort($this->entity_keys);
|
||||
|
||||
if (count($this->input['report_keys']) == 0) {
|
||||
$this->input['report_keys'] = array_values($this->entity_keys);
|
||||
}
|
||||
|
||||
//insert the header
|
||||
$this->csv->insertOne($this->buildHeader());
|
||||
|
||||
$query = Activity::query()
|
||||
->where('company_id', $this->company->id);
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$query->cursor()
|
||||
->each(function ($entity) {
|
||||
$this->buildRow($entity);
|
||||
});
|
||||
|
||||
return $this->csv->toString();
|
||||
}
|
||||
|
||||
private function buildRow(Activity $activity)
|
||||
{
|
||||
|
||||
$this->csv->insertOne([
|
||||
Carbon::parse($activity->created_at)->format($this->date_format),
|
||||
ctrans("texts.activity_{$activity->activity_type_id}",[
|
||||
'client' => $activity->client ? $activity->client->present()->name() : '',
|
||||
'contact' => $activity->contact ? $activity->contact->present()->name() : '',
|
||||
'quote' => $activity->quote ? $activity->quote->number : '',
|
||||
'user' => $activity->user ? $activity->user->present()->name() : 'System',
|
||||
'expense' => $activity->expense ? $activity->expense->number : '',
|
||||
'invoice' => $activity->invoice ? $activity->invoice->number : '',
|
||||
'recurring_invoice' => $activity->recurring_invoice ? $activity->recurring_invoice->number : '',
|
||||
'payment' => $activity->payment ? $activity->payment->number : '',
|
||||
'credit' => $activity->credit ? $activity->credit->number : '',
|
||||
'task' => $activity->task ? $activity->task->number : '',
|
||||
'vendor' => $activity->vendor ? $activity->vendor->present()->name() : '',
|
||||
'purchase_order' => $activity->purchase_order ? $activity->purchase_order->number : '',
|
||||
'subscription' => $activity->subscription ? $activity->subscription->name : '',
|
||||
'vendor_contact' => $activity->vendor_contact ? $activity->vendor_contact->present()->name() : '',
|
||||
'recurring_expense' => $activity->recurring_expense ? $activity->recurring_expense->number : '',
|
||||
]),
|
||||
$activity->ip,
|
||||
]);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private function decorateAdvancedFields(Task $task, array $entity) :array
|
||||
{
|
||||
return $entity;
|
||||
}
|
||||
}
|
@ -114,7 +114,6 @@ class ActivityController extends BaseController
|
||||
'credit' => $activity->credit ? $activity->credit : '',
|
||||
'task' => $activity->task ? $activity->task : '',
|
||||
'vendor' => $activity->vendor ? $activity->vendor : '',
|
||||
'vendor_contact' => $activity->vendor_contact ? $activity->vendor_contact : '',
|
||||
'purchase_order' => $activity->purchase_order ? $activity->purchase_order : '',
|
||||
'subscription' => $activity->subscription ? $activity->subscription : '',
|
||||
'vendor_contact' => $activity->vendor_contact ? $activity->vendor_contact : '',
|
||||
|
54
app/Http/Controllers/Reports/ActivityReportController.php
Normal file
54
app/Http/Controllers/Reports/ActivityReportController.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Http\Controllers\Reports;
|
||||
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Jobs\Report\SendToAdmin;
|
||||
use App\Export\CSV\ActivityExport;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use App\Http\Requests\Report\GenericReportRequest;
|
||||
|
||||
class ActivityReportController extends BaseController
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
private string $filename = 'activities.csv';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
public function __invoke(GenericReportRequest $request)
|
||||
{
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ActivityExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
}
|
||||
// expect a list of visible fields, or use the default
|
||||
|
||||
$export = new ActivityExport(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);
|
||||
}
|
||||
}
|
124
routes/api.php
124
routes/api.php
@ -10,93 +10,94 @@
|
||||
| is assigned the "api" middleware group. Enjoy building your API!
|
||||
|
|
||||
*/
|
||||
use App\Http\Controllers\AccountController;
|
||||
use App\Http\Controllers\ActivityController;
|
||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||
use App\Http\Controllers\Auth\LoginController;
|
||||
use App\Http\Controllers\Bank\YodleeController;
|
||||
use App\Http\Controllers\BankIntegrationController;
|
||||
use App\Http\Controllers\BankTransactionController;
|
||||
use App\Http\Controllers\BankTransactionRuleController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use App\Http\Controllers\PingController;
|
||||
use App\Http\Controllers\TaskController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use App\Http\Controllers\ChartController;
|
||||
use App\Http\Controllers\EmailController;
|
||||
use App\Http\Controllers\QuoteController;
|
||||
use App\Http\Controllers\TokenController;
|
||||
use App\Http\Controllers\ClientController;
|
||||
use App\Http\Controllers\ClientGatewayTokenController;
|
||||
use App\Http\Controllers\ClientStatementController;
|
||||
use App\Http\Controllers\CompanyController;
|
||||
use App\Http\Controllers\CompanyGatewayController;
|
||||
use App\Http\Controllers\CompanyLedgerController;
|
||||
use App\Http\Controllers\CompanyUserController;
|
||||
use App\Http\Controllers\ConnectedAccountController;
|
||||
use App\Http\Controllers\CreditController;
|
||||
use App\Http\Controllers\DesignController;
|
||||
use App\Http\Controllers\DocumentController;
|
||||
use App\Http\Controllers\EmailController;
|
||||
use App\Http\Controllers\ExpenseCategoryController;
|
||||
use App\Http\Controllers\ExpenseController;
|
||||
use App\Http\Controllers\ExportController;
|
||||
use App\Http\Controllers\FilterController;
|
||||
use App\Http\Controllers\GroupSettingController;
|
||||
use App\Http\Controllers\HostedMigrationController;
|
||||
use App\Http\Controllers\ImportController;
|
||||
use App\Http\Controllers\ImportJsonController;
|
||||
use App\Http\Controllers\InAppPurchase\AppleController;
|
||||
use App\Http\Controllers\LogoutController;
|
||||
use App\Http\Controllers\StaticController;
|
||||
use App\Http\Controllers\StripeController;
|
||||
use App\Http\Controllers\TwilioController;
|
||||
use App\Http\Controllers\VendorController;
|
||||
use App\Http\Controllers\AccountController;
|
||||
use App\Http\Controllers\CompanyController;
|
||||
use App\Http\Controllers\ExpenseController;
|
||||
use App\Http\Controllers\InvoiceController;
|
||||
use App\Http\Controllers\LicenseController;
|
||||
use App\Http\Controllers\LogoutController;
|
||||
use App\Http\Controllers\MigrationController;
|
||||
use App\Http\Controllers\OneTimeTokenController;
|
||||
use App\Http\Controllers\PaymentController;
|
||||
use App\Http\Controllers\PaymentNotificationWebhookController;
|
||||
use App\Http\Controllers\PaymentTermController;
|
||||
use App\Http\Controllers\PaymentWebhookController;
|
||||
use App\Http\Controllers\PingController;
|
||||
use App\Http\Controllers\PostMarkController;
|
||||
use App\Http\Controllers\PreviewController;
|
||||
use App\Http\Controllers\PreviewPurchaseOrderController;
|
||||
use App\Http\Controllers\ProductController;
|
||||
use App\Http\Controllers\ProjectController;
|
||||
use App\Http\Controllers\TaxRateController;
|
||||
use App\Http\Controllers\WebCronController;
|
||||
use App\Http\Controllers\WebhookController;
|
||||
use App\Http\Controllers\ActivityController;
|
||||
use App\Http\Controllers\DocumentController;
|
||||
use App\Http\Controllers\PostMarkController;
|
||||
use App\Http\Controllers\TemplateController;
|
||||
use App\Http\Controllers\MigrationController;
|
||||
use App\Http\Controllers\SchedulerController;
|
||||
use App\Http\Controllers\SubdomainController;
|
||||
use App\Http\Controllers\SystemLogController;
|
||||
use App\Http\Controllers\TwoFactorController;
|
||||
use App\Http\Controllers\Auth\LoginController;
|
||||
use App\Http\Controllers\ImportJsonController;
|
||||
use App\Http\Controllers\SelfUpdateController;
|
||||
use App\Http\Controllers\TaskStatusController;
|
||||
use App\Http\Controllers\Bank\YodleeController;
|
||||
use App\Http\Controllers\CompanyUserController;
|
||||
use App\Http\Controllers\PaymentTermController;
|
||||
use App\Http\Controllers\GroupSettingController;
|
||||
use App\Http\Controllers\OneTimeTokenController;
|
||||
use App\Http\Controllers\SubscriptionController;
|
||||
use App\Http\Controllers\CompanyLedgerController;
|
||||
use App\Http\Controllers\PurchaseOrderController;
|
||||
use App\Http\Controllers\QuoteController;
|
||||
use App\Http\Controllers\TaskSchedulerController;
|
||||
use App\Http\Controllers\CompanyGatewayController;
|
||||
use App\Http\Controllers\PaymentWebhookController;
|
||||
use App\Http\Controllers\RecurringQuoteController;
|
||||
use App\Http\Controllers\BankIntegrationController;
|
||||
use App\Http\Controllers\BankTransactionController;
|
||||
use App\Http\Controllers\ClientStatementController;
|
||||
use App\Http\Controllers\ExpenseCategoryController;
|
||||
use App\Http\Controllers\HostedMigrationController;
|
||||
use App\Http\Controllers\ConnectedAccountController;
|
||||
use App\Http\Controllers\RecurringExpenseController;
|
||||
use App\Http\Controllers\RecurringInvoiceController;
|
||||
use App\Http\Controllers\RecurringQuoteController;
|
||||
use App\Http\Controllers\Reports\ClientContactReportController;
|
||||
use App\Http\Controllers\ClientGatewayTokenController;
|
||||
use App\Http\Controllers\Reports\TaskReportController;
|
||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||
use App\Http\Controllers\BankTransactionRuleController;
|
||||
use App\Http\Controllers\InAppPurchase\AppleController;
|
||||
use App\Http\Controllers\Reports\QuoteReportController;
|
||||
use App\Http\Controllers\PreviewPurchaseOrderController;
|
||||
use App\Http\Controllers\Reports\ClientReportController;
|
||||
use App\Http\Controllers\Reports\CreditReportController;
|
||||
use App\Http\Controllers\Reports\DocumentReportController;
|
||||
use App\Http\Controllers\Reports\ExpenseReportController;
|
||||
use App\Http\Controllers\Reports\InvoiceItemReportController;
|
||||
use App\Http\Controllers\Reports\InvoiceReportController;
|
||||
use App\Http\Controllers\Reports\PaymentReportController;
|
||||
use App\Http\Controllers\Reports\ProductReportController;
|
||||
use App\Http\Controllers\Reports\ProductSalesReportController;
|
||||
use App\Http\Controllers\Reports\ProfitAndLossController;
|
||||
use App\Http\Controllers\Reports\ActivityReportController;
|
||||
use App\Http\Controllers\Reports\DocumentReportController;
|
||||
use App\Http\Controllers\Reports\QuoteItemReportController;
|
||||
use App\Http\Controllers\Reports\QuoteReportController;
|
||||
use App\Http\Controllers\Reports\RecurringInvoiceReportController;
|
||||
use App\Http\Controllers\Reports\TaskReportController;
|
||||
use App\Http\Controllers\SchedulerController;
|
||||
use App\Http\Controllers\SelfUpdateController;
|
||||
use App\Http\Controllers\StaticController;
|
||||
use App\Http\Controllers\StripeController;
|
||||
use App\Http\Controllers\SubdomainController;
|
||||
use App\Http\Controllers\SubscriptionController;
|
||||
use App\Http\Controllers\Support\Messages\SendingController;
|
||||
use App\Http\Controllers\SystemLogController;
|
||||
use App\Http\Controllers\TaskController;
|
||||
use App\Http\Controllers\TaskSchedulerController;
|
||||
use App\Http\Controllers\TaskStatusController;
|
||||
use App\Http\Controllers\TaxRateController;
|
||||
use App\Http\Controllers\TemplateController;
|
||||
use App\Http\Controllers\TokenController;
|
||||
use App\Http\Controllers\TwilioController;
|
||||
use App\Http\Controllers\TwoFactorController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use App\Http\Controllers\VendorController;
|
||||
use App\Http\Controllers\WebCronController;
|
||||
use App\Http\Controllers\WebhookController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\Reports\InvoiceItemReportController;
|
||||
use App\Http\Controllers\PaymentNotificationWebhookController;
|
||||
use App\Http\Controllers\Reports\ProductSalesReportController;
|
||||
use App\Http\Controllers\Reports\ClientContactReportController;
|
||||
use App\Http\Controllers\Reports\RecurringInvoiceReportController;
|
||||
|
||||
Route::group(['middleware' => ['throttle:api', 'api_secret_check']], function () {
|
||||
Route::post('api/v1/signup', [AccountController::class, 'store'])->name('signup.submit');
|
||||
@ -269,6 +270,7 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale']
|
||||
Route::post('refresh', [LoginController::class, 'refresh'])->middleware('throttle:refresh');
|
||||
|
||||
Route::post('reports/clients', ClientReportController::class);
|
||||
Route::post('reports/activities', ActivityReportController::class);
|
||||
Route::post('reports/contacts', ClientContactReportController::class);
|
||||
Route::post('reports/credits', CreditReportController::class);
|
||||
Route::post('reports/documents', DocumentReportController::class);
|
||||
|
Loading…
Reference in New Issue
Block a user