Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change Pre Payments to be always available as recurring #8397

Merged
merged 10 commits into from
Mar 22, 2023
6 changes: 2 additions & 4 deletions app/DataMapper/CompanySettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -471,12 +471,12 @@ class CompanySettings extends BaseSettings

public $client_initiated_payments_minimum = 0;

public $client_initiated_payments_recurring = false;
// public $client_initiated_payments_recurring = false;

public $sync_invoice_quote_columns = true;

public static $casts = [
'client_initiated_payments_recurring'=> 'bool',
// 'client_initiated_payments_recurring'=> 'bool',
'client_initiated_payments' => 'bool',
'client_initiated_payments_minimum' => 'float',
'sync_invoice_quote_columns' => 'bool',
Expand Down Expand Up @@ -505,7 +505,6 @@ class CompanySettings extends BaseSettings
'purchase_order_design_id' => 'string',
'purchase_order_footer' => 'string',
'purchase_order_number_pattern' => 'string',
'purchase_order_number_counter' => 'int',
'page_numbering_alignment' => 'string',
'page_numbering' => 'bool',
'auto_archive_invoice_cancelled' => 'bool',
Expand Down Expand Up @@ -537,7 +536,6 @@ class CompanySettings extends BaseSettings
'reminder_send_time' => 'int',
'email_sending_method' => 'string',
'gmail_sending_user_id' => 'string',
'currency_id' => 'string',
'counter_number_applied' => 'string',
'quote_number_applied' => 'string',
'email_subject_custom1' => 'string',
Expand Down
4 changes: 4 additions & 0 deletions app/Export/CSV/InvoiceItemExport.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ class InvoiceItemExport extends BaseExport
'amount' => 'amount',
'balance' => 'balance',
'client' => 'client_id',
'client_number' => 'client.number',
'client_id_number' => 'client.id_number',
'custom_surcharge1' => 'custom_surcharge1',
'custom_surcharge2' => 'custom_surcharge2',
'custom_surcharge3' => 'custom_surcharge3',
Expand Down Expand Up @@ -198,6 +200,8 @@ private function decorateAdvancedFields(Invoice $invoice, array $entity) :array

// if(in_array('client_id', $this->input['report_keys']))
$entity['client'] = $invoice->client->present()->name();
$entity['client_id_number'] = $invoice->client->id_number;
$entity['client_number'] = $invoice->client->number;

// if(in_array('status_id', $this->input['report_keys']))
$entity['status'] = $invoice->stringStatus($invoice->status_id);
Expand Down
11 changes: 8 additions & 3 deletions app/Http/Controllers/ClientPortal/PrePaymentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,16 @@ class PrePaymentController extends Controller
*/
public function index()
{
$client = auth()->guard('contact')->user()->client;
$minimum = $client->getSetting('client_initiated_payments_minimum');
$minimum_amount = $minimum == 0 ? "" : Number::formatMoney($minimum, $client);

$data = [
'title' => ctrans('texts.amount'). " " .auth()->guard('contact')->user()->client->currency()->code." (".auth()->guard('contact')->user()->client->currency()->symbol . ")",
'allows_recurring' => auth()->guard('contact')->user()->client->getSetting('client_initiated_payments_recurring'),
'title' => ctrans('texts.amount'). " " .$client->currency()->code." (".auth()->guard('contact')->user()->client->currency()->symbol . ")",
// 'allows_recurring' => auth()->guard('contact')->user()->client->getSetting('client_initiated_payments_recurring'),
'allows_recurring' => true,
'minimum_amount' => auth()->guard('contact')->user()->client->getSetting('client_initiated_payments_minimum'),
'minimum' => $minimum,
'minimum_amount' => $minimum_amount,
];

return $this->render('pre_payments.index', $data);
Expand Down
35 changes: 20 additions & 15 deletions app/Http/Controllers/ClientPortal/SubscriptionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,28 @@

class SubscriptionController extends Controller
{
/**
* This function is used to display the subscription page.
*
* @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
*/

public function index()
{
if (Ninja::isHosted()) {
$count = RecurringInvoice::query()
->where('client_id', auth()->guard('contact')->user()->client->id)
->where('company_id', auth()->guard('contact')->user()->client->company_id)
->where('status_id', RecurringInvoice::STATUS_ACTIVE)
->where('is_deleted', 0)
->whereNotNull('subscription_id')
->withTrashed()
->count();

if ($count == 0) {
return redirect()->route('client.ninja_contact_login', ['contact_key' => auth()->guard('contact')->user()->contact_key, 'company_key' => auth()->guard('contact')->user()->company->company_key]);
}
}
// if (Ninja::isHosted()) {
// $count = RecurringInvoice::query()
// ->where('client_id', auth()->guard('contact')->user()->client->id)
// ->where('company_id', auth()->guard('contact')->user()->client->company_id)
// ->where('status_id', RecurringInvoice::STATUS_ACTIVE)
// ->where('is_deleted', 0)
// ->whereNotNull('subscription_id')
// ->withTrashed()
// ->count();

// if ($count == 0) {
// return redirect()->route('client.ninja_contact_login', ['contact_key' => auth()->guard('contact')->user()->contact_key, 'company_key' => auth()->guard('contact')->user()->company->company_key]);
// }
// }

return render('subscriptions.index');
}
Expand All @@ -44,7 +50,6 @@ public function index()
*
* @param ShowRecurringInvoiceRequest $request
* @param RecurringInvoice $recurring_invoice
* @return Factory|View
*/
public function show(ShowRecurringInvoiceRequest $request, RecurringInvoice $recurring_invoice)
{
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Controllers/EmailController.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public function send(SendEmailRequest $request)
$mo->email_template_body = $request->input('template');
$mo->email_template_subject = str_replace("template", "subject", $request->input('template'));

if ($request->has('cc_email')) {
if ($request->has('cc_email') && $request->cc_email) {
$mo->cc[] = new Address($request->cc_email);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,17 @@ public function rules()
{
return [
'notes' => 'required|bail|',
'amount' => 'required|bail|',
'amount' => 'required|bail|gte:minimum_amount',
'minimum_amount' => '',
];
}

public function prepareForValidation()
{
$input = $this->all();


$this->replace($input);

}
}
2 changes: 1 addition & 1 deletion app/Http/Requests/Email/SendEmailRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function rules()
'template' => 'bail|required',
'entity' => 'bail|required',
'entity_id' => 'bail|required',
'cc_email' => 'bail|sometimes|email',
'cc_email' => 'bail|sometimes|email|nullable',
];
}

Expand Down
4 changes: 2 additions & 2 deletions app/Http/ViewComposers/PortalComposer.php
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,9 @@ private function sidebarMenu() :array
$data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar'];
}

// if (property_exists($this->settings, 'client_initiated_payments') && $this->settings->client_initiated_payments) {
if (auth()->guard('contact')->user()->client->getSetting('client_initiated_payments')) {
$data[] = ['title' => ctrans('texts.pre_payment'), 'url' => 'client.pre_payments.index', 'icon' => 'dollar-sign'];
// }
}

return $data;
}
Expand Down
4 changes: 2 additions & 2 deletions app/Jobs/Mail/PaymentFailedMailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ public function __construct(?PaymentHash $payment_hash, Company $company, Client
*/
public function handle()
{
if (!is_string($this->error)) {
$this->error = "Payment failed, no reason given.";
if (!is_string($this->error) || strlen($this->error) <=1) {
$this->error = "";
}

//Set DB
Expand Down
2 changes: 2 additions & 0 deletions app/Jobs/Subscription/CleanStaleInvoiceOrder.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public function __construct()
*/
public function handle(InvoiceRepository $repo) : void
{
nlog("Cleaning Stale Invoices:");

if (! config('ninja.db.multi_db_enabled')) {
Invoice::query()
->withTrashed()
Expand Down
4 changes: 4 additions & 0 deletions app/Mail/Admin/ClientPaymentFailureObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ private function getData()
'company' => $this->company,
];

if (strlen($this->error > 1)) {
$data['content'] .= "\n\n".$this->error;
}

return $data;
}
}
4 changes: 4 additions & 0 deletions app/Mail/Admin/PaymentFailureObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ private function getData()
'additional_info' => $this->error,
];

if (strlen($this->error > 1)) {
$data['content'] .= "\n\n".$this->error;
}

return $data;
}

Expand Down
6 changes: 5 additions & 1 deletion app/PaymentDrivers/GoCardless/ACH.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
use Illuminate\Routing\Redirector;
use Illuminate\View\View;

//@deprecated
class ACH implements MethodInterface
{
use MakesHash;
Expand Down Expand Up @@ -172,10 +173,13 @@ public function paymentResponse(PaymentResponseRequest $request)
$description = "Amount {$request->amount} from client {$this->go_cardless->client->present()->name()}";
}

$amount = $this->go_cardless->convertToGoCardlessAmount($this->go_cardless->payment_hash?->amount_with_fee(), $this->go_cardless->client->currency()->precision);

try {
$payment = $this->go_cardless->gateway->payments()->create([
'params' => [
'amount' => $request->amount,
// 'amount' => $request->amount,
'amount' => $amount,
'currency' => $request->currency,
'description' => $description,
'metadata' => [
Expand Down