diff --git a/src/app/core/components/navigation/navigation.model.ts b/src/app/core/components/navigation/navigation.model.ts
index 9128bea2..d34ed629 100644
--- a/src/app/core/components/navigation/navigation.model.ts
+++ b/src/app/core/components/navigation/navigation.model.ts
@@ -139,12 +139,12 @@ export class FuseNavigation
{
'title': 'Modern',
'type' : 'nav-item',
- 'url' : '/pages/invoice/modern'
+ 'url' : '/pages/invoices/modern'
},
{
- 'title': 'Classic',
+ 'title': 'Compact',
'type' : 'nav-item',
- 'url' : '/pages/invoice/classic'
+ 'url' : '/pages/invoices/compact'
}
]
},
@@ -327,6 +327,11 @@ export class FuseNavigation
'type' : 'nav-item',
'url' : '/ui/page-layouts/simple/right-sidenav-2'
},
+ {
+ 'title': 'Right Sidenav 3',
+ 'type' : 'nav-item',
+ 'url' : '/ui/page-layouts/simple/right-sidenav-3'
+ },
{
'title': 'Tabbed',
'type' : 'nav-item',
diff --git a/src/app/core/scss/partials/_helpers.scss b/src/app/core/scss/partials/_helpers.scss
index 50b87164..da366495 100644
--- a/src/app/core/scss/partials/_helpers.scss
+++ b/src/app/core/scss/partials/_helpers.scss
@@ -37,6 +37,26 @@
.#{$abbrev}-#{$size} {
#{$prop}: $length !important;
}
+ }
+
+ @for $index from 0 through 64 {
+ $size: $index * 4;
+ $length: #{$size}px;
+
+ .#{$abbrev}x-#{$size} {
+ #{$prop}-right: $length !important;
+ #{$prop}-left: $length !important;
+ }
+
+ .#{$abbrev}y-#{$size} {
+ #{$prop}-top: $length !important;
+ #{$prop}-bottom: $length !important;
+ }
+ }
+
+ @for $index from 0 through 64 {
+ $size: $index * 4;
+ $length: #{$size}px;
.#{$abbrev}t-#{$size} {
#{$prop}-top: $length !important;
@@ -53,16 +73,6 @@
.#{$abbrev}l-#{$size} {
#{$prop}-left: $length !important;
}
-
- .#{$abbrev}x-#{$size} {
- #{$prop}-right: $length !important;
- #{$prop}-left: $length !important;
- }
-
- .#{$abbrev}y-#{$size} {
- #{$prop}-top: $length !important;
- #{$prop}-bottom: $length !important;
- }
}
}
diff --git a/src/app/core/scss/partials/_page-layouts.scss b/src/app/core/scss/partials/_page-layouts.scss
index d59da5b5..71a01ca3 100644
--- a/src/app/core/scss/partials/_page-layouts.scss
+++ b/src/app/core/scss/partials/_page-layouts.scss
@@ -1,26 +1,21 @@
// Page Layouts
-$header-height: 200px;
-$header-height-sm: 160px;
+$carded-header-height: 200px !default;
+$carded-header-height-sm: 160px !default;
+$carded-toolbar-height: 64px !default;
-$card-toolbar-height: 64px;
-$card-header-height: $header-height - $card-toolbar-height;
-$card-header-height-sm: $header-height-sm - $card-toolbar-height;
+$header-height: 120px !default;
+$header-height-sm: 100px !default;
+
+// Calculate toolbarless header height
+$carded-header-height-without-toolbar: $carded-header-height - $carded-toolbar-height;
+$carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-toolbar-height;
.page-layout {
position: relative;
overflow: hidden;
- // Top bg
- .top-bg {
- position: absolute;
- z-index: 1;
- top: 0;
- right: 0;
- left: 0;
- height: $header-height;
- }
-
// Carded layout
+
&.carded {
display: flex;
flex-direction: row;
@@ -29,6 +24,20 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
min-width: 100%;
min-height: 100%;
+ // Top bg
+ .top-bg {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: $carded-header-height;
+
+ @include media-breakpoint('sm') {
+ height: $carded-header-height-sm;
+ }
+ }
+
// Fullwidth
&.fullwidth {
@@ -58,34 +67,40 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
margin-right: 32px;
.header {
- height: $card-header-height;
- min-height: $card-header-height;
- max-height: $card-header-height;
+ height: $carded-header-height-without-toolbar;
+ min-height: $carded-header-height-without-toolbar;
+ max-height: $carded-header-height-without-toolbar;
+
+ @include media-breakpoint('sm') {
+ height: $carded-header-height-without-toolbar-sm;
+ min-height: $carded-header-height-without-toolbar-sm;
+ max-height: $carded-header-height-without-toolbar-sm;
+ }
}
.content-card {
display: flex;
flex-direction: column;
flex: 1;
- background: mat-color($background, background);
overflow: hidden;
+ background: mat-color($background, background);
@include mat-elevation(7);
.toolbar {
display: flex;
justify-content: flex-start;
align-items: center;
- height: $card-toolbar-height;
- min-height: $card-toolbar-height;
- max-height: $card-toolbar-height;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ height: $carded-toolbar-height;
+ min-height: $carded-toolbar-height;
+ max-height: $carded-toolbar-height;
}
.content {
display: flex;
flex: 1;
- background: mat-color($background, background);
overflow: auto;
+ background: mat-color($background, background);
}
}
}
@@ -130,9 +145,9 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
}
.header {
- height: $header-height;
- min-height: $header-height;
- max-height: $header-height;
+ height: $carded-header-height;
+ min-height: $carded-header-height;
+ max-height: $carded-header-height;
}
.content {
@@ -158,17 +173,17 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
.header {
display: flex;
- height: $card-header-height;
- min-height: $card-header-height;
- max-height: $card-header-height;
+ height: $carded-header-height-without-toolbar;
+ min-height: $carded-header-height-without-toolbar;
+ max-height: $carded-header-height-without-toolbar;
}
.content-card {
display: flex;
flex-direction: column;
flex: 1;
- background: mat-color($background, background);
overflow: hidden;
+ background: mat-color($background, background);
@include mat-elevation(7);
.toolbar {
@@ -176,10 +191,10 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
justify-content: flex-start;
align-items: center;
flex: 1;
- height: $card-toolbar-height;
- min-height: $card-toolbar-height;
- max-height: $card-toolbar-height;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ height: $carded-toolbar-height;
+ min-height: $carded-toolbar-height;
+ max-height: $carded-toolbar-height;
.sidenav-toggle {
margin: 0 8px 0 0 !important;
@@ -249,6 +264,16 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
// Simple layout
&.simple {
+ // Top bg
+ .top-bg {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: $header-height;
+ }
+
// Fullwidth
&.fullwidth,
&.inner-sidenav {
@@ -279,6 +304,33 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
}
}
+ // Inner Sidenav
+ &.inner-sidenav {
+
+ > md-sidenav-container {
+
+ .sidenav {
+
+ &.md-is-locked-open {
+ height: auto;
+ }
+ }
+
+ .mat-sidenav-content {
+ display: flex;
+ height: auto;
+
+ .center {
+ @include mat-elevation(0);
+
+ .content {
+ @include mat-elevation(4);
+ }
+ }
+ }
+ }
+ }
+
> md-sidenav-container {
display: flex;
background: none;
@@ -309,6 +361,7 @@ $card-header-height-sm: $header-height-sm - $card-toolbar-height;
}
.mat-sidenav-content {
+ display: flex;
flex: 1;
overflow: visible;
diff --git a/src/app/fuse-fake-db/fuse-fake-db.service.ts b/src/app/fuse-fake-db/fuse-fake-db.service.ts
index 6e14f060..090bcd0f 100644
--- a/src/app/fuse-fake-db/fuse-fake-db.service.ts
+++ b/src/app/fuse-fake-db/fuse-fake-db.service.ts
@@ -6,6 +6,7 @@ import { CalendarFakeDb } from './calendar';
import { TodoFakeDb } from './todo';
import { ProfileFakeDb } from './profile';
import { ContactsFakeDb } from './contacts';
+import { InvoiceFakeDb } from './invoice';
import { FileManagerFakeDb } from './file-manager';
export class FuseFakeDbService implements InMemoryDbService
@@ -28,6 +29,7 @@ export class FuseFakeDbService implements InMemoryDbService
'profile-photos-videos': ProfileFakeDb.photosVideos,
'profile-about' : ProfileFakeDb.about,
'contacts' : ContactsFakeDb.contacts,
+ 'invoice' : InvoiceFakeDb.invoice,
'file-manager' : FileManagerFakeDb.files
};
}
diff --git a/src/app/fuse-fake-db/invoice.ts b/src/app/fuse-fake-db/invoice.ts
new file mode 100644
index 00000000..761fd6f4
--- /dev/null
+++ b/src/app/fuse-fake-db/invoice.ts
@@ -0,0 +1,59 @@
+export class InvoiceFakeDb
+{
+ public static invoice = {
+ 'from' : {
+ 'title' : 'Fuse Inc.',
+ 'address': '2810 Country Club Road Cranford, NJ 07016',
+ 'phone' : '+66 123 455 87',
+ 'email' : 'hello@fuseinc.com',
+ 'website': 'www.fuseinc.com'
+ },
+ 'client' : {
+ 'title' : 'John Doe',
+ 'address': '9301 Wood Street Philadelphia, PA 19111',
+ 'phone' : '+55 552 455 87',
+ 'email' : 'johndoe@mail.com'
+ },
+ 'number' : 'P9-0004',
+ 'date' : 'Jul 19, 2015',
+ 'dueDate' : 'Aug 24, 2015',
+ 'services': [
+ {
+ 'title' : 'Prototype & Design',
+ 'detail' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus accumsan, quam sed eleifend imperdiet.',
+ 'unit' : 'Hour',
+ 'unitPrice': '12.00',
+ 'quantity' : '240',
+ 'total' : '2880'
+ },
+ {
+ 'title' : 'Coding',
+ 'detail' : 'Vestibulum ligula sem, rutrum et libero id, porta vehicula metus. Cras dapibus neque sit amet laoreet vestibulum.',
+ 'unit' : 'Hour',
+ 'unitPrice': '10.50',
+ 'quantity' : '350',
+ 'total' : '3675'
+ },
+ {
+ 'title' : 'Testing',
+ 'detail' : 'Pellentesque luctus efficitur neque in finibus. Integer ut nunc in augue maximus porttitor id id nulla. In vitae erat.',
+ 'unit' : 'Hour',
+ 'unitPrice': '4.00',
+ 'quantity' : '50',
+ 'total' : '200'
+ },
+ {
+ 'title' : 'Documentation & Training',
+ 'detail' : 'Pellentesque luctus efficitur neque in finibus. Integer ut nunc in augue maximus porttitor id id nulla. In vitae erat.',
+ 'unit' : 'Hour',
+ 'unitPrice': '6.50',
+ 'quantity' : '260',
+ 'total' : '1690'
+ }
+ ],
+ 'subtotal': '8445',
+ 'tax' : '675.60',
+ 'discount': '120.60',
+ 'total' : '9000'
+ };
+}
diff --git a/src/app/main/pages/invoices/compact/compact.component.html b/src/app/main/pages/invoices/compact/compact.component.html
new file mode 100644
index 00000000..c4279c8b
--- /dev/null
+++ b/src/app/main/pages/invoices/compact/compact.component.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SERVICE |
+ UNIT |
+ UNIT PRICE |
+ QUANTITY |
+ TOTAL |
+
+
+
+
+
+
+ {{service.title}}
+
+ |
+
+ {{service.unit}}
+ |
+
+ {{service.unitPrice | currency:'USD':true}}
+ |
+
+ {{service.quantity}}
+ |
+
+ {{service.total | currency:'USD':true}}
+ |
+
+
+
+
+
+ {{service.title}}
+
+ |
+
+ {{service.unit}}
+ |
+
+ {{service.unitPrice | currency:'USD':true}}
+ |
+
+ {{service.quantity}}
+ |
+
+ {{service.total | currency:'USD':true}}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/main/pages/invoices/compact/compact.component.scss b/src/app/main/pages/invoices/compact/compact.component.scss
new file mode 100644
index 00000000..e3743eb4
--- /dev/null
+++ b/src/app/main/pages/invoices/compact/compact.component.scss
@@ -0,0 +1,358 @@
+@import "src/app/core/scss/fuse";
+
+:host {
+
+ #invoice {
+
+ &.compact {
+ padding: 0;
+ overflow: auto;
+
+ .invoice-container {
+ padding: 64px;
+
+ .card {
+ width: 1020px;
+ min-width: 1020px;
+ max-width: 1020px;
+ padding: 64px 88px;
+ overflow: hidden;
+ background: #FFFFFF;
+ @include mat-elevation(7);
+
+ .header {
+
+ .invoice-date {
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.54);
+ margin-bottom: 32px;
+ }
+
+ .client {
+
+ .invoice-number {
+ font-size: 18px;
+ padding-bottom: 2px;
+
+ .title {
+ color: rgba(0, 0, 0, 0.54);
+ }
+
+ .number {
+ padding-left: 6px;
+ }
+ }
+
+ .due-date {
+ font-size: 18px;
+ padding-bottom: 16px;
+
+ .title {
+ color: rgba(0, 0, 0, 0.54);
+ }
+
+ .date {
+ padding-left: 6px;
+ }
+ }
+
+ .info {
+ color: rgba(0, 0, 0, 0.54);
+ line-height: 22px;
+ }
+ }
+
+ .issuer {
+ margin-right: -88px;
+ padding-right: 66px;
+
+ .logo {
+ width: 96px;
+ height: 96px;
+ font-size: 72px;
+ border-right: 1px solid rgba(255, 255, 255, 0.7);
+ }
+
+ .info {
+ padding: 16px;
+ }
+ }
+ }
+
+ .content {
+
+ .invoice-table {
+ margin-top: 64px;
+ font-size: 15px;
+
+ thead {
+
+ tr {
+
+ th {
+
+ &:first-child {
+ padding-left: 8px;
+ }
+
+ &:last-child {
+ padding-right: 8px;
+ }
+ }
+ }
+ }
+
+ tbody {
+
+ tr {
+
+ td {
+
+ &:first-child {
+ padding-left: 8px;
+ }
+
+ &:last-child {
+ padding-right: 8px;
+ }
+ }
+ }
+ }
+
+ .title {
+ font-size: 16px;
+ }
+
+ .detail {
+ margin-top: 8px;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.54);
+ max-width: 360px;
+ }
+ }
+
+ .invoice-table-footer {
+ margin: 32px 0 72px 0;
+
+ tr {
+
+ td {
+ text-align: right;
+ font-size: 16px;
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.54);
+ border-bottom: none;
+ padding: 4px 8px;
+
+ &:first-child {
+ text-align: left;
+ }
+ }
+
+ &.discount {
+
+ td {
+ padding-bottom: 32px;
+ }
+ }
+
+ &.total {
+
+ td {
+ padding: 24px 8px;
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ font-size: 35px;
+ font-weight: 300;
+ color: rgba(0, 0, 0, 1);
+ }
+ }
+ }
+ }
+ }
+
+ .footer {
+
+ .note {
+ font-size: 15px;
+ font-weight: 500;
+ margin-bottom: 24px;
+ }
+
+ // IE10 fix
+ .logo, .small-note {
+ -ms-flex: 0 1 auto;
+ }
+
+ .logo {
+ width: 32px;
+ min-width: 32px;
+ height: 32px;
+ font-size: 17px;
+ font-weight: 500;
+ margin-right: 24px;
+ border-radius: 2px;
+ overflow: hidden;
+ }
+
+ .small-note {
+ font-size: 12px;
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.54);
+ line-height: 18px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* PRINT STYLES */
+ @media print {
+
+ /* Invoice Specific Styles */
+ #invoice {
+
+ &.compact {
+
+ .invoice-container {
+ padding: 0;
+
+ .card {
+ width: 100%;
+ min-width: 0;
+ background: none;
+ padding: 0;
+ box-shadow: none;
+
+ .header {
+
+ .invoice-date {
+ margin-bottom: 16pt;
+ }
+
+ .issuer {
+ padding-right: 0;
+ margin-right: 0;
+ }
+ }
+
+ .content {
+
+ .invoice-table {
+ margin-top: 16pt;
+
+ thead {
+
+ tr {
+
+ th {
+ font-size: 10pt;
+ max-width: 60pt;
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+
+ tbody {
+
+ tr {
+
+ td {
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+
+ .title {
+ font-size: 10pt;
+ }
+
+ .detail {
+ margin-top: 4pt;
+ font-size: 9pt;
+ max-width: none;
+ }
+ }
+
+ .invoice-table-footer {
+ margin: 16pt 0;
+
+ tr {
+
+ td {
+ font-size: 13pt;
+ padding: 4pt 4pt;
+
+ &:first-child {
+ text-align: left;
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+
+ &.discount {
+
+ td {
+ padding-bottom: 16pt;
+ }
+ }
+
+ &.total {
+
+ td {
+ padding: 16pt 4pt 0 4pt;
+ font-size: 16pt;
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .footer {
+
+ .note {
+ font-size: 10pt;
+ margin-bottom: 8pt;
+ }
+
+ .logo {
+ font-size: 14pt;
+ margin-right: 8pt;
+ }
+
+ .small-note {
+ font-size: 8pt;
+ line-height: normal;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/main/pages/invoices/compact/compact.component.ts b/src/app/main/pages/invoices/compact/compact.component.ts
new file mode 100644
index 00000000..fd1b04cc
--- /dev/null
+++ b/src/app/main/pages/invoices/compact/compact.component.ts
@@ -0,0 +1,21 @@
+import { Component } from '@angular/core';
+import { InvoiceService } from '../invoice.service';
+
+@Component({
+ selector : 'fuse-invoice-compact',
+ templateUrl: './compact.component.html',
+ styleUrls : ['./compact.component.scss']
+})
+export class InvoiceCompactComponent
+{
+ invoice: any;
+
+ constructor(private invoiceService: InvoiceService)
+ {
+ this.invoiceService.invoiceOnChanged
+ .subscribe((invoice) => {
+ this.invoice = invoice;
+ });
+ }
+
+}
diff --git a/src/app/main/pages/invoices/invoice.service.ts b/src/app/main/pages/invoices/invoice.service.ts
new file mode 100644
index 00000000..b9576806
--- /dev/null
+++ b/src/app/main/pages/invoices/invoice.service.ts
@@ -0,0 +1,53 @@
+import { Injectable } from '@angular/core';
+import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
+import { Observable } from 'rxjs/Observable';
+import { Http } from '@angular/http';
+import { BehaviorSubject } from 'rxjs/BehaviorSubject';
+
+@Injectable()
+export class InvoiceService implements Resolve
+{
+ invoice: any;
+
+ invoiceOnChanged: BehaviorSubject = new BehaviorSubject({});
+
+ constructor(private http: Http)
+ {
+ }
+
+ /**
+ * Resolve
+ * @param {ActivatedRouteSnapshot} route
+ * @param {RouterStateSnapshot} state
+ * @returns {Observable | Promise | any}
+ */
+ resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | any
+ {
+ return new Promise((resolve, reject) => {
+ Promise.all([
+ this.getInvoice()
+ ]).then(
+ () => {
+ resolve();
+ },
+ reject
+ );
+ });
+ }
+
+ /**
+ * Get invoice
+ */
+ getInvoice(): Promise
+ {
+ return new Promise((resolve, reject) => {
+
+ this.http.get('api/invoice')
+ .subscribe(timeline => {
+ this.invoice = timeline.json().data;
+ this.invoiceOnChanged.next(this.invoice);
+ resolve(this.invoice);
+ }, reject);
+ });
+ }
+}
diff --git a/src/app/main/pages/invoices/modern/modern.component.html b/src/app/main/pages/invoices/modern/modern.component.html
new file mode 100644
index 00000000..1ed1c845
--- /dev/null
+++ b/src/app/main/pages/invoices/modern/modern.component.html
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SERVICE |
+ UNIT |
+ UNIT PRICE |
+ QUANTITY |
+ TOTAL |
+
+
+
+
+
+ {{service.title}}
+ {{service.detail}}
+ |
+
+ {{service.unit}}
+ |
+
+ {{service.unitPrice | currency:'USD':true}}
+ |
+
+ {{service.quantity}}
+ |
+
+ {{service.total | currency:'USD':true}}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/main/pages/invoices/modern/modern.component.scss b/src/app/main/pages/invoices/modern/modern.component.scss
new file mode 100644
index 00000000..2d8c84b6
--- /dev/null
+++ b/src/app/main/pages/invoices/modern/modern.component.scss
@@ -0,0 +1,359 @@
+@import "src/app/core/scss/fuse";
+
+:host {
+
+ #invoice {
+
+ &.modern {
+ padding: 0;
+ overflow: auto;
+
+ .invoice-container {
+ padding: 64px;
+
+ .card {
+ width: 1020px;
+ min-width: 1020px;
+ max-width: 1020px;
+ padding: 88px;
+ overflow: hidden;
+ background: #FFFFFF;
+ @include mat-elevation(7);
+
+ .header {
+
+ .ids {
+ line-height: 22px;
+ color: rgba(0, 0, 0, 0.54);
+
+ .detail {
+ width: 160px;
+ }
+
+ .seller {
+ margin-bottom: 80px;
+
+ .logo {
+ width: 156px;
+ height: 156px;
+ font-size: 115px;
+ }
+ }
+
+ .client {
+
+ .label {
+ width: 156px;
+ font-size: 24px;
+ font-weight: 300;
+ }
+ }
+
+ .divider {
+ width: 1px;
+ margin: 0 48px;
+ background-color: rgba(0, 0, 0, 0.12);
+ height: 144px;
+ }
+ }
+
+ .summary {
+ font-size: 15px;
+
+ .label {
+ color: rgba(0, 0, 0, 0.54);
+ text-align: right;
+ padding-right: 16px;
+ }
+
+ .value {
+ color: rgba(0, 0, 0, 1);
+ }
+
+ .code {
+ font-size: 35px;
+ font-weight: 300;
+
+ td {
+ padding-bottom: 32px;
+ }
+ }
+ }
+ }
+
+ .content {
+
+ .invoice-table {
+ margin-top: 96px;
+ font-size: 15px;
+
+ .title {
+ font-size: 17px;
+ }
+
+ .detail {
+ margin-top: 8px;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.54);
+ max-width: 360px;
+ }
+ }
+
+ .invoice-table-footer {
+ margin: 32px 0 96px 0;
+
+ tr {
+
+ td {
+ text-align: right;
+ font-size: 17px;
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.54);
+ border-bottom: none;
+ padding: 8px 8px;
+
+ &:first-child {
+ text-align: left;
+ }
+ }
+
+ &.discount {
+
+ td {
+ padding-bottom: 32px;
+ }
+ }
+
+ &.total {
+
+ td {
+ padding: 32px 8px;
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+ font-size: 35px;
+ font-weight: 300;
+ color: rgba(0, 0, 0, 1);
+ }
+ }
+ }
+ }
+ }
+
+ .footer {
+
+ .note {
+ font-size: 15px;
+ font-weight: 500;
+ margin-bottom: 24px;
+ }
+
+ // IE10 fix
+ .logo, .small-note {
+ -ms-flex: 0 1 auto;
+ }
+
+ .logo {
+ width: 32px;
+ min-width: 32px;
+ height: 32px;
+ font-size: 17px;
+ font-weight: 500;
+ margin-right: 24px;
+ border-radius: 2px;
+ overflow: hidden;
+ }
+
+ .small-note {
+ font-size: 12px;
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.54);
+ line-height: 18px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* PRINT STYLES */
+ @media print {
+
+ /* Invoice Specific Styles */
+ #invoice {
+
+ &.modern {
+
+ .invoice-container {
+ padding: 0;
+
+ .card {
+ width: 100%;
+ min-width: 0;
+ background: none;
+ padding: 0;
+ box-shadow: none;
+
+ .header {
+
+ .ids {
+
+ .detail {
+ width: 120pt;
+ }
+
+ .seller {
+ margin-bottom: 8pt;
+
+ .logo {
+ width: 60pt;
+ height: 60pt;
+ font-size: 40pt;
+ }
+ }
+
+ .client {
+
+ .label {
+ width: 60pt;
+ font-size: 16pt;
+ }
+ }
+
+ .divider {
+ margin: 0 12pt;
+ height: 100pt;
+ }
+ }
+
+ .summary {
+ font-size: 10pt;
+
+ .code {
+ font-size: 18pt;
+
+ td {
+ padding-bottom: 10pt;
+ }
+ }
+ }
+ }
+
+ .content {
+
+ .invoice-table {
+ margin-top: 16pt;
+
+ thead {
+
+ tr {
+
+ th {
+ font-size: 10pt;
+ max-width: 60pt;
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+
+ tbody {
+
+ tr {
+
+ td {
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+
+ .title {
+ font-size: 10pt;
+ }
+
+ .detail {
+ margin-top: 4pt;
+ font-size: 9pt;
+ max-width: none;
+ }
+ }
+
+ .invoice-table-footer {
+ margin: 16pt 0;
+
+ tr {
+
+ td {
+ font-size: 13pt;
+ padding: 4pt 4pt;
+
+ &:first-child {
+ text-align: left;
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+
+ &.discount {
+
+ td {
+ padding-bottom: 16pt;
+ }
+ }
+
+ &.total {
+
+ td {
+ padding: 16pt 4pt 0 4pt;
+ font-size: 16pt;
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .footer {
+
+ .note {
+ font-size: 10pt;
+ margin-bottom: 8pt;
+ }
+
+ .logo {
+ font-size: 14pt;
+ margin-right: 8pt;
+ }
+
+ .small-note {
+ font-size: 8pt;
+ line-height: normal;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/main/pages/invoices/modern/modern.component.ts b/src/app/main/pages/invoices/modern/modern.component.ts
new file mode 100644
index 00000000..efba28b8
--- /dev/null
+++ b/src/app/main/pages/invoices/modern/modern.component.ts
@@ -0,0 +1,21 @@
+import { Component } from '@angular/core';
+import { InvoiceService } from '../invoice.service';
+
+@Component({
+ selector : 'fuse-invoice-modern',
+ templateUrl: './modern.component.html',
+ styleUrls : ['./modern.component.scss']
+})
+export class InvoiceModernComponent
+{
+ invoice: any;
+
+ constructor(private invoiceService: InvoiceService)
+ {
+ this.invoiceService.invoiceOnChanged
+ .subscribe((invoice) => {
+ this.invoice = invoice;
+ });
+ }
+
+}
diff --git a/src/app/main/pages/pages.module.ts b/src/app/main/pages/pages.module.ts
index 92070061..ea1472c8 100644
--- a/src/app/main/pages/pages.module.ts
+++ b/src/app/main/pages/pages.module.ts
@@ -12,10 +12,13 @@ import { LockComponent } from './authentication/lock/lock.component';
import { ComingSoonComponent } from './coming-soon/coming-soon.component';
import { Error404Component } from './errors/404/error-404.component';
import { Error500Component } from './errors/500/error-500.component';
+import { InvoiceModernComponent } from './invoices/modern/modern.component';
import { MaintenanceComponent } from './maintenance/maintenance.component';
import { ProfileComponent } from './profile/profile.component';
import { ProfileModule } from './profile/profile.module';
import { ProfileService } from './profile/profile.service';
+import { InvoiceCompactComponent } from './invoices/compact/compact.component';
+import { InvoiceService } from './invoices/invoice.service';
const routes = [
{
@@ -58,6 +61,20 @@ const routes = [
path : 'pages/errors/error-500',
component: Error500Component
},
+ {
+ path : 'pages/invoices/compact',
+ component: InvoiceCompactComponent,
+ resolve : {
+ invoice: InvoiceService
+ }
+ },
+ {
+ path : 'pages/invoices/modern',
+ component: InvoiceModernComponent,
+ resolve : {
+ invoice: InvoiceService
+ }
+ },
{
path : 'pages/maintenance',
component: MaintenanceComponent
@@ -88,9 +105,12 @@ const routes = [
ComingSoonComponent,
Error404Component,
Error500Component,
+ InvoiceCompactComponent,
+ InvoiceModernComponent,
MaintenanceComponent
],
providers : [
+ InvoiceService,
ProfileService
]
})
diff --git a/src/app/main/ui/page-layouts/carded/fullwidth-2/fullwidth-2.component.html b/src/app/main/ui/page-layouts/carded/fullwidth-2/fullwidth-2.component.html
index 1218a10c..68212d69 100644
--- a/src/app/main/ui/page-layouts/carded/fullwidth-2/fullwidth-2.component.html
+++ b/src/app/main/ui/page-layouts/carded/fullwidth-2/fullwidth-2.component.html
@@ -8,7 +8,7 @@
-