/** * Created by Pensare Software. * User: Theo Weijmer * Date: 02/03/2018 * Time: 11:43 */ dbo.invoicereportInit = function () { if (dbo.invoicereport !== undefined) { dbo.invoicereport.initModule() } else { dbo.invoicereport = { years : ko.observableArray([]), selectedYear : ko.observable(), invoiceOverview : ko.observableArray([]), forecasts : ko.observableArray([]), monthForecasts : ko.observableArray([]), monthPayments : ko.observableArray([]), months : ko.observableArray([]), monthTotals : ko.observableArray([]), monthPaymentTotals : ko.observableArray([]), validYear : ko.observable(), invoiceTab : ko.observable(), totalToInvoicingExcl : ko.observable(), totalToInvoicingIncl : ko.observable(), totalInvoicedOtherYears: ko.observable(), totalInvoicedThisYear : ko.observable(), totalPayment : ko.observable(), totalToPay : ko.observable(), invoicesTotal : ko.observable(), needInvoice : ko.observable(), forecastThisYear : ko.observable(), forecastOtherYears : ko.observable(), forecastRemaining : ko.observable(), totalProjectPayments : ko.observable(), orderType : 'projectnumber', orderDirection : false, archive : ko.observable(false), recievedInvoices : ko.observableArray([]), invoiced : ko.observableArray([]), totalInvoiced : ko.observable(), totalVat : ko.observable(), totalInclVat : ko.observable(), init: function () { var vm = dbo.invoicereport vm.selectedYear((new Date()).getFullYear()) vm.invoiceTab('invoice') vm.validYear(true) vm.months(dbo.monthArray) vm.initModule() }, initModule: function () { var vm = dbo.invoicereport vm.resetTotals() var orderDirection = vm.orderDirection ? 'ASC' : 'DESC' var archive = vm.archive() ? 'T' : 'F' dbo.invoiceDataService.getInvoiceOverview(vm.selectedYear(), vm.orderType, orderDirection, archive, function (data) { vm.invoiceOverview(data.invoiceOverview) vm.setInvoiceOverviewTotals(data.invoiceOverview) vm.forecasts(data.forecasts) vm.setForecastsTotals(data.forecasts) vm.monthForecasts.removeAll() _.each(data.monthForecasts, function (p) { vm.monthForecasts.push(new vm.Monthforecast(p)) }) _.each(vm.monthTotals(), function (p) { p.forecastamount(dbo.helpers.thousandSeparator(p.forecastamount())) }) vm.monthPayments.removeAll() _.each(data.monthPayments, function (p) { vm.monthPayments.push(new vm.Monthpayment(p)) vm.totalProjectPayments(Number(vm.totalProjectPayments()) + Number(p.totalProjectPayments.replace('.', ''))) }) vm.totalProjectPayments(dbo.helpers.thousandSeparator(vm.totalProjectPayments())) _.each(vm.monthPaymentTotals(), function (p) { p.paymentamount(dbo.helpers.thousandSeparator(p.paymentamount())) }) vm.years(data.invoicedYears) vm.invoiced.removeAll() vm.totalInvoiced(0) vm.totalVat(0) vm.totalInclVat(0) _.each(data.invoiced, function (p) { vm.invoiced.push(new vm.Invoice(p)) }) vm.totalInvoiced(dbo.helpers.thousandSeparator(vm.totalInvoiced())) vm.totalVat(dbo.helpers.thousandSeparator(vm.totalVat())) vm.totalInclVat(dbo.helpers.thousandSeparator(vm.totalInclVat())) }) }, toggleArchive: function () { var vm = dbo.invoicereport vm.archive(!vm.archive()) vm.initModule() }, sortList: function (orderType) { var vm = dbo.invoicereport vm.orderType = orderType vm.orderDirection = !vm.orderDirection vm.initModule() }, resetTotals: function () { var vm = dbo.invoicereport vm.totalToInvoicingExcl(0) vm.totalToInvoicingIncl(0) vm.totalInvoicedOtherYears(0) vm.totalInvoicedThisYear(0) vm.invoicesTotal(0) vm.totalPayment(0) vm.totalToPay(0) vm.needInvoice(Number(0)) vm.forecastThisYear(0) vm.forecastOtherYears(0) vm.forecastRemaining(0) vm.totalProjectPayments(0) vm.monthTotals.removeAll() vm.monthPaymentTotals.removeAll() for (var i = 1; i <= 12; i++) { vm.monthTotals.push({ monthID: i, forecastamount: ko.observable(0) }) vm.monthPaymentTotals.push({ monthID: i, paymentamount: ko.observable(0) }) } }, setInvoiceOverviewTotals: function (data) { var vm = dbo.invoicereport _.each(data, function (p) { vm.totalToInvoicingExcl(vm.totalToInvoicingExcl() + Number(p.totalToInvoicingExcl.replace('.', ''))) vm.totalToInvoicingIncl(vm.totalToInvoicingIncl() + Number(p.totalToInvoicingIncl.replace('.', ''))) vm.totalInvoicedOtherYears(vm.totalInvoicedOtherYears() + Number(p.totalInvoicedOtherYears.replace('.', ''))) vm.totalInvoicedThisYear(vm.totalInvoicedThisYear() + Number(p.totalInvoicedThisYear.replace('.', ''))) vm.invoicesTotal(vm.invoicesTotal() + Number(p.invoicesTotal.replace('.', ''))) vm.totalPayment(vm.totalPayment() + Number(p.projectPayment.replace('.', ''))) vm.totalToPay(vm.totalToPay() + Number(p.invoiceToPay.replace('.', ''))) vm.needInvoice(Number(vm.needInvoice()) + Number(p.needInvoice.replace('.', ''))) }) vm.totalToInvoicingExcl(dbo.helpers.thousandSeparator(vm.totalToInvoicingExcl())) vm.totalToInvoicingIncl(dbo.helpers.thousandSeparator(vm.totalToInvoicingIncl())) vm.totalInvoicedOtherYears(dbo.helpers.thousandSeparator(vm.totalInvoicedOtherYears())) vm.totalInvoicedThisYear(dbo.helpers.thousandSeparator(vm.totalInvoicedThisYear())) vm.invoicesTotal(dbo.helpers.thousandSeparator(vm.invoicesTotal())) vm.totalPayment(dbo.helpers.thousandSeparator(vm.totalPayment())) vm.totalToPay(dbo.helpers.thousandSeparator(vm.totalToPay())) vm.needInvoice(dbo.helpers.thousandSeparator(vm.needInvoice())) }, setForecastsTotals: function (data) { var vm = dbo.invoicereport _.each(data, function (p) { vm.forecastThisYear(vm.forecastThisYear() + Number(p.forecastThisYear.replace('.', ''))) vm.forecastOtherYears(vm.forecastOtherYears() + Number(p.forecastOtherYears.replace('.', ''))) vm.forecastRemaining(vm.forecastRemaining() + Number(p.forecastRemaining.replace('.', ''))) }) vm.forecastThisYear(dbo.helpers.thousandSeparator(vm.forecastThisYear())) vm.forecastOtherYears(dbo.helpers.thousandSeparator(vm.forecastOtherYears())) vm.forecastRemaining(dbo.helpers.thousandSeparator(vm.forecastRemaining())) }, setForecastMonthsTotals: function (data) { console.log(data) var vm = dbo.invoicereport _.each(data, function (p) { _.each(p.forecastMonths(), function (q) { vm.forecastMonths(vm.forecastMonths() + q) }) }) }, checkYear: function () { var vm = dbo.invoicereport if (!Number.isInteger(Number(vm.selectedYear()))) return vm.validYear(false) if (Number(vm.selectedYear()) > 2100) return vm.validYear(false) if (Number(vm.selectedYear()) < 2000) return vm.validYear(false) vm.validYear(true) vm.initModule() }, setActivetab: function (page) { var vm = dbo.invoicereport vm.invoiceTab(page) }, Monthforecast: function (data) { var vm = dbo.invoicereport var self = this self.projectnumber = data.projectnumber self.projectname = data.projectname self.customer = data.customer self.needInvoice = data.needInvoice self.forecastOtherYears = data.forecastOtherYears self.forecastRemaining = data.forecastRemaining self.forecastMonths = ko.observableArray([]) _.each(data.forecastMonths, function (p, i) { self.forecastMonths.push(new vm.ForecastMonth(p)) _.each(vm.monthTotals(), function (q) { if (q.monthID == (i + 1)) q.forecastamount(Math.round(Number(q.forecastamount())) + Math.round(Number(p.forecastamount))) }) }) }, ForecastMonth: function (data) { this.forecastamount = dbo.helpers.thousandSeparator(Math.round(data.forecastamount)) }, Monthpayment: function (data) { var vm = dbo.invoicereport var self = this self.projectnumber = data.projectnumber self.projectname = data.projectname self.customer = data.customer self.totalProjectPayments = data.totalProjectPayments self.paymentMonths = ko.observableArray([]) _.each(data.monthPayments, function (p, i) { self.paymentMonths.push(new vm.PaymentMonth(p)) _.each(vm.monthPaymentTotals(), function (q) { if (q.monthID == i) q.paymentamount(Math.round(Number(q.paymentamount())) + Math.round(Number(p.paymentamount))) }) }) }, PaymentMonth: function (data) { this.paymentamount = dbo.helpers.thousandSeparator(Math.round(data.paymentamount)) }, Invoice: function (data) { var vm = dbo.invoicereport var vat = Math.round((data.invoiceamount * 21) / 100) var inclVat = vat + Number(data.invoiceamount) this.invoiceamount = dbo.helpers.thousandSeparator(data.invoiceamount) this.vat = dbo.helpers.thousandSeparator(vat) this.inclVat = dbo.helpers.thousandSeparator(inclVat) this.projectnumber = data.projectnumber this.project = data.projectnumber + ' ' + data.projectname this.invoicedate = data.invoicedate this.name = data.name this.invoicenumber = ko.observable(data.invoicenumber) vm.totalInvoiced(Number(vm.totalInvoiced()) + Number(data.invoiceamount)) vm.totalVat(Number(vm.totalVat()) + Number(vat)) vm.totalInclVat(Number(vm.totalInclVat()) + Number(inclVat)) }, createSpreadsheet: function () { var vm = dbo.invoicereport var orderDirection = vm.orderDirection ? 'ASC' : 'DESC' var archive = vm.archive() ? 'T' : 'F' var url = 'index.php/reports/reportsController/createInvoicesSpreadsheet/' + vm.selectedYear() + '/' + vm.orderType + '/' + orderDirection + '/' + archive window.open(url, '_blank') } } dbo.invoicereport.init() ko.applyBindings( dbo.invoicereport, document.getElementById('INVOICEREPORT')) } }