diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 4deee333434c..bcb244f1e21d 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -164,8 +164,10 @@ class PaymentController extends BaseController */ public function store(CreatePaymentRequest $request) { - $input = $request->input(); + // check payment has been marked sent + $request->invoice->markSentIfUnsent(); + $input = $request->input(); $input['invoice_id'] = Invoice::getPrivateId($input['invoice']); $input['client_id'] = Client::getPrivateId($input['client']); $payment = $this->paymentRepo->save($input); diff --git a/app/Http/Requests/CreatePaymentRequest.php b/app/Http/Requests/CreatePaymentRequest.php index ff30f0da9d8e..9b45b2486dd7 100644 --- a/app/Http/Requests/CreatePaymentRequest.php +++ b/app/Http/Requests/CreatePaymentRequest.php @@ -22,9 +22,8 @@ class CreatePaymentRequest extends PaymentRequest public function rules() { $input = $this->input(); - $invoice = Invoice::scope($input['invoice']) + $this->invoice = $invoice = Invoice::scope($input['invoice']) ->invoices() - ->whereIsPublic(true) ->firstOrFail(); $rules = [ diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index ee0400a9314a..1e125117b769 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -585,7 +585,7 @@ class Invoice extends EntityModel implements BalanceAffecting public function canBePaid() { - return floatval($this->balance) > 0 && ! $this->is_deleted && $this->isInvoice() && $this->is_public; + return floatval($this->balance) > 0 && ! $this->is_deleted && $this->isInvoice(); } public static function calcStatusLabel($status, $class, $entityType, $quoteInvoiceId) diff --git a/app/Ninja/Datatables/InvoiceDatatable.php b/app/Ninja/Datatables/InvoiceDatatable.php index 3f3ec89a982f..40e4251a770a 100644 --- a/app/Ninja/Datatables/InvoiceDatatable.php +++ b/app/Ninja/Datatables/InvoiceDatatable.php @@ -133,7 +133,7 @@ class InvoiceDatatable extends EntityDatatable return URL::to("payments/create/{$model->client_public_id}/{$model->public_id}"); }, function ($model) use ($entityType) { - return $model->is_public && $entityType == ENTITY_INVOICE && $model->balance > 0 && Auth::user()->can('create', ENTITY_PAYMENT); + return $entityType == ENTITY_INVOICE && $model->balance > 0 && Auth::user()->can('create', ENTITY_PAYMENT); } ], [ diff --git a/app/Ninja/PaymentDrivers/BasePaymentDriver.php b/app/Ninja/PaymentDrivers/BasePaymentDriver.php index b919696242a4..7fd32743cddf 100644 --- a/app/Ninja/PaymentDrivers/BasePaymentDriver.php +++ b/app/Ninja/PaymentDrivers/BasePaymentDriver.php @@ -593,6 +593,7 @@ class BasePaymentDriver { $invitation = $this->invitation; $invoice = $this->invoice(); + $invoice->markSentIfUnsent(); $payment = Payment::createNew($invitation); $payment->invitation_id = $invitation->id; diff --git a/app/Ninja/Repositories/InvoiceRepository.php b/app/Ninja/Repositories/InvoiceRepository.php index 967f6ded8ac0..f5a591d046fb 100644 --- a/app/Ninja/Repositories/InvoiceRepository.php +++ b/app/Ninja/Repositories/InvoiceRepository.php @@ -316,8 +316,7 @@ class InvoiceRepository extends BaseRepository return $invoice; } - // set default to true for backwards compatability - if ( ! isset($data['is_public']) || filter_var($data['is_public'], FILTER_VALIDATE_BOOLEAN)) { + if (isset($data['is_public']) && filter_var($data['is_public'], FILTER_VALIDATE_BOOLEAN)) { $invoice->is_public = true; if ( ! $invoice->isSent()) { $invoice->invoice_status_id = INVOICE_STATUS_SENT; @@ -773,9 +772,7 @@ class InvoiceRepository extends BaseRepository return; } - if ( ! $invoice->isSent()) { - $this->markSent($invoice); - } + $invoice->markSentIfUnsent(); $data = [ 'client_id' => $invoice->client_id, diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 283a02c342ea..0a17f72231bf 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -364,6 +364,11 @@ class ImportService private function saveData($source, $entityType, $row, $data_index) { $data = $this->processedRows[$data_index]; + + if ($entityType == ENTITY_INVOICE) { + $data['is_public'] = true; + } + $entity = $this->{"{$entityType}Repo"}->save($data); // update the entity maps diff --git a/app/Services/PaymentService.php b/app/Services/PaymentService.php index 4e66a8fe0dc8..687c730413e7 100644 --- a/app/Services/PaymentService.php +++ b/app/Services/PaymentService.php @@ -58,6 +58,8 @@ class PaymentService extends BaseService return false; } + $invoice->markSentIfUnsent(); + if ($credits = $client->credits->sum('balance')) { $balance = $invoice->balance; $amount = min($credits, $balance); diff --git a/database/migrations/2016_07_08_083802_support_new_pricing.php b/database/migrations/2016_07_08_083802_support_new_pricing.php index 89a8a8a4b627..b6bacffc6758 100644 --- a/database/migrations/2016_07_08_083802_support_new_pricing.php +++ b/database/migrations/2016_07_08_083802_support_new_pricing.php @@ -30,7 +30,9 @@ class SupportNewPricing extends Migration // https://github.com/invoiceninja/invoiceninja/pull/955 Schema::table('activities', function (Blueprint $table) { $table->integer('task_id')->after('invitation_id')->nullable(); - $table->unsignedInteger('client_id')->nullable()->change(); + if (Schema::hasColumn('activities', 'client_id')) { + $table->unsignedInteger('client_id')->nullable()->change(); + } }); // This may fail if the table was created as MyISAM