diff --git a/app/controllers/ActivityController.php b/app/controllers/ActivityController.php index 125e3bd72948..ba8797bb1d00 100755 --- a/app/controllers/ActivityController.php +++ b/app/controllers/ActivityController.php @@ -11,7 +11,6 @@ class ActivityController extends \BaseController ->select('activities.id', 'activities.message', 'activities.created_at', 'clients.currency_id', 'activities.balance', 'activities.adjustment'); return Datatable::query($query) - //->addColumn('blank', function($model) { return ''; }) ->addColumn('id', function ($model) { return Utils::timestampToDateTimeString(strtotime($model->created_at)); }) ->addColumn('message', function ($model) { return Utils::decodeActivity($model->message); }) ->addColumn('balance', function ($model) { return Utils::formatMoney($model->balance, $model->currency_id); }) diff --git a/app/controllers/InvoiceController.php b/app/controllers/InvoiceController.php index d0a889079b80..3eb487d4ce19 100755 --- a/app/controllers/InvoiceController.php +++ b/app/controllers/InvoiceController.php @@ -494,4 +494,50 @@ class InvoiceController extends \BaseController return self::edit($publicId, true); } + + public function invoiceHistory($publicId) + { + $invoice = Invoice::withTrashed()->scope($publicId)->firstOrFail(); + $invoice->load('user', 'invoice_items', 'account.country', 'client.contacts', 'client.country'); + $invoice->invoice_date = Utils::fromSqlDate($invoice->invoice_date); + $invoice->due_date = Utils::fromSqlDate($invoice->due_date); + $invoice->is_pro = Auth::user()->isPro(); + $invoice->is_quote = intval($invoice->is_quote); + + $activityTypeId = $invoice->is_quote ? ACTIVITY_TYPE_UPDATE_QUOTE : ACTIVITY_TYPE_UPDATE_INVOICE; + $activities = Activity::scope(false, $invoice->account_id)->with(['user' => function($query) { + $query->select(['id', 'first_name', 'last_name']); + }])->where('activity_type_id', '=', $activityTypeId)->orderBy('id', 'desc')->get(['id', 'created_at', 'user_id', 'json_backup']); + + $versionsJson = []; + $versionsSelect = []; + $lastId = false; + + foreach ($activities as $activity) { + $backup = json_decode($activity->json_backup); + $backup->invoice_date = Utils::fromSqlDate($backup->invoice_date); + $backup->due_date = Utils::fromSqlDate($backup->due_date); + $backup->is_pro = Auth::user()->isPro(); + $backup->is_quote = intval($backup->is_quote); + + $versionsJson[$activity->id] = $backup; + + $key = Utils::timestampToDateTimeString(strtotime($activity->created_at)) . ' - ' . $activity->user->getDisplayName(); + $versionsSelect[$lastId ? $lastId : 0] = $key; + $lastId = $activity->id; + } + + $versionsSelect[$lastId] = Utils::timestampToDateTimeString(strtotime($invoice->created_at)) . ' - ' . $invoice->user->getDisplayName(); + //dd($versionsSelect); + //dd($activities); + + $data = [ + 'invoice' => $invoice, + 'versionsJson' => json_encode($versionsJson), + 'versionsSelect' => $versionsSelect, + 'invoiceDesigns' => InvoiceDesign::remember(DEFAULT_QUERY_CACHE, 'invoice_designs_cache_'.Auth::user()->maxInvoiceDesignId())->where('id', '<=', Auth::user()->maxInvoiceDesignId())->orderBy('id')->get(), + ]; + + return View::make('invoices.history', $data); + } } diff --git a/app/lang/en/texts.php b/app/lang/en/texts.php index 1be03bccc3ad..115725a4e15a 100644 --- a/app/lang/en/texts.php +++ b/app/lang/en/texts.php @@ -490,5 +490,11 @@ return array( 'reason_for_canceling' => 'Help us improve our site by telling us why you\'re leaving.', 'discount_percent' => 'Percent', 'discount_amount' => 'Amount', - + + 'invoice_history' => 'Invoice History', + 'quote_history' => 'Quote History', + 'current_version' => 'Current version', + 'select_versiony' => 'Select version', + 'view_history' => 'View History', + ); diff --git a/app/models/Activity.php b/app/models/Activity.php index e84d542911be..1eca289b0163 100755 --- a/app/models/Activity.php +++ b/app/models/Activity.php @@ -1,40 +1,5 @@ belongsTo('Account'); } + public function user() + { + return $this->belongsTo('User'); + } + private static function getBlank($entity = false) { $activity = new Activity(); diff --git a/app/ninja/repositories/InvoiceRepository.php b/app/ninja/repositories/InvoiceRepository.php index 1f07ecd01181..5e4c1e723d16 100755 --- a/app/ninja/repositories/InvoiceRepository.php +++ b/app/ninja/repositories/InvoiceRepository.php @@ -144,6 +144,7 @@ class InvoiceRepository if (!$model->deleted_at || $model->deleted_at == '0000-00-00') { $str .= '