Merge pull request #407 from sebastiancretu/send_inv_est_pay_as_attachment

Send invoices, estimates and payments as attachments
This commit is contained in:
Mohit Panjwani
2021-03-22 12:06:06 +05:30
committed by GitHub
19 changed files with 207 additions and 21 deletions

View File

@ -40,9 +40,16 @@ class SendEstimateMail extends Mailable
'mailable_id' => $this->data['estimate']['id']
]);
return $this->from($this->data['from'], config('mail.from.name'))
$mailContent = $this->from($this->data['from'], config('mail.from.name'))
->subject($this->data['subject'])
->markdown('emails.send.estimate', ['data', $this->data]);
if ($this->data['attach']['data'])
$mailContent->attachData(
$this->data['attach']['data']->output(),
$this->data['estimate']['estimate_number'] . '.pdf'
);
return $mailContent;
}
}

View File

@ -41,8 +41,16 @@ class SendInvoiceMail extends Mailable
'mailable_id' => $this->data['invoice']['id']
]);
return $this->from($this->data['from'], config('mail.from.name'))
$mailContent = $this->from($this->data['from'], config('mail.from.name'))
->subject($this->data['subject'])
->markdown('emails.send.invoice', ['data', $this->data]);
if ($this->data['attach']['data'])
$mailContent->attachData(
$this->data['attach']['data']->output(),
$this->data['invoice']['invoice_number'] . '.pdf'
);
return $mailContent;
}
}

View File

@ -41,9 +41,16 @@ class SendPaymentMail extends Mailable
'mailable_id' => $this->data['payment']['id']
]);
return $this->from($this->data['from'], config('mail.from.name'))
$mailContent = $this->from($this->data['from'], config('mail.from.name'))
->subject($this->data['subject'])
->markdown('emails.send.payment', ['data', $this->data]);
if ($this->data['attach']['data'])
$mailContent->attachData(
$this->data['attach']['data']->output(),
$this->data['payment']['payment_number'] . '.pdf'
);
return $mailContent;
}
}

View File

@ -379,6 +379,7 @@ class Estimate extends Model implements HasMedia
$data['user'] = $this->user->toArray();
$data['company'] = $this->company->toArray();
$data['body'] = $this->getEmailBody($data['body']);
$data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
\Mail::to($data['to'])->send(new SendEstimateMail($data));
@ -468,6 +469,17 @@ class Estimate extends Model implements HasMedia
return $this->getFormattedString($this->notes);
}
public function getEmailAttachmentSetting()
{
$estimateAsAttachment = CompanySetting::getSetting('estimate_email_attachment', $this->company_id);
if($estimateAsAttachment == 'NO') {
return false;
}
return true;
}
public function getEmailBody($body)
{
$values = array_merge($this->getFieldsArray(), $this->getExtraFields());

View File

@ -429,6 +429,7 @@ class Invoice extends Model implements HasMedia
$data['user'] = $this->user->toArray();
$data['company'] = Company::find($this->company_id);
$data['body'] = $this->getEmailBody($data['body']);
$data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
if ($this->status == Invoice::STATUS_DRAFT) {
$this->status = Invoice::STATUS_SENT;
@ -526,6 +527,17 @@ class Invoice extends Model implements HasMedia
return PDF::loadView('app.pdf.invoice.' . $invoiceTemplate->view);
}
public function getEmailAttachmentSetting()
{
$invoiceAsAttachment = CompanySetting::getSetting('invoice_email_attachment', $this->company_id);
if($invoiceAsAttachment == 'NO') {
return false;
}
return true;
}
public function getCompanyAddress()
{
$format = CompanySetting::getSetting('invoice_company_address_format', $this->company_id);

View File

@ -124,6 +124,7 @@ class Payment extends Model implements HasMedia
$data['user'] = $this->user->toArray();
$data['company'] = Company::find($this->company_id);
$data['body'] = $this->getEmailBody($data['body']);
$data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
\Mail::to($data['to'])->send(new SendPaymentMail($data));
@ -400,6 +401,17 @@ class Payment extends Model implements HasMedia
return $this->getFormattedString($format);
}
public function getEmailAttachmentSetting()
{
$paymentAsAttachment = CompanySetting::getSetting('payment_email_attachment', $this->company_id);
if($paymentAsAttachment == 'NO') {
return false;
}
return true;
}
public function getNotes()
{
return $this->getFormattedString($this->notes);

View File

@ -60,6 +60,9 @@ class DefaultSettingsSeeder extends Seeder
'payment_prefix' => 'PAY',
'payment_auto_generate' => 'YES',
'save_pdf_to_disk' => 'NO',
'invoice_email_attachment' => 'NO',
'estimate_email_attachment' => 'NO',
'payment_email_attachment' => 'NO',
];
CompanySetting::setSettings($settings, $user->company_id);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/assets/js/app.js": "/assets/js/app.js?id=2fe48b55fc5693cab09f",
"/assets/js/app.js": "/assets/js/app.js?id=8fb7348f2257eedcb3e8",
"/assets/css/crater.css": "/assets/css/crater.css?id=7a822f915d7e413148f6"
}

View File

@ -745,6 +745,8 @@
"invoice_settings": "Invoice Settings",
"autogenerate_invoice_number": "Auto-generate Invoice Number",
"invoice_setting_description": "Disable this, If you don't wish to auto-generate invoice numbers each time you create a new invoice.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Enter invoice prefix",
"terms_and_conditions": "Terms and Conditions",
"company_address_format": "Company Address Format",
@ -759,6 +761,8 @@
"estimate_settings": "Estimate Settings",
"autogenerate_estimate_number": "Auto-generate Estimate Number",
"estimate_setting_description": "Disable this, If you don't wish to auto-generate estimate numbers each time you create a new estimate.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Enter estmiate prefix",
"estimate_setting_updated": "Estimate Setting updated successfully",
"company_address_format": "Company Address Format",
@ -773,6 +777,8 @@
"payment_settings": "Payment Settings",
"autogenerate_payment_number": "Auto-generate Payment Number",
"payment_setting_description": "Disable this, If you don't wish to auto-generate payment numbers each time you create a new payment.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Enter Payment Prefix",
"payment_setting_updated": "Payment Setting updated successfully",
"payment_modes": "Payment Modes",

View File

@ -59,12 +59,15 @@ export default {
this.isRequestOnGoing = true
let res = await this.fetchCompanySettings([
'payment_auto_generate',
'payment_email_attachment',
'payment_prefix',
'payment_mail_body',
'invoice_auto_generate',
'invoice_email_attachment',
'invoice_prefix',
'invoice_mail_body',
'estimate_auto_generate',
'estimate_email_attachment',
'estimate_prefix',
'estimate_mail_body',
'invoice_billing_address_format',

View File

@ -70,7 +70,7 @@
<sw-divider class="mt-6 mb-8" />
<div class="flex">
<div class="flex mt-3 mb-4">
<div class="relative w-12">
<sw-switch
v-model="estimateAutogenerate"
@ -96,6 +96,32 @@
</p>
</div>
</div>
<div class="flex mb-2">
<div class="relative w-12">
<sw-switch
v-model="estimateAsAttachment"
class="absolute"
style="top: -20px"
@change="setEstimateSetting"
/>
</div>
<div class="ml-4">
<p class="p-0 mb-1 text-base leading-snug text-black">
{{
$t('settings.customization.estimates.estimate_email_attachment')
}}
</p>
<p
class="p-0 m-0 text-xs leading-tight text-gray-500"
style="max-width: 480px"
>
{{
$t('settings.customization.estimates.estimate_email_attachment_setting_description')
}}
</p>
</div>
</div>
</div>
</template>
@ -115,6 +141,7 @@ export default {
data() {
return {
estimateAutogenerate: false,
estimateAsAttachment: false,
estimates: {
estimate_prefix: null,
@ -204,6 +231,14 @@ export default {
} else {
this.estimateAutogenerate = false
}
this.estimate_email_attachment = val ? val.estimate_email_attachment : ''
if (this.estimate_email_attachment === 'YES') {
this.estimateAsAttachment = true
} else {
this.estimateAsAttachment = false
}
},
},
@ -214,6 +249,7 @@ export default {
let data = {
settings: {
estimate_auto_generate: this.estimateAutogenerate ? 'YES' : 'NO',
estimate_email_attachment: this.estimateAsAttachment ? 'YES' : 'NO',
},
}
let response = await this.updateCompanySettings(data)

View File

@ -74,7 +74,7 @@
<sw-divider class="mt-6 mb-8" />
<div class="flex">
<div class="flex mt-3 mb-4">
<div class="relative w-12">
<sw-switch
v-model="invoiceAutogenerate"
@ -101,6 +101,33 @@
</p>
</div>
</div>
<div class="flex mb-2">
<div class="relative w-12">
<sw-switch
v-model="invoiceAsAttachment"
class="absolute"
style="top: -20px"
@change="setInvoiceSetting"
/>
</div>
<div class="ml-4">
<p class="p-0 mb-1 text-base leading-snug text-black">
{{
$t('settings.customization.invoices.invoice_email_attachment')
}}
</p>
<p
class="p-0 m-0 text-xs leading-tight text-gray-500"
style="max-width: 480px"
>
{{
$t('settings.customization.invoices.invoice_email_attachment_setting_description')
}}
</p>
</div>
</div>
</div>
</template>
@ -120,6 +147,7 @@ export default {
data() {
return {
invoiceAutogenerate: false,
invoiceAsAttachment: false,
invoices: {
invoice_prefix: null,
@ -189,6 +217,14 @@ export default {
} else {
this.invoiceAutogenerate = false
}
this.invoice_email_attachment = val ? val.invoice_email_attachment : ''
if (this.invoice_email_attachment === 'YES') {
this.invoiceAsAttachment = true
} else {
this.invoiceAsAttachment = false
}
},
},
@ -209,6 +245,7 @@ export default {
let data = {
settings: {
invoice_auto_generate: this.invoiceAutogenerate ? 'YES' : 'NO',
invoice_email_attachment: this.invoiceAsAttachment ? 'YES' : 'NO',
},
}

View File

@ -63,7 +63,7 @@
<sw-divider class="mt-6 mb-8" />
<div class="flex">
<div class="flex mt-3 mb-4">
<div class="relative w-12">
<sw-switch
v-model="paymentAutogenerate"
@ -90,6 +90,33 @@
</p>
</div>
</div>
<div class="flex mb-2">
<div class="relative w-12">
<sw-switch
v-model="paymentAsAttachment"
class="absolute"
style="top: -20px"
@change="setPaymentSetting"
/>
</div>
<div class="ml-4">
<p class="p-0 mb-1 text-base leading-snug text-black">
{{
$t('settings.customization.payments.payment_email_attachment')
}}
</p>
<p
class="p-0 m-0 text-xs leading-tight text-gray-500"
style="max-width: 480px"
>
{{
$t('settings.customization.payments.payment_email_attachment_setting_description')
}}
</p>
</div>
</div>
</div>
</template>
<script>
@ -108,6 +135,7 @@ export default {
data() {
return {
paymentAutogenerate: false,
paymentAsAttachment: false,
payments: {
payment_prefix: null,
@ -184,6 +212,14 @@ export default {
} else {
this.paymentAutogenerate = false
}
this.payment_email_attachment = val ? val.payment_email_attachment : ''
if (this.payment_email_attachment === 'YES') {
this.paymentAsAttachment = true
} else {
this.paymentAsAttachment = false
}
},
},
@ -203,6 +239,7 @@ export default {
let data = {
settings: {
payment_auto_generate: this.paymentAutogenerate ? 'YES' : 'NO',
payment_email_attachment: this.paymentAsAttachment ? 'YES' : 'NO',
},
}
let response = await this.updateCompanySettings(data)

View File

@ -17,9 +17,11 @@
@slot('subcopy')
@component('mail::subcopy')
{!! $data['body'] !!}
@if(!$data['attach']['data'])
@component('mail::button', ['url' => url('/customer/estimates/pdf/'.$data['estimate']['unique_hash'])])
View Estimate
@endcomponent
@endif
@endcomponent
@endslot

View File

@ -17,9 +17,11 @@
@slot('subcopy')
@component('mail::subcopy')
{!! $data['body'] !!}
@if(!$data['attach']['data'])
@component('mail::button', ['url' => url('/customer/invoices/pdf/'.$data['invoice']['unique_hash'])])
View Invoice
@endcomponent
@endif
@endcomponent
@endslot

View File

@ -17,9 +17,11 @@
@slot('subcopy')
@component('mail::subcopy')
{!! $data['body'] !!}
@if(!$data['attach']['data'])
@component('mail::button', ['url' => url('/payments/pdf/'.$data['payment']['unique_hash'])])
View Payment
@endcomponent
@endif
@endcomponent
@endslot