mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 11:41:09 -04:00
Merge branch 'pdf-templates' into 'master'
fix invoice and estimate templates See merge request mohit.panjvani/crater-web!4
This commit is contained in:
@ -549,6 +549,16 @@ export default {
|
|||||||
action: 'Action',
|
action: 'Action',
|
||||||
add_currency: 'Add Currency'
|
add_currency: 'Add Currency'
|
||||||
},
|
},
|
||||||
|
mail: {
|
||||||
|
host: 'Mail Host',
|
||||||
|
port: 'Mail Port',
|
||||||
|
driver: 'Mail Driver',
|
||||||
|
password: 'Mail Password',
|
||||||
|
username: 'Mail Username',
|
||||||
|
mail_config: 'Mail Configuration',
|
||||||
|
encryption: 'Mail Encryption',
|
||||||
|
mail_config_desc: 'Below details will be used to update the mail environment. Also you can change the details anytime after logging in.'
|
||||||
|
},
|
||||||
pdf: {
|
pdf: {
|
||||||
title: 'PDF Setting',
|
title: 'PDF Setting',
|
||||||
footer_text: 'Footer Text',
|
footer_text: 'Footer Text',
|
||||||
|
|||||||
@ -71,6 +71,7 @@ import Preferences from './views/settings/Preferences.vue'
|
|||||||
import UserProfile from './views/settings/UserProfile.vue'
|
import UserProfile from './views/settings/UserProfile.vue'
|
||||||
import TaxTypes from './views/settings/TaxTypes.vue'
|
import TaxTypes from './views/settings/TaxTypes.vue'
|
||||||
import ExpenseCategory from './views/settings/ExpenseCategory.vue'
|
import ExpenseCategory from './views/settings/ExpenseCategory.vue'
|
||||||
|
import MailConfig from './views/settings/MailConfig.vue'
|
||||||
|
|
||||||
import Wizard from './views/wizard/Index.vue'
|
import Wizard from './views/wizard/Index.vue'
|
||||||
|
|
||||||
@ -327,6 +328,11 @@ const routes = [
|
|||||||
name: 'expense.category',
|
name: 'expense.category',
|
||||||
component: ExpenseCategory
|
component: ExpenseCategory
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'mail-configuration',
|
||||||
|
name: 'mailconfig',
|
||||||
|
component: MailConfig
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'notifications',
|
path: 'notifications',
|
||||||
name: 'notifications',
|
name: 'notifications',
|
||||||
|
|||||||
@ -688,7 +688,7 @@ export default {
|
|||||||
isValid = false
|
isValid = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (this.$v.newEstimate.$invalid === false && isValid === true) {
|
if (!this.$v.selectedCustomer.$invalid && this.$v.newEstimate.$invalid === false && isValid === true) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@ -519,14 +519,6 @@ export default {
|
|||||||
...mapActions('item', [
|
...mapActions('item', [
|
||||||
'fetchItems'
|
'fetchItems'
|
||||||
]),
|
]),
|
||||||
isEmpty (obj) {
|
|
||||||
for (let key in obj) {
|
|
||||||
if (obj.hasOwnProperty(key)) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
selectFixed () {
|
selectFixed () {
|
||||||
if (this.newInvoice.discount_type === 'fixed') {
|
if (this.newInvoice.discount_type === 'fixed') {
|
||||||
return
|
return
|
||||||
|
|||||||
@ -48,7 +48,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8 reports-tab-container">
|
<div class="col-sm-8 reports-tab-container">
|
||||||
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
||||||
<a :href="getReportUrl" class="base-button btn btn-primary btn-lg report-view-button" target="_blank">
|
<a class="base-button btn btn-primary btn-lg report-view-button" @click="viewReportsPDF">
|
||||||
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -179,6 +179,11 @@ export default {
|
|||||||
setRangeToCustom () {
|
setRangeToCustom () {
|
||||||
this.selectedRange = 'Custom'
|
this.selectedRange = 'Custom'
|
||||||
},
|
},
|
||||||
|
async viewReportsPDF () {
|
||||||
|
let data = await this.getReports()
|
||||||
|
window.open(this.getReportUrl, '_blank')
|
||||||
|
return data
|
||||||
|
},
|
||||||
async getReports (isDownload = false) {
|
async getReports (isDownload = false) {
|
||||||
this.$v.range.$touch()
|
this.$v.range.$touch()
|
||||||
this.$v.formData.$touch()
|
this.$v.formData.$touch()
|
||||||
|
|||||||
@ -48,7 +48,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8 reports-tab-container">
|
<div class="col-sm-8 reports-tab-container">
|
||||||
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
||||||
<a :href="getReportUrl" class="base-button btn btn-primary btn-lg report-view-button" target="_blank">
|
<a class="base-button btn btn-primary btn-lg report-view-button" @click="viewReportsPDF">
|
||||||
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -184,6 +184,11 @@ export default {
|
|||||||
setRangeToCustom () {
|
setRangeToCustom () {
|
||||||
this.selectedRange = 'Custom'
|
this.selectedRange = 'Custom'
|
||||||
},
|
},
|
||||||
|
async viewReportsPDF () {
|
||||||
|
let data = await this.getReports()
|
||||||
|
window.open(this.getReportUrl, '_blank')
|
||||||
|
return data
|
||||||
|
},
|
||||||
async getReports (isDownload = false) {
|
async getReports (isDownload = false) {
|
||||||
this.$v.range.$touch()
|
this.$v.range.$touch()
|
||||||
this.$v.formData.$touch()
|
this.$v.formData.$touch()
|
||||||
|
|||||||
@ -70,7 +70,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8 reports-tab-container">
|
<div class="col-sm-8 reports-tab-container">
|
||||||
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
||||||
<a :href="getReportUrl" class="base-button btn btn-primary btn-lg report-view-button" target="_blank">
|
<a class="base-button btn btn-primary btn-lg report-view-button" @click="viewReportsPDF">
|
||||||
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -217,6 +217,11 @@ export default {
|
|||||||
this.url = `${this.itemsSiteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}`
|
this.url = `${this.itemsSiteURL}?from_date=${moment(this.formData.from_date).format('DD/MM/YYYY')}&to_date=${moment(this.formData.to_date).format('DD/MM/YYYY')}`
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
|
async viewReportsPDF () {
|
||||||
|
let data = await this.getReports()
|
||||||
|
window.open(this.getReportUrl, '_blank')
|
||||||
|
return data
|
||||||
|
},
|
||||||
async getReports (isDownload = false) {
|
async getReports (isDownload = false) {
|
||||||
this.$v.range.$touch()
|
this.$v.range.$touch()
|
||||||
this.$v.formData.$touch()
|
this.$v.formData.$touch()
|
||||||
|
|||||||
@ -48,7 +48,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8 reports-tab-container">
|
<div class="col-sm-8 reports-tab-container">
|
||||||
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
<iframe :src="getReportUrl" class="reports-frame-style"/>
|
||||||
<a :href="getReportUrl" class="base-button btn btn-primary btn-lg report-view-button" target="_blank">
|
<a class="base-button btn btn-primary btn-lg report-view-button" @click="viewReportsPDF">
|
||||||
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
<font-awesome-icon icon="file-pdf" class="vue-icon icon-left svg-inline--fa fa-download fa-w-16 mr-2" /> <span>{{ $t('reports.view_pdf') }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -179,6 +179,11 @@ export default {
|
|||||||
setRangeToCustom () {
|
setRangeToCustom () {
|
||||||
this.selectedRange = 'Custom'
|
this.selectedRange = 'Custom'
|
||||||
},
|
},
|
||||||
|
async viewReportsPDF () {
|
||||||
|
let data = await this.getReports()
|
||||||
|
window.open(this.getReportUrl, '_blank')
|
||||||
|
return data
|
||||||
|
},
|
||||||
async getReports (isDownload = false) {
|
async getReports (isDownload = false) {
|
||||||
this.$v.range.$touch()
|
this.$v.range.$touch()
|
||||||
this.$v.formData.$touch()
|
this.$v.formData.$touch()
|
||||||
|
|||||||
213
resources/assets/js/views/settings/MailConfig.vue
Normal file
213
resources/assets/js/views/settings/MailConfig.vue
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
<template>
|
||||||
|
<div class="setting-main-container">
|
||||||
|
<div class="card setting-card">
|
||||||
|
<div class="page-header">
|
||||||
|
<h3 class="page-title">{{ $t('settings.mail.mail_config') }}</h3>
|
||||||
|
<p class="page-sub-title">
|
||||||
|
{{ $t('settings.mail.mail_config_desc') }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<form action="" @submit.prevent="saveEmailConfig()">
|
||||||
|
<div class="row my-2 mt-5">
|
||||||
|
<div class="col-md-6 my-2">
|
||||||
|
<label class="form-label">{{ $t('settings.mail.driver') }}</label>
|
||||||
|
<span class="text-danger"> *</span>
|
||||||
|
<base-select
|
||||||
|
v-model="mailConfigData.mail_driver"
|
||||||
|
:invalid="$v.mailConfigData.mail_driver.$error"
|
||||||
|
:options="mail_drivers"
|
||||||
|
:searchable="true"
|
||||||
|
:show-labels="false"
|
||||||
|
@change="$v.mailConfigData.mail_driver.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.mailConfigData.mail_driver.$error">
|
||||||
|
<span v-if="!$v.mailConfigData.mail_driver.required" class="text-danger">
|
||||||
|
{{ $tc('validation.required') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 my-2">
|
||||||
|
<label class="form-label">{{ $t('settings.mail.host') }}</label>
|
||||||
|
<span class="text-danger"> *</span>
|
||||||
|
<base-input
|
||||||
|
:invalid="$v.mailConfigData.mail_host.$error"
|
||||||
|
v-model.trim="mailConfigData.mail_host"
|
||||||
|
type="text"
|
||||||
|
name="mail_host"
|
||||||
|
@input="$v.mailConfigData.mail_host.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.mailConfigData.mail_host.$error">
|
||||||
|
<span v-if="!$v.mailConfigData.mail_host.required" class="text-danger">
|
||||||
|
{{ $tc('validation.required') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row my-2">
|
||||||
|
<div class="col-md-6 my-2">
|
||||||
|
<label class="form-label">{{ $t('settings.mail.username') }}</label>
|
||||||
|
<span class="text-danger"> *</span>
|
||||||
|
<base-input
|
||||||
|
:invalid="$v.mailConfigData.mail_username.$error"
|
||||||
|
v-model.trim="mailConfigData.mail_username"
|
||||||
|
type="text"
|
||||||
|
name="db_name"
|
||||||
|
@input="$v.mailConfigData.mail_username.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.mailConfigData.mail_username.$error">
|
||||||
|
<span v-if="!$v.mailConfigData.mail_username.required" class="text-danger">
|
||||||
|
{{ $tc('validation.required') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 my-2">
|
||||||
|
<label class="form-label">{{ $t('settings.mail.password') }}</label>
|
||||||
|
<span class="text-danger"> *</span>
|
||||||
|
<base-input
|
||||||
|
:invalid="$v.mailConfigData.mail_password.$error"
|
||||||
|
v-model.trim="mailConfigData.mail_password"
|
||||||
|
type="mail_password"
|
||||||
|
name="name"
|
||||||
|
@input="$v.mailConfigData.mail_password.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.mailConfigData.mail_password.$error">
|
||||||
|
<span v-if="!$v.mailConfigData.mail_password.required" class="text-danger">
|
||||||
|
{{ $tc('validation.required') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row my-2">
|
||||||
|
<div class="col-md-6 my-2">
|
||||||
|
<label class="form-label">{{ $t('settings.mail.port') }}</label>
|
||||||
|
<span class="text-danger"> *</span>
|
||||||
|
<base-input
|
||||||
|
:invalid="$v.mailConfigData.mail_port.$error"
|
||||||
|
v-model.trim="mailConfigData.mail_port"
|
||||||
|
type="text"
|
||||||
|
name="mail_port"
|
||||||
|
@input="$v.mailConfigData.mail_port.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.mailConfigData.mail_port.$error">
|
||||||
|
<span v-if="!$v.mailConfigData.mail_port.required" class="text-danger">
|
||||||
|
{{ $tc('validation.required') }}
|
||||||
|
</span>
|
||||||
|
<span v-if="!$v.mailConfigData.mail_port.numeric" class="text-danger">
|
||||||
|
{{ $tc('validation.numbers_only') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 my-2">
|
||||||
|
<label class="form-label">{{ $t('settings.mail.encryption') }}</label>
|
||||||
|
<span class="text-danger"> *</span>
|
||||||
|
<base-input
|
||||||
|
:invalid="$v.mailConfigData.mail_encryption.$error"
|
||||||
|
v-model.trim="mailConfigData.mail_encryption"
|
||||||
|
type="text"
|
||||||
|
name="name"
|
||||||
|
@input="$v.mailConfigData.mail_encryption.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.mailConfigData.mail_encryption.$error">
|
||||||
|
<span v-if="!$v.mailConfigData.mail_encryption.required" class="text-danger">
|
||||||
|
{{ $tc('validation.required') }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<base-button
|
||||||
|
:loading="loading"
|
||||||
|
class="pull-right mt-5"
|
||||||
|
icon="save"
|
||||||
|
color="theme"
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{{ $t('wizard.save_cont') }}
|
||||||
|
</base-button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import MultiSelect from 'vue-multiselect'
|
||||||
|
import { validationMixin } from 'vuelidate'
|
||||||
|
import Ls from '../../services/ls'
|
||||||
|
const { required, email, numeric } = require('vuelidate/lib/validators')
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
MultiSelect
|
||||||
|
},
|
||||||
|
mixins: [validationMixin],
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
mailConfigData: {
|
||||||
|
mail_driver: 'smtp',
|
||||||
|
mail_host: 'mailtrap.io',
|
||||||
|
mail_port: 2525,
|
||||||
|
mail_username: 'cc3c64516febd4',
|
||||||
|
mail_password: 'e6a0176301f587',
|
||||||
|
mail_encryption: 'tls'
|
||||||
|
},
|
||||||
|
loading: false,
|
||||||
|
mail_drivers: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validations: {
|
||||||
|
mailConfigData: {
|
||||||
|
mail_driver: {
|
||||||
|
required
|
||||||
|
},
|
||||||
|
mail_host: {
|
||||||
|
required
|
||||||
|
},
|
||||||
|
mail_port: {
|
||||||
|
required,
|
||||||
|
numeric
|
||||||
|
},
|
||||||
|
mail_username: {
|
||||||
|
required
|
||||||
|
},
|
||||||
|
mail_password: {
|
||||||
|
required
|
||||||
|
},
|
||||||
|
mail_encryption: {
|
||||||
|
required
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
// this.getMailDrivers()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getMailDrivers () {
|
||||||
|
this.loading = true
|
||||||
|
|
||||||
|
let response = await window.axios.get('/api/admin/onboarding/environment/mail')
|
||||||
|
|
||||||
|
if (response.data) {
|
||||||
|
this.mail_drivers = response.data
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async saveEmailConfig () {
|
||||||
|
this.$v.mailConfigData.$touch()
|
||||||
|
if (this.$v.mailConfigData.$invalid) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
this.loading = true
|
||||||
|
try {
|
||||||
|
let response = await window.axios.post('/api/admin/onboarding/environment/mail', this.mailConfigData)
|
||||||
|
if (response.data.success) {
|
||||||
|
window.toastr['success'](this.$t('wizard.success.' + response.data.success))
|
||||||
|
} else {
|
||||||
|
window.toastr['error'](this.$t('wizard.errors.' + response.data.error))
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
return true
|
||||||
|
} catch (e) {
|
||||||
|
window.toastr['error']('Something went wrong')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@ -63,6 +63,12 @@ export default {
|
|||||||
icon: 'list-alt',
|
icon: 'list-alt',
|
||||||
iconType: 'far'
|
iconType: 'far'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
link: '/admin/settings/mail-configuration',
|
||||||
|
title: 'settings.mail.mail_config',
|
||||||
|
icon: 'envelope',
|
||||||
|
iconType: 'fa'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
link: '/admin/settings/notifications',
|
link: '/admin/settings/notifications',
|
||||||
title: 'settings.menu_title.notifications',
|
title: 'settings.menu_title.notifications',
|
||||||
|
|||||||
6
resources/assets/sass/pages/reports.scss
vendored
6
resources/assets/sass/pages/reports.scss
vendored
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
.report-view-button {
|
.report-view-button {
|
||||||
display: none;
|
display: none;
|
||||||
|
color: $btn-secondary-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.report-fields-container {
|
.report-fields-container {
|
||||||
@ -61,8 +62,13 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.report-submit-button-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.report-view-button {
|
.report-view-button {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
color: $btn-secondary-color !important;
|
||||||
justify-content: center
|
justify-content: center
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -72,6 +72,7 @@
|
|||||||
.wrapper {
|
.wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: 60px;
|
padding-top: 60px;
|
||||||
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.address {
|
.address {
|
||||||
@ -244,6 +245,8 @@
|
|||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
padding: 0px 30px 0 30px;
|
padding: 0px 30px 0 30px;
|
||||||
|
page-break-before: avoid;
|
||||||
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table2 hr {
|
.table2 hr {
|
||||||
@ -257,7 +260,7 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.main-table-header td {
|
tr.main-table-header th {
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@ -284,28 +287,33 @@
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.padd2 {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
.table3 {
|
.table3 {
|
||||||
border: 1px solid #EAF1FB;
|
|
||||||
border-top: none;
|
border-top: none;
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 230px;
|
width: 630px;
|
||||||
height: 100px;
|
page-break-inside: avoid;
|
||||||
position: absolute;
|
page-break-before: auto;
|
||||||
right: -25;
|
page-break-after: auto;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-per-item-table3 {
|
.total-border-left {
|
||||||
border: 1px solid #EAF1FB;
|
border: 1px solid #E8E8E8!important;
|
||||||
border-top: none;
|
border-right: 0px !important;
|
||||||
padding-right: 30px;
|
padding-top: 0px;
|
||||||
box-sizing: border-box;
|
padding:8px !important;
|
||||||
width: 260px;
|
|
||||||
/* height: 100px; */
|
|
||||||
position: absolute;
|
|
||||||
right: -25;
|
|
||||||
}
|
}
|
||||||
|
.total-border-right {
|
||||||
|
border: 1px solid #E8E8E8!important;
|
||||||
|
border-left: 0px !important;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding:8px !important;
|
||||||
|
|
||||||
|
}
|
||||||
.inv-item {
|
.inv-item {
|
||||||
border-color: #d9d9d9;
|
border-color: #d9d9d9;
|
||||||
}
|
}
|
||||||
@ -323,6 +331,30 @@
|
|||||||
color:rgba(0, 0, 0, 0.85);
|
color:rgba(0, 0, 0, 0.85);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #595959;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 442px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-label {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: #040405;
|
||||||
|
width: 108px;
|
||||||
|
height: 19.87px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
@ -380,6 +412,7 @@
|
|||||||
<div style="clear: both;"></div>
|
<div style="clear: both;"></div>
|
||||||
</div>
|
</div>
|
||||||
@include('app.pdf.estimate.partials.table')
|
@include('app.pdf.estimate.partials.table')
|
||||||
|
@include('app.pdf.estimate.partials.notes')
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -74,6 +74,7 @@
|
|||||||
.wrapper {
|
.wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: 110px;
|
padding-top: 110px;
|
||||||
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.address {
|
.address {
|
||||||
@ -245,6 +246,8 @@
|
|||||||
margin-top: 200px;
|
margin-top: 200px;
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
padding: 0px 30px 0 30px;
|
padding: 0px 30px 0 30px;
|
||||||
|
page-break-before: avoid;
|
||||||
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table2 hr {
|
.table2 hr {
|
||||||
@ -258,7 +261,7 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.main-table-header td {
|
tr.main-table-header th {
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@ -295,27 +298,21 @@
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.padd2 {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.table3 {
|
.table3 {
|
||||||
border: 1px solid #EAF1FB;
|
border: 1px solid #EAF1FB;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 230px;
|
width: 630px;
|
||||||
height: 100px;
|
page-break-inside: avoid;
|
||||||
position: absolute;
|
page-break-before: auto;
|
||||||
right: -25;
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-per-item-table3 {
|
|
||||||
border: 1px solid #EAF1FB;
|
|
||||||
border-top: none;
|
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
width: 260px;
|
|
||||||
/* height: 100px; */
|
|
||||||
position: absolute;
|
|
||||||
right: -25;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inv-item {
|
.inv-item {
|
||||||
border-color: #d9d9d9;
|
border-color: #d9d9d9;
|
||||||
@ -361,6 +358,32 @@
|
|||||||
margin-bottom:1px;
|
margin-bottom:1px;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #595959;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 442px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-label {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: #040405;
|
||||||
|
width: 108px;
|
||||||
|
height: 19.87px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -402,6 +425,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@include('app.pdf.estimate.partials.table')
|
@include('app.pdf.estimate.partials.table')
|
||||||
|
@include('app.pdf.estimate.partials.notes')
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -80,6 +80,7 @@
|
|||||||
.wrapper {
|
.wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: 110px;
|
padding-top: 110px;
|
||||||
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.address {
|
.address {
|
||||||
@ -233,7 +234,7 @@
|
|||||||
.main-table-header {
|
.main-table-header {
|
||||||
border-bottom: 1px solid red;
|
border-bottom: 1px solid red;
|
||||||
}
|
}
|
||||||
tr.main-table-header td {
|
tr.main-table-header th {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@ -249,6 +250,8 @@
|
|||||||
margin-top: 188px;
|
margin-top: 188px;
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
padding: 0px 30px 0 30px;
|
padding: 0px 30px 0 30px;
|
||||||
|
page-break-before: avoid;
|
||||||
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table2 hr {
|
.table2 hr {
|
||||||
@ -284,26 +287,19 @@
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.padd2 {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.table3 {
|
.table3 {
|
||||||
border: 1px solid #EAF1FB;
|
border: 1px solid #EAF1FB;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 230px;
|
width: 630px;
|
||||||
height: 100px;
|
page-break-inside: avoid;
|
||||||
position: absolute;
|
page-break-before: auto;
|
||||||
right: -25;
|
page-break-after: auto;
|
||||||
}
|
|
||||||
|
|
||||||
.text-per-item-table3 {
|
|
||||||
border: 1px solid #EAF1FB;
|
|
||||||
border-top: none;
|
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
width: 260px;
|
|
||||||
/* height: 100px; */
|
|
||||||
position: absolute;
|
|
||||||
right: -25;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
td.estimate-total1 {
|
td.estimate-total1 {
|
||||||
@ -370,6 +366,32 @@
|
|||||||
border-bottom:1px solid #E8E8E8;
|
border-bottom:1px solid #E8E8E8;
|
||||||
border-top:1px solid #E8E8E8;
|
border-top:1px solid #E8E8E8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #595959;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 442px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-label {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: #040405;
|
||||||
|
width: 108px;
|
||||||
|
height: 19.87px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -427,6 +449,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@include('app.pdf.estimate.partials.table')
|
@include('app.pdf.estimate.partials.table')
|
||||||
|
@include('app.pdf.estimate.partials.notes')
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -0,0 +1,6 @@
|
|||||||
|
<div class="notes">
|
||||||
|
<div class="notes-label">
|
||||||
|
Notes
|
||||||
|
</div>
|
||||||
|
{{$estimate->notes}}
|
||||||
|
</div>
|
||||||
@ -1,21 +1,27 @@
|
|||||||
<table width="100%" class="table2" cellspacing="0" border="0">
|
<table width="100%" class="table2" cellspacing="0" border="0">
|
||||||
<tr class="main-table-header">
|
<tr class="main-table-header">
|
||||||
<td width="40%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 0px">Items</td>
|
@if($estimate->discount_per_item === 'NO')
|
||||||
<td width="17%" class="ItemTableHeader" style="text-align: right; color: #55547A; padding-right: 20px">Quantity</td>
|
<th width="80%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 0px">Items</th>
|
||||||
<td width="18%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 40px">Price</td>
|
@else
|
||||||
<td width="10%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 10px">Discount</td>
|
<th width="40%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 0px">Items</th>
|
||||||
<td width="15%" class="ItemTableHeader" style="text-align: right; color: #55547A;">Amount</td>
|
@endif
|
||||||
|
<th width="17%" class="ItemTableHeader" style="text-align: right; color: #55547A; padding-right: 20px">Quantity</th>
|
||||||
|
<th width="18%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 40px">Price</th>
|
||||||
|
@if($estimate->discount_per_item === 'YES')
|
||||||
|
<th width="10%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 10px">Discount</th>
|
||||||
|
@endif
|
||||||
|
<th width="15%" class="ItemTableHeader" style="text-align: right; color: #55547A;">Amount</th>
|
||||||
</tr>
|
</tr>
|
||||||
@foreach ($estimate->items as $item)
|
@foreach ($estimate->items as $item)
|
||||||
<tr class="item-details">
|
<tr class="item-details">
|
||||||
<td width="40%" class="inv-item items" style="text-align: left; color: #040405;padding-left: 0px">
|
<td class="inv-item items" style="text-align: left; color: #040405;padding-left: 0px">
|
||||||
<span>{{ $item->name }}</span><br>
|
<span>{{ $item->name }}</span><br>
|
||||||
<span style="text-align: left; color: #595959; font-size: 9px; font-weight:300; line-height: 12px;">{{ $item->description }}</span>
|
<span style="text-align: left; color: #595959; font-size: 9px; font-weight:300; line-height: 12px;">{{ $item->description }}</span>
|
||||||
</td>
|
</td>
|
||||||
<td width="17%" class="inv-item items" style="text-align: right; color: #040405; padding-right: 20px">{{$item->quantity}}</td>
|
<td class="inv-item items" style="text-align: right; color: #040405; padding-right: 20px">{{$item->quantity}}</td>
|
||||||
<td width="18%" class="inv-item items" style="text-align: left; color: #040405; padding-left: 40px">{{$item->price/100}}</td>
|
<td class="inv-item items" style="text-align: left; color: #040405; padding-left: 40px">{{$item->price/100}}</td>
|
||||||
{{-- <td width="10%" class="inv-item items" style="text-align: left; color: #040405; padding-left: 10px">{{$item->discount/100}}%</td> --}}
|
@if($estimate->discount_per_item === 'YES')
|
||||||
<td width="10%" class="inv-item items" style="text-align: left; color: #040405; padding-left: 10px">
|
<td class="inv-item items" style="text-align: left; color: #040405; padding-left: 10px">
|
||||||
@if($item->discount_type === 'fixed')
|
@if($item->discount_type === 'fixed')
|
||||||
{{$item->discount_val/100}}
|
{{$item->discount_val/100}}
|
||||||
@endif
|
@endif
|
||||||
@ -23,25 +29,26 @@
|
|||||||
{{$item->discount}}%
|
{{$item->discount}}%
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td width="15%" class="inv-item items" style="text-align: right; color: #040405">{{$item->total/100}}</td>
|
@endif
|
||||||
|
<td class="inv-item items" style="text-align: right; color: #040405">{{$item->total/100}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table width="100%" cellspacing="0px" border="0" class="text-per-item-table3 @if(count($estimate->items) > 12) page-break @endif">
|
<table width="100%" style="margin-left:420px" cellspacing="0px" border="0" class="table3">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-borde" style="color: #55547A; padding-left:10px; line-height: 18px; font-size:12px;">Subtotal</td>
|
<td class="no-borde" style="color: #55547A; padding-left:10px; font-size:12px;">Subtotal</td>
|
||||||
<td class="no-border items"
|
<td class="no-border items"
|
||||||
style="padding-right:10px; text-align: right; line-height: 18px; font-size:12px; color: #040405; font-weight: 500;">{!! format_money_pdf($estimate->sub_total) !!}</td>
|
style="padding-right:10px; text-align: right; font-size:12px; color: #040405; font-weight: 500;">{!! format_money_pdf($estimate->sub_total) !!}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@if ($estimate->tax_per_item === 'YES')
|
@if ($estimate->tax_per_item === 'YES')
|
||||||
@for ($i = 0; $i < count($labels); $i++)
|
@for ($i = 0; $i < count($labels); $i++)
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; line-height: 18px; color: #55547A;">
|
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
||||||
{{$labels[$i]}}
|
{{$labels[$i]}}
|
||||||
</td>
|
</td>
|
||||||
<td class="no-border items padd8" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; line-height: 18px; color: #040405">
|
<td class="no-border items padd2" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
||||||
{!! format_money_pdf($taxes[$i]) !!}
|
{!! format_money_pdf($taxes[$i]) !!}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -49,10 +56,10 @@
|
|||||||
@else
|
@else
|
||||||
@foreach ($estimate->taxes as $tax)
|
@foreach ($estimate->taxes as $tax)
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; line-height: 18px; color: #55547A;">
|
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
||||||
{{$tax->name.' ('.$tax->percent.'%)'}}
|
{{$tax->name.' ('.$tax->percent.'%)'}}
|
||||||
</td>
|
</td>
|
||||||
<td class="no-border items padd8" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; line-height: 18px; color: #040405">
|
<td class="no-border items padd2" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
||||||
{!! format_money_pdf($tax->amount) !!}
|
{!! format_money_pdf($tax->amount) !!}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -62,27 +69,31 @@
|
|||||||
@if ($estimate->discount_per_item === 'NO')
|
@if ($estimate->discount_per_item === 'NO')
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
||||||
Discount
|
Discount ({{$estimate->discount}}%)
|
||||||
</td>
|
</td>
|
||||||
<td class="no-border items padd8" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
<td class="no-border items padd2" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
||||||
@if($estimate->discount_type === 'fixed')
|
@if($estimate->discount_type === 'fixed')
|
||||||
{!! format_money_pdf($estimate->discount_val) !!}
|
{!! format_money_pdf($estimate->discount_val) !!}
|
||||||
@endif
|
@endif
|
||||||
@if($estimate->discount_type === 'percentage')
|
@if($estimate->discount_type === 'percentage')
|
||||||
{{$estimate->discount}}% ({!! format_money_pdf($estimate->discount_val) !!})
|
{!! format_money_pdf($estimate->discount_val) !!}
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endif
|
@endif
|
||||||
|
<tr>
|
||||||
|
<td style="padding:3px 0px"></td>
|
||||||
|
<td style="padding:3px 0px"></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border total-border-left"
|
<td class="no-border total-border-left"
|
||||||
style="padding-left:10px; padding-bottom:10px; text-align:left; padding-top:20px; font-size:12px; line-height: 18px; color: #55547A;"
|
style="padding-left:10px; padding-bottom:10px; text-align:left; padding-top:20px; font-size:12px; color: #55547A;"
|
||||||
>
|
>
|
||||||
<label class="total-bottom"> Total </label>
|
<label class="total-bottom"> Total </label>
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
class="no-border total-border-right items padd8"
|
class="no-border total-border-right items padd8"
|
||||||
style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; line-height: 18px; padding-top:20px; color: #5851DB"
|
style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; padding-top:20px; color: #5851DB"
|
||||||
>
|
>
|
||||||
{!! format_money_pdf($estimate->total)!!}
|
{!! format_money_pdf($estimate->total)!!}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@ -72,6 +72,7 @@
|
|||||||
.wrapper {
|
.wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: 60px;
|
padding-top: 60px;
|
||||||
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.address {
|
.address {
|
||||||
@ -244,6 +245,8 @@
|
|||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
padding: 0px 30px 0 30px;
|
padding: 0px 30px 0 30px;
|
||||||
|
page-break-before: avoid;
|
||||||
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table2 hr {
|
.table2 hr {
|
||||||
@ -257,7 +260,7 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.main-table-header td {
|
tr.main-table-header th {
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@ -284,26 +287,36 @@
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table3 {
|
.padd2 {
|
||||||
border: 1px solid #EAF1FB;
|
padding-top: 2px;
|
||||||
border-top: none;
|
padding-bottom: 2px;
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
width: 230px;
|
|
||||||
height: 100px;
|
|
||||||
position: absolute;
|
|
||||||
right: -25;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-per-item-table3 {
|
.table3 {
|
||||||
border: 1px solid #EAF1FB;
|
/* border: 1px solid #EAF1FB; */
|
||||||
border-top: none;
|
border-top: none;
|
||||||
padding-right: 30px;
|
/* padding-right: 30px; */
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 260px;
|
width: 630px;
|
||||||
/* height: 100px; */
|
/* position: absolute;
|
||||||
position: absolute;
|
right: -25; */
|
||||||
right: -25;
|
page-break-inside: avoid;
|
||||||
|
page-break-before: auto;
|
||||||
|
page-break-after: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.total-border-left {
|
||||||
|
border: 1px solid #E8E8E8!important;
|
||||||
|
border-right: 0px !important;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding:8px !important;
|
||||||
|
}
|
||||||
|
.total-border-right {
|
||||||
|
border: 1px solid #E8E8E8!important;
|
||||||
|
border-left: 0px !important;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding:8px !important;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.inv-item {
|
.inv-item {
|
||||||
@ -323,6 +336,30 @@
|
|||||||
color:rgba(0, 0, 0, 0.85);
|
color:rgba(0, 0, 0, 0.85);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #595959;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 442px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-label {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: #040405;
|
||||||
|
width: 108px;
|
||||||
|
height: 19.87px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
@ -380,7 +417,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="clear: both;"></div>
|
<div style="clear: both;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div style="position:relative">
|
||||||
@include('app.pdf.invoice.partials.table')
|
@include('app.pdf.invoice.partials.table')
|
||||||
</div>
|
</div>
|
||||||
|
@include('app.pdf.invoice.partials.notes')
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -74,6 +74,7 @@
|
|||||||
.wrapper {
|
.wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: 110px;
|
padding-top: 110px;
|
||||||
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.address {
|
.address {
|
||||||
@ -245,6 +246,8 @@
|
|||||||
margin-top: 200px;
|
margin-top: 200px;
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
padding: 0px 30px 0 30px;
|
padding: 0px 30px 0 30px;
|
||||||
|
page-break-before: avoid;
|
||||||
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table2 hr {
|
.table2 hr {
|
||||||
@ -258,7 +261,7 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.main-table-header td {
|
tr.main-table-header th {
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@ -295,15 +298,19 @@
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.padd2 {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.table3 {
|
.table3 {
|
||||||
border: 1px solid #EAF1FB;
|
border: 1px solid #EAF1FB;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 230px;
|
width: 630px;
|
||||||
height: 100px;
|
page-break-inside: avoid;
|
||||||
position: absolute;
|
page-break-before: auto;
|
||||||
right: -25;
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-per-item-table3 {
|
.text-per-item-table3 {
|
||||||
@ -361,6 +368,32 @@
|
|||||||
margin-bottom:1px;
|
margin-bottom:1px;
|
||||||
margin-top:0;
|
margin-top:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #595959;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 442px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-label {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: #040405;
|
||||||
|
width: 108px;
|
||||||
|
height: 19.87px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -403,6 +436,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@include('app.pdf.invoice.partials.table')
|
@include('app.pdf.invoice.partials.table')
|
||||||
|
@include('app.pdf.invoice.partials.notes')
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -80,6 +80,7 @@
|
|||||||
.wrapper {
|
.wrapper {
|
||||||
display: block;
|
display: block;
|
||||||
padding-top: 110px;
|
padding-top: 110px;
|
||||||
|
padding-bottom: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.address {
|
.address {
|
||||||
@ -233,7 +234,7 @@
|
|||||||
.main-table-header {
|
.main-table-header {
|
||||||
border-bottom: 1px solid red;
|
border-bottom: 1px solid red;
|
||||||
}
|
}
|
||||||
tr.main-table-header td {
|
tr.main-table-header th {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@ -249,6 +250,8 @@
|
|||||||
margin-top: 188px;
|
margin-top: 188px;
|
||||||
border-bottom: 1px solid #EAF1FB;
|
border-bottom: 1px solid #EAF1FB;
|
||||||
padding: 0px 30px 0 30px;
|
padding: 0px 30px 0 30px;
|
||||||
|
page-break-before: avoid;
|
||||||
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table2 hr {
|
.table2 hr {
|
||||||
@ -284,15 +287,19 @@
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.padd2 {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.table3 {
|
.table3 {
|
||||||
border: 1px solid #EAF1FB;
|
border: 1px solid #EAF1FB;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
padding-right: 30px;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 230px;
|
width: 630px;
|
||||||
height: 100px;
|
page-break-inside: avoid;
|
||||||
position: absolute;
|
page-break-before: auto;
|
||||||
right: -25;
|
page-break-after: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-per-item-table3 {
|
.text-per-item-table3 {
|
||||||
@ -370,6 +377,32 @@
|
|||||||
border-bottom:1px solid #E8E8E8;
|
border-bottom:1px solid #E8E8E8;
|
||||||
border-top:1px solid #E8E8E8;
|
border-top:1px solid #E8E8E8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #595959;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 442px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes-label {
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: #040405;
|
||||||
|
width: 108px;
|
||||||
|
height: 19.87px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -427,6 +460,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@include('app.pdf.invoice.partials.table')
|
@include('app.pdf.invoice.partials.table')
|
||||||
|
@include('app.pdf.invoice.partials.notes')
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
6
resources/views/app/pdf/invoice/partials/notes.blade.php
Normal file
6
resources/views/app/pdf/invoice/partials/notes.blade.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<div class="notes">
|
||||||
|
<div class="notes-label">
|
||||||
|
Notes
|
||||||
|
</div>
|
||||||
|
{{$invoice->notes}}
|
||||||
|
</div>
|
||||||
@ -1,20 +1,27 @@
|
|||||||
<table width="100%" class="table2" cellspacing="0" border="0">
|
<table width="100%" class="table2" cellspacing="0" border="0">
|
||||||
<tr class="main-table-header">
|
<tr class="main-table-header">
|
||||||
<td width="40%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 0px">Items</td>
|
@if($invoice->discount_per_item === 'NO')
|
||||||
<td width="17%" class="ItemTableHeader" style="text-align: right; color: #55547A; padding-right: 20px">Quantity</td>
|
<th width="80%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 0px">Items</th>
|
||||||
<td width="18%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 40px">Price</td>
|
@else
|
||||||
<td width="10%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 10px">Discount</td>
|
<th width="40%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 0px">Items</th>
|
||||||
<td width="15%" class="ItemTableHeader" style="text-align: right; color: #55547A;">Amount</td>
|
@endif
|
||||||
|
<th width="17%" class="ItemTableHeader" style="text-align: right; color: #55547A; padding-right: 20px">Quantity</th>
|
||||||
|
<th width="18%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 40px">Price</th>
|
||||||
|
@if($invoice->discount_per_item === 'YES')
|
||||||
|
<th width="10%" class="ItemTableHeader" style="text-align: left; color: #55547A; padding-left: 10px">Discount</th>
|
||||||
|
@endif
|
||||||
|
<th width="15%" class="ItemTableHeader" style="text-align: right; color: #55547A;">Amount</th>
|
||||||
</tr>
|
</tr>
|
||||||
@foreach ($invoice->items as $item)
|
@foreach ($invoice->items as $item)
|
||||||
<tr class="item-details">
|
<tr class="item-details">
|
||||||
<td width="40%" class="inv-item items" style="text-align: left; color: #040405;padding-left: 0px">
|
<td class="inv-item items" style="text-align: left; color: #040405;padding-left: 0px">
|
||||||
<span>{{ $item->name }}</span><br>
|
<span>{{ $item->name }}</span><br>
|
||||||
<span style="text-align: left; color: #595959; font-size: 9px; font-weight:300; line-height: 12px;">{{ $item->description }}</span>
|
<span style="text-align: left; color: #595959; font-size: 9px; font-weight:300; line-height: 12px;">{{ $item->description }}</span>
|
||||||
</td>
|
</td>
|
||||||
<td width="17%" class="inv-item items" style="text-align: right; color: #040405; padding-right: 20px">{{$item->quantity}}</td>
|
<td class="inv-item items" style="text-align: right; color: #040405; padding-right: 20px">{{$item->quantity}}</td>
|
||||||
<td width="18%" class="inv-item items" style="text-align: left; color: #040405; padding-left: 40px">{{$item->price/100}}</td>
|
<td class="inv-item items" style="text-align: left; color: #040405; padding-left: 40px">{{$item->price/100}}</td>
|
||||||
<td width="10%" class="inv-item items" style="text-align: left; color: #040405; padding-left: 10px">
|
@if($invoice->discount_per_item === 'YES')
|
||||||
|
<td class="inv-item items" style="text-align: left; color: #040405; padding-left: 10px">
|
||||||
@if($item->discount_type === 'fixed')
|
@if($item->discount_type === 'fixed')
|
||||||
{{$item->discount_val/100}}
|
{{$item->discount_val/100}}
|
||||||
@endif
|
@endif
|
||||||
@ -22,25 +29,26 @@
|
|||||||
{{$item->discount}}%
|
{{$item->discount}}%
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td width="15%" class="inv-item items" style="text-align: right; color: #040405">{{$item->total/100}}</td>
|
@endif
|
||||||
|
<td class="inv-item items" style="text-align: right; color: #040405">{{$item->total/100}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table width="100%" cellspacing="0px" border="0" class="text-per-item-table3 @if(count($invoice->items) > 12) page-break @endif">
|
<table width="100%" cellspacing="0px" style="margin-left:420px" border="0" class="table3 @if(count($invoice->items) > 12) page-break @endif">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-borde" style="color: #55547A; padding-left:10px; line-height: 18px; font-size:12px;">Subtotal</td>
|
<td class="no-borde" style="color: #55547A; padding-left:10px; font-size:12px;">Subtotal</td>
|
||||||
<td class="no-border items"
|
<td class="no-border items"
|
||||||
style="padding-right:10px; text-align: right; line-height: 18px; font-size:12px; color: #040405; font-weight: 500;">{!! format_money_pdf($invoice->sub_total) !!}</td>
|
style="padding-right:10px; text-align: right; font-size:12px; color: #040405; font-weight: 500;">{!! format_money_pdf($invoice->sub_total) !!}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@if ($invoice->tax_per_item === 'YES')
|
@if ($invoice->tax_per_item === 'YES')
|
||||||
@for ($i = 0; $i < count($labels); $i++)
|
@for ($i = 0; $i < count($labels); $i++)
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; line-height: 18px; color: #55547A;">
|
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
||||||
{{$labels[$i]}}
|
{{$labels[$i]}}
|
||||||
</td>
|
</td>
|
||||||
<td class="no-border items padd8" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; line-height: 18px; color: #040405">
|
<td class="no-border items padd2" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
||||||
{!! format_money_pdf($taxes[$i]) !!}
|
{!! format_money_pdf($taxes[$i]) !!}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -48,10 +56,10 @@
|
|||||||
@else
|
@else
|
||||||
@foreach ($invoice->taxes as $tax)
|
@foreach ($invoice->taxes as $tax)
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; line-height: 18px; color: #55547A;">
|
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
||||||
{{$tax->name.' ('.$tax->percent.'%)'}}
|
{{$tax->name.' ('.$tax->percent.'%)'}}
|
||||||
</td>
|
</td>
|
||||||
<td class="no-border items padd8" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; line-height: 18px; color: #040405">
|
<td class="no-border items padd2" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
||||||
{!! format_money_pdf($tax->amount) !!}
|
{!! format_money_pdf($tax->amount) !!}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -61,27 +69,31 @@
|
|||||||
@if ($invoice->discount_per_item === 'NO')
|
@if ($invoice->discount_per_item === 'NO')
|
||||||
<tr>
|
<tr>
|
||||||
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
<td class="no-border" style="padding-left:10px; text-align:left; font-size:12px; color: #55547A;">
|
||||||
Discount
|
Discount ({{$invoice->discount}}%)
|
||||||
</td>
|
</td>
|
||||||
<td class="no-border items padd8" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
<td class="no-border items padd2" style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; color: #040405">
|
||||||
@if($invoice->discount_type === 'fixed')
|
@if($invoice->discount_type === 'fixed')
|
||||||
{!! format_money_pdf($invoice->discount_val) !!}
|
{!! format_money_pdf($invoice->discount_val) !!}
|
||||||
@endif
|
@endif
|
||||||
@if($invoice->discount_type === 'percentage')
|
@if($invoice->discount_type === 'percentage')
|
||||||
{{$invoice->discount}}% ({!! format_money_pdf($invoice->discount_val) !!})
|
{!! format_money_pdf($invoice->discount_val) !!}
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endif
|
@endif
|
||||||
<tr style="border: 1px solid;" >
|
<tr>
|
||||||
|
<td style="padding:3px 0px"></td>
|
||||||
|
<td style="padding:3px 0px"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="no-border total-border-left"
|
<td class="no-border total-border-left"
|
||||||
style="padding-left:10px; padding-bottom:10px; text-align:left; padding-top:20px; font-size:12px; line-height: 18px; color: #55547A;"
|
style="padding-left:10px; padding-bottom:10px; text-align:left; padding-top:20px; font-size:12px; color: #55547A;"
|
||||||
>
|
>
|
||||||
<label class="total-bottom"> Total </label>
|
<label class="total-bottom"> Total </label>
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
class="no-border total-border-right items padd8"
|
class="no-border total-border-right items padd8"
|
||||||
style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; line-height: 18px; padding-top:20px; color: #5851DB"
|
style="padding-right:10px; font-weight: 500; text-align: right; font-size:12px; padding-top:20px; color: #5851DB"
|
||||||
>
|
>
|
||||||
{!! format_money_pdf($invoice->total)!!}
|
{!! format_money_pdf($invoice->total)!!}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user