diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index 93db77a26903..9199cb3a95ac 100755 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -498,12 +498,14 @@ class AccountController extends \BaseController { { $account = Account::findOrFail(Auth::user()->account_id); $account->name = trim(Input::get('name')); + $account->work_email = trim(Input::get('work_email')); + $account->work_phone = trim(Input::get('work_phone')); $account->address1 = trim(Input::get('address1')); $account->address2 = trim(Input::get('address2')); $account->city = trim(Input::get('city')); $account->state = trim(Input::get('state')); $account->postal_code = trim(Input::get('postal_code')); - $account->country_id = Input::get('country_id') ? Input::get('country_id') : null; + $account->country_id = Input::get('country_id') ? Input::get('country_id') : null; $account->size_id = Input::get('size_id') ? Input::get('size_id') : null; $account->industry_id = Input::get('industry_id') ? Input::get('industry_id') : null; $account->timezone_id = Input::get('timezone_id') ? Input::get('timezone_id') : null; diff --git a/app/database/migrations/2014_03_03_155556_add_phone_to_account.php b/app/database/migrations/2014_03_03_155556_add_phone_to_account.php new file mode 100644 index 000000000000..1de12fb34e3b --- /dev/null +++ b/app/database/migrations/2014_03_03_155556_add_phone_to_account.php @@ -0,0 +1,36 @@ +string('work_phone'); + $table->string('work_email'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('accounts', function($table) + { + $table->dropColumn('work_phone'); + $table->dropColumn('work_email'); + }); + } + +} \ No newline at end of file diff --git a/app/views/accounts/details.blade.php b/app/views/accounts/details.blade.php index a82dedcdf656..839e718ae54f 100755 --- a/app/views/accounts/details.blade.php +++ b/app/views/accounts/details.blade.php @@ -27,6 +27,8 @@ {{ Former::legend('Details') }} {{ Former::text('name') }} + {{ Former::text('work_email')->label('Email') }} + {{ Former::text('work_phone')->label('Phone') }} {{ Former::file('logo')->max(2, 'MB')->accept('image')->inlineHelp('Supported: JPEG, GIF and PNG. Recommnded size: 120px width, 80px height') }} @if (file_exists($account->getLogoPath())) @@ -75,7 +77,7 @@
- {{ Button::lg_primary_submit('Save')->append_with_icon('floppy-disk') }} + {{ Button::lg_success_submit('Save')->append_with_icon('floppy-disk') }}
{{ Former::close() }} diff --git a/app/views/accounts/notifications.blade.php b/app/views/accounts/notifications.blade.php index 1759187d446c..4a0e8a41be79 100755 --- a/app/views/accounts/notifications.blade.php +++ b/app/views/accounts/notifications.blade.php @@ -18,7 +18,7 @@ {{ Former::textarea('invoice_terms')->label('Set default invoice terms') }} {{ Former::textarea('email_footer')->label('Set default email signature') }} - {{ Former::actions( Button::lg_primary_submit('Save')->append_with_icon('floppy-disk') ) }} + {{ Former::actions( Button::lg_success_submit('Save')->append_with_icon('floppy-disk') ) }} {{ Former::close() }} @stop \ No newline at end of file diff --git a/app/views/accounts/payments.blade.php b/app/views/accounts/payments.blade.php index 9075f9034579..ce8a149d8507 100755 --- a/app/views/accounts/payments.blade.php +++ b/app/views/accounts/payments.blade.php @@ -45,7 +45,7 @@ @endforeach - {{ Former::actions( Button::lg_primary_submit('Save')->append_with_icon('floppy-disk') ) }} + {{ Former::actions( Button::lg_success_submit('Save')->append_with_icon('floppy-disk') ) }} {{ Former::close() }} diff --git a/app/views/clients/edit.blade.php b/app/views/clients/edit.blade.php index e59b79d8b44a..84fab15a0758 100755 --- a/app/views/clients/edit.blade.php +++ b/app/views/clients/edit.blade.php @@ -148,10 +148,8 @@ - -
- {{ Button::lg_primary_submit('Save')->append_with_icon('floppy-disk') }} + {{ Button::lg_primary_submit_success('Save')->append_with_icon('floppy-disk') }} {{ Button::lg_default_link('clients/' . ($client ? $client->public_id : ''), 'Cancel')->append_with_icon('remove-circle'); }}
diff --git a/app/views/credits/edit.blade.php b/app/views/credits/edit.blade.php index b55a2038b191..047f792dfd68 100755 --- a/app/views/credits/edit.blade.php +++ b/app/views/credits/edit.blade.php @@ -28,10 +28,9 @@ - -
- {{ Button::lg_primary_submit('Save') }}  |  - {{ link_to('credits/' . ($credit ? $credit->public_id : ''), 'Cancel') }} +
+ {{ Button::lg_primary_submit_success('Save')->append_with_icon('floppy-disk') }} + {{ Button::lg_default_link('credits/' . ($credit ? $credit->public_id : ''), 'Cancel')->append_with_icon('remove-circle'); }}
{{ Former::close() }} diff --git a/app/views/dashboard.blade.php b/app/views/dashboard.blade.php index b23c040375fc..eaa27672e9a1 100644 --- a/app/views/dashboard.blade.php +++ b/app/views/dashboard.blade.php @@ -98,8 +98,8 @@
-
-
+
+

Upcoming invoices

diff --git a/app/views/invoices/edit.blade.php b/app/views/invoices/edit.blade.php index b28396570d5c..f4ea5e0b6868 100755 --- a/app/views/invoices/edit.blade.php +++ b/app/views/invoices/edit.blade.php @@ -571,6 +571,10 @@ invoice.imageLogoWidth2 =325/2; invoice.imageLogoHeight2 = 81/2; + invoice.imageLogo3 = "{{ HTML::image_data('images/report_logo3.jpg') }}"; + invoice.imageLogoWidth3 =325/2; + invoice.imageLogoHeight3 = 81/2; + return invoice; } @@ -1393,7 +1397,7 @@ } $('.word-wrap').each(function(index, input) { - $(input).height($(input).val().split('\n').length * 22); + $(input).height($(input).val().split('\n').length * 20); }); } @@ -1464,7 +1468,7 @@ if (!model.invoice().discount()) model.invoice().discount(''); ko.applyBindings(model); - + onItemChange(); diff --git a/app/views/payments/edit.blade.php b/app/views/payments/edit.blade.php index e8f446fed65e..580e48ff3000 100755 --- a/app/views/payments/edit.blade.php +++ b/app/views/payments/edit.blade.php @@ -32,9 +32,9 @@
-
- {{ Button::lg_primary_submit_success('Save') }}  |  - {{ link_to('payments/' . ($payment ? $payment->public_id : ''), 'Cancel') }} +
+ {{ Button::lg_primary_submit_success('Save')->append_with_icon('floppy-disk') }} + {{ Button::lg_default_link('payments/' . ($payment ? $payment->public_id : ''), 'Cancel')->append_with_icon('remove-circle'); }}
{{ Former::close() }} diff --git a/public/css/style.css b/public/css/style.css index fc5937eb2a90..3a8481632091 100755 --- a/public/css/style.css +++ b/public/css/style.css @@ -53,7 +53,8 @@ margin-bottom: 0; padding-top: 10px; } textarea.form-control { -height: auto !important; +/*height: auto !important;*/ +min-height: 40px; } /*tables*/ table.dataTable { border-radius: 3px; border-collapse: collapse; @@ -73,7 +74,7 @@ th:last-child { tr {border: none;} th {border-left: 1px solid #d26b26; } .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { -vertical-align: middle; +vertical-align: top; border-top: none; border-bottom: 1px solid #dfe0e1; } @@ -448,6 +449,8 @@ background-clip: padding-box; } .panel-body {padding: 25px;} +.dashboard .panel-heading { margin: -1px; } + .dashboard .panel-body {padding: 0;} .dashboard .table-striped>tbody>tr>td, .table-striped>tbody>tr>th { background-color: #fbfbfb;} diff --git a/public/images/report_logo3.jpg b/public/images/report_logo3.jpg new file mode 100644 index 000000000000..8696d0535fa2 Binary files /dev/null and b/public/images/report_logo3.jpg differ diff --git a/public/js/script.js b/public/js/script.js index 92d5941c8e05..15f444966d4d 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -20,10 +20,10 @@ function generatePDF(invoice, checkMath) { /* Handle converting variables in the invoices (ie, MONTH+1) */ function processVariables(str) { - if (!str) return ''; - var variables = ['MONTH','QUARTER','YEAR']; - for (var i=0; i<'span6'p>>", - //"sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>", - "sPaginationType": "bootstrap", - //"bProcessing": true, - //"iDisplayLength": 50, - "bInfo": true, - "oLanguage": { - //"sLengthMenu": "_MENU_ records per page" - "sLengthMenu": "_MENU_", - "sSearch": "" - } - //"sScrollY": "500px", + "sDom": "t<'row-fluid'<'span6'i><'span6'p>>", + //"sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>", + "sPaginationType": "bootstrap", + //"bProcessing": true, + //"iDisplayLength": 50, + "bInfo": true, + "oLanguage": { + //"sLengthMenu": "_MENU_ records per page" + "sLengthMenu": "_MENU_", + "sSearch": "" + } + //"sScrollY": "500px", } ); /* Default class modification */ $.extend( $.fn.dataTableExt.oStdClasses, { - "sWrapper": "dataTables_wrapper form-inline" + "sWrapper": "dataTables_wrapper form-inline" } ); /* API method to get paging information */ $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings ) { - return { - "iStart": oSettings._iDisplayStart, - "iEnd": oSettings.fnDisplayEnd(), - "iLength": oSettings._iDisplayLength, - "iTotal": oSettings.fnRecordsTotal(), - "iFilteredTotal": oSettings.fnRecordsDisplay(), - "iPage": oSettings._iDisplayLength === -1 ? - 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ), - "iTotalPages": oSettings._iDisplayLength === -1 ? - 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength ) - }; + return { + "iStart": oSettings._iDisplayStart, + "iEnd": oSettings.fnDisplayEnd(), + "iLength": oSettings._iDisplayLength, + "iTotal": oSettings.fnRecordsTotal(), + "iFilteredTotal": oSettings.fnRecordsDisplay(), + "iPage": oSettings._iDisplayLength === -1 ? + 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ), + "iTotalPages": oSettings._iDisplayLength === -1 ? + 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength ) + }; }; /* Bootstrap style pagination control */ $.extend( $.fn.dataTableExt.oPagination, { - "bootstrap": { - "fnInit": function( oSettings, nPaging, fnDraw ) { - var oLang = oSettings.oLanguage.oPaginate; - var fnClickHandler = function ( e ) { - e.preventDefault(); - if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) { - fnDraw( oSettings ); - } - }; + "bootstrap": { + "fnInit": function( oSettings, nPaging, fnDraw ) { + var oLang = oSettings.oLanguage.oPaginate; + var fnClickHandler = function ( e ) { + e.preventDefault(); + if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) { + fnDraw( oSettings ); + } + }; - $(nPaging).addClass('pagination').append( - '
    '+ - ''+ - ''+ - '
' - ); - var els = $('a', nPaging); - $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler ); - $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler ); - }, + $(nPaging).addClass('pagination').append( + '
    '+ + ''+ + ''+ + '
' + ); + var els = $('a', nPaging); + $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler ); + $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler ); + }, - "fnUpdate": function ( oSettings, fnDraw ) { - var iListLength = 5; - var oPaging = oSettings.oInstance.fnPagingInfo(); - var an = oSettings.aanFeatures.p; - var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2); + "fnUpdate": function ( oSettings, fnDraw ) { + var iListLength = 5; + var oPaging = oSettings.oInstance.fnPagingInfo(); + var an = oSettings.aanFeatures.p; + var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2); - if ( oPaging.iTotalPages < iListLength) { - iStart = 1; - iEnd = oPaging.iTotalPages; - } - else if ( oPaging.iPage <= iHalf ) { - iStart = 1; - iEnd = iListLength; - } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) { - iStart = oPaging.iTotalPages - iListLength + 1; - iEnd = oPaging.iTotalPages; - } else { - iStart = oPaging.iPage - iHalf + 1; - iEnd = iStart + iListLength - 1; - } + if ( oPaging.iTotalPages < iListLength) { + iStart = 1; + iEnd = oPaging.iTotalPages; + } + else if ( oPaging.iPage <= iHalf ) { + iStart = 1; + iEnd = iListLength; + } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) { + iStart = oPaging.iTotalPages - iListLength + 1; + iEnd = oPaging.iTotalPages; + } else { + iStart = oPaging.iPage - iHalf + 1; + iEnd = iStart + iListLength - 1; + } - for ( i=0, ien=an.length ; i'+j+'') - .insertBefore( $('li:last', an[i])[0] ) - .bind('click', function (e) { - e.preventDefault(); - oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength; - fnDraw( oSettings ); - } ); - } + // Add the new list items and their event handlers + for ( j=iStart ; j<=iEnd ; j++ ) { + sClass = (j==oPaging.iPage+1) ? 'class="active"' : ''; + $('
  • '+j+'
  • ') + .insertBefore( $('li:last', an[i])[0] ) + .bind('click', function (e) { + e.preventDefault(); + oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength; + fnDraw( oSettings ); + } ); + } - // Add / remove disabled classes from the static elements - if ( oPaging.iPage === 0 ) { - $('li:first', an[i]).addClass('disabled'); - } else { - $('li:first', an[i]).removeClass('disabled'); - } + // Add / remove disabled classes from the static elements + if ( oPaging.iPage === 0 ) { + $('li:first', an[i]).addClass('disabled'); + } else { + $('li:first', an[i]).removeClass('disabled'); + } - if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) { - $('li:last', an[i]).addClass('disabled'); - } else { - $('li:last', an[i]).removeClass('disabled'); - } - } - } - } + if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) { + $('li:last', an[i]).addClass('disabled'); + } else { + $('li:last', an[i]).removeClass('disabled'); + } + } + } + } } ); @@ -211,47 +211,47 @@ $.extend( $.fn.dataTableExt.oPagination, { * Required TableTools 2.1+ */ if ( $.fn.DataTable.TableTools ) { - // Set the classes that TableTools uses to something suitable for Bootstrap - $.extend( true, $.fn.DataTable.TableTools.classes, { - "container": "DTTT btn-group", - "buttons": { - "normal": "btn", - "disabled": "disabled" - }, - "collection": { - "container": "DTTT_dropdown dropdown-menu", - "buttons": { - "normal": "", - "disabled": "disabled" - } - }, - "print": { - "info": "DTTT_print_info modal" - }, - "select": { - "row": "active" - } - } ); + // Set the classes that TableTools uses to something suitable for Bootstrap + $.extend( true, $.fn.DataTable.TableTools.classes, { + "container": "DTTT btn-group", + "buttons": { + "normal": "btn", + "disabled": "disabled" + }, + "collection": { + "container": "DTTT_dropdown dropdown-menu", + "buttons": { + "normal": "", + "disabled": "disabled" + } + }, + "print": { + "info": "DTTT_print_info modal" + }, + "select": { + "row": "active" + } + } ); - // Have the collection use a bootstrap compatible dropdown - $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, { - "collection": { - "container": "ul", - "button": "li", - "liner": "a" - } - } ); + // Have the collection use a bootstrap compatible dropdown + $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, { + "collection": { + "container": "ul", + "button": "li", + "liner": "a" + } + } ); } /* $(document).ready(function() { - $('#example').dataTable( { - "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>", - "sPaginationType": "bootstrap", - "oLanguage": { - "sLengthMenu": "_MENU_ records per page" - } - } ); + $('#example').dataTable( { + "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>", + "sPaginationType": "bootstrap", + "oLanguage": { + "sLengthMenu": "_MENU_ records per page" + } + } ); } ); */ @@ -278,45 +278,45 @@ $(function() { function enableHoverClick($combobox, $entityId, url) { - /* - $combobox.mouseleave(function() { - $combobox.css('text-decoration','none'); - }).on('mouseenter', function(e) { - setAsLink($combobox, $combobox.closest('.combobox-container').hasClass('combobox-selected')); - }).on('focusout mouseleave', function(e) { - setAsLink($combobox, false); - }).on('click', function() { - var clientId = $entityId.val(); - if ($(combobox).closest('.combobox-container').hasClass('combobox-selected')) { - if (parseInt(clientId) > 0) { - window.open(url + '/' + clientId, '_blank'); - } else { - $('#myModal').modal('show'); - } - }; - }); + /* + $combobox.mouseleave(function() { + $combobox.css('text-decoration','none'); + }).on('mouseenter', function(e) { + setAsLink($combobox, $combobox.closest('.combobox-container').hasClass('combobox-selected')); + }).on('focusout mouseleave', function(e) { + setAsLink($combobox, false); + }).on('click', function() { + var clientId = $entityId.val(); + if ($(combobox).closest('.combobox-container').hasClass('combobox-selected')) { + if (parseInt(clientId) > 0) { + window.open(url + '/' + clientId, '_blank'); + } else { + $('#myModal').modal('show'); + } + }; + }); */ } function setAsLink($input, enable) { - if (enable) { - $input.css('text-decoration','underline'); - $input.css('cursor','pointer'); - } else { - $input.css('text-decoration','none'); - $input.css('cursor','text'); - } + if (enable) { + $input.css('text-decoration','underline'); + $input.css('cursor','pointer'); + } else { + $input.css('text-decoration','none'); + $input.css('cursor','text'); + } } function setComboboxValue($combobox, id, name) { - $combobox.find('input').val(id); - $combobox.find('input.form-control').val(name); - if (id && name) { - $combobox.find('select').combobox('setSelected'); - $combobox.find('.combobox-container').addClass('combobox-selected'); - } else { - $combobox.find('.combobox-container').removeClass('combobox-selected'); - } + $combobox.find('input').val(id); + $combobox.find('input.form-control').val(name); + if (id && name) { + $combobox.find('select').combobox('setSelected'); + $combobox.find('.combobox-container').addClass('combobox-selected'); + } else { + $combobox.find('.combobox-container').removeClass('combobox-selected'); + } } @@ -346,24 +346,24 @@ ko.bindingHandlers.dropdown = { /* ko.utils.registerEventHandler(element, "change", function () { - console.log("change: %s", $(element).val()); - var - valueAccessor($(element).val()); + console.log("change: %s", $(element).val()); + var + valueAccessor($(element).val()); //$(element).combobox('refresh'); }); - */ + */ }, - update: function (element, valueAccessor) { - var value = ko.utils.unwrapObservable(valueAccessor()); - var id = (value && value.public_id) ? value.public_id() : (value && value.id) ? value.id() : value ? value : false; - //console.log("combo-update: %s", id); - if (id) { - $(element).val(id); - $(element).combobox('refresh'); - } else { - $(element).combobox('clearTarget'); - $(element).combobox('clearElement'); - } + update: function (element, valueAccessor) { + var value = ko.utils.unwrapObservable(valueAccessor()); + var id = (value && value.public_id) ? value.public_id() : (value && value.id) ? value.id() : value ? value : false; + //console.log("combo-update: %s", id); + if (id) { + $(element).val(id); + $(element).combobox('refresh'); + } else { + $(element).combobox('clearTarget'); + $(element).combobox('clearElement'); + } } }; @@ -373,11 +373,11 @@ ko.bindingHandlers.datePicker = { var value = ko.utils.unwrapObservable(valueAccessor()); if (value) $(element).datepicker('update', value); $(element).change(function() { - var value = valueAccessor(); + var value = valueAccessor(); value($(element).val()); }) }, - update: function (element, valueAccessor) { + update: function (element, valueAccessor) { var value = ko.utils.unwrapObservable(valueAccessor()); if (value) $(element).datepicker('update', value); } @@ -386,14 +386,14 @@ ko.bindingHandlers.datePicker = { function wordWrapText(value, width) { - if (!width) width = 200; - var doc = new jsPDF('p', 'pt'); - doc.setFont('Helvetica',''); - doc.setFontSize(10); + if (!width) width = 200; + var doc = new jsPDF('p', 'pt'); + doc.setFont('Helvetica',''); + doc.setFontSize(10); - var lines = value.split("\n"); + var lines = value.split("\n"); for (var i = 0; i < lines.length; i++) { - var numLines = doc.splitTextToSize(lines[i], width).length; + var numLines = doc.splitTextToSize(lines[i], width).length; if (numLines <= 1) continue; var j = 0; space = lines[i].length; while (j++ < lines[i].length) { @@ -406,9 +406,9 @@ function wordWrapText(value, width) var newValue = (lines.join("\n")).trim(); if (value == newValue) { - return newValue; + return newValue; } else { - return wordWrapText(newValue, width); + return wordWrapText(newValue, width); } } @@ -416,105 +416,105 @@ function wordWrapText(value, width) function getClientDisplayName(client) { - var contact = client.contacts[0]; - if (client.name) { - return client.name; - } else if (contact.first_name || contact.last_name) { - return contact.first_name + ' ' + contact.last_name; - } else { - return contact.email; - } + var contact = client.contacts[0]; + if (client.name) { + return client.name; + } else if (contact.first_name || contact.last_name) { + return contact.first_name + ' ' + contact.last_name; + } else { + return contact.email; + } } function populateInvoiceComboboxes(clientId, invoiceId) { - var clientMap = {}; - var invoiceMap = {}; - var invoicesForClientMap = {}; - var $clientSelect = $('select#client'); - - for (var i=0; i MaxGlobalY) { - tableTop = 40; - GlobalY=tableTop; + //tableTop = 40; + //GlobalY=tableTop; //var MaxLinesPerPage=70; + GlobalY=Report1AddNewPage(invoice,account,doc); + /* doc.addPage(); if (invoice.imageLogo1) { @@ -981,21 +982,21 @@ function GetReportTemplate2 (invoice,checkMath) doc.addImage(invoice.imageLogo1, 'JPEG', left, y, invoice.imageLogoWidth1, invoice.imageLogoHeight1); - } + }*/ } if ((i%2)===0){ doc.setLineWidth(0.5); - doc.setDrawColor(200,200,200); + doc.setDrawColor(230,230,230); doc.setFillColor(230,230,230); var x1 = tableLeft-tablePadding ; - var y1 = GlobalY-FontSize; + var y1 = GlobalY-FontSize-5; var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; - var h2 = doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + var h2 = doc.internal.getFontSize()*length+length*1.1+10;//+h;//+tablePadding; @@ -1035,8 +1036,20 @@ function GetReportTemplate2 (invoice,checkMath) + + + //-------------------------------Publishing Document balance------------------------------------------ +//check do we need to go to next page + MinHeight=700; + + if (GlobalY > MinHeight) { + + + GlobalY=Report1AddNewPage(invoice,account,doc); + } + @@ -1048,22 +1061,25 @@ function GetReportTemplate2 (invoice,checkMath) - GlobalY=x; + // GlobalY=x; + + GlobalY=GlobalY+25; doc.setLineWidth(0.3); - doc.setDrawColor(200,200,200); + doc.setDrawColor(251,251,251); doc.setFillColor(251,251,251); - var x1 = tableLeft-tablePadding*2 ; + var x1 = tableLeft-tablePadding*2+14 ; var y1 = GlobalY-FontSize-tablePadding; + var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; var h2 = doc.internal.getFontSize()*3+tablePadding*2; doc.rect(x1, y1, w2, h2, 'FD'); + x=y1+FontSize+tablePadding; - - Msg='Total'; + Msg='Subtotal'; var TmpMsgX = MsgRightAlign-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); doc.text(TmpMsgX, x, Msg); @@ -1081,7 +1097,7 @@ function GetReportTemplate2 (invoice,checkMath) x += doc.internal.getFontSize()*2; //doc.text(footerLeft, x, ''); - Msg='Amount Payed'; + Msg='Paid to Date'; var TmpMsgX = MsgRightAlign-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); doc.text(TmpMsgX, x, Msg); @@ -1100,7 +1116,7 @@ function GetReportTemplate2 (invoice,checkMath) doc.setFontSize(10); x += doc.internal.getFontSize()*4; //doc.text(footerLeft, x, ''); - Msg='Amount Due'; + Msg='Balance Due'; var TmpMsgX = MsgRightAlign-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); @@ -1123,7 +1139,20 @@ function GetReportTemplate2 (invoice,checkMath) } -function GetReportTemplate1 (invoice,checkMath) + + + + + + + + + + + + + +function GetReportTemplate2 (invoice,checkMath) { var doc=false; @@ -1140,7 +1169,7 @@ function GetReportTemplate1 (invoice,checkMath) var invoiceDate = invoice.invoice_date ? invoice.invoice_date : ''; var dueDate = invoice.due_date ? invoice.due_date : ''; - var paid_to_date=client.paid_to_date; + var paid_to_date = invoice.amount - invoice.balance; var headerRight = 150; var accountTop = 30; @@ -1160,7 +1189,7 @@ function GetReportTemplate1 (invoice,checkMath) //var tableTop = 240+100; //var tableRowHeight = 18; - var tablePadding = 6; + var tablePadding = 14; @@ -1553,7 +1582,6 @@ function GetReportTemplate1 (invoice,checkMath) var MaxLinesPerPage=40; - for (var i=0; i MaxGlobalY) { tableTop = 40; @@ -1615,9 +1643,9 @@ function GetReportTemplate1 (invoice,checkMath) var x1 = tableLeft-tablePadding ; - var y1 = GlobalY-FontSize; + var y1 = GlobalY-FontSize-5; var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; - var h2 = doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + var h2 = doc.internal.getFontSize()*length+length*1.1+10;//+h;//+tablePadding; doc.rect(x1, y1, w2, h2, 'FD'); } else @@ -1628,9 +1656,9 @@ function GetReportTemplate1 (invoice,checkMath) var x1 = tableLeft-tablePadding ; - var y1 = GlobalY-FontSize; + var y1 = GlobalY-FontSize-5; var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; - var h2 = doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + var h2 = doc.internal.getFontSize()*length+length*1.1+10;//+h;//+tablePadding; doc.rect(x1, y1, w2, h2, 'FD'); } @@ -1672,7 +1700,7 @@ function GetReportTemplate1 (invoice,checkMath) doc.setDrawColor(251,251,251); doc.setFillColor(251,251,251); - var x1 = tableLeft-tablePadding*2 ; + var x1 = tableLeft-tablePadding*2 +14; var y1 = GlobalY-FontSize-tablePadding; var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; var h2 = doc.internal.getFontSize()*3+tablePadding*2; @@ -1720,7 +1748,7 @@ function GetReportTemplate1 (invoice,checkMath) doc.text(TmpMsgX, x, Msg); - SetPdfColor('LightBlue',doc); + //SetPdfColor('LightBlue',doc); AmountText = formatMoney(balance , currencyId); headerLeft=headerRight+400; var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); @@ -1736,6 +1764,10 @@ function GetReportTemplate1 (invoice,checkMath) + + + + function SetPdfColor(color,doc) { @@ -1792,13 +1824,6 @@ function SetPdfColor(color,doc) } - - - -function Report1AddFooter (doc) -{ -} - function Report2AddFooter (invoice,doc) { @@ -1829,7 +1854,7 @@ function Report2AddFooter (invoice,doc) pageHeight=820; var left = 250;//headerRight ; y=pageHeight-invoice.imageLogoHeight2; - var headerRight=350; + var headerRight=370; var left = headerRight - invoice.imageLogoWidth2; doc.addImage(invoice.imageLogo2, 'JPEG', left, y, invoice.imageLogoWidth2, invoice.imageLogoHeight2); @@ -1841,3 +1866,834 @@ function Report2AddFooter (invoice,doc) } +function Report3AddFooter (invoice,account,doc) +{ + + doc.setLineWidth(0.5); + doc.setDrawColor(242,101,34); + doc.setFillColor(242,101,34); + + // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour + + + + + var x1 = 0;//tableLeft-tablePadding ; + + var y1 = 750; + + var w2 = 596; + var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + + + + doc.rect(x1, y1, w2, h2, 'FD'); + + + if (invoice.imageLogo3) + { + pageHeight=820; + // var left = 25;//250;//headerRight ; + y=pageHeight-invoice.imageLogoHeight3; + //var headerRight=370; + + //var left = headerRight - invoice.imageLogoWidth3; + doc.addImage(invoice.imageLogo3, 'JPEG', 40, y, invoice.imageLogoWidth3, invoice.imageLogoHeight3); + + + } + + + + + + + + var LineOne= account.name; + + MaxWidth=440; + var AlignLine = MaxWidth-30- (doc.getStringUnitWidth(LineOne) * doc.internal.getFontSize()); + + if (account.name) { + + y =780; + + doc.setFontSize(12); + //doc.setFontType("normal"); + doc.setFontType("bold"); + SetPdfColor('White',doc); + + + doc.text(AlignLine, y, LineOne); + + doc.setFontSize(7); + } + + +var y =780; + + var AlignLine2=AlignLine+110; + if (account.address1) { + + doc.setFontSize(12); + doc.setFontType("normal"); + SetPdfColor('White',doc); + doc.text(AlignLine2, y,account.address1); + doc.setFontSize(7); + + y=y+18; + } + + + + if (account.address2) { + + doc.setFontSize(12); + doc.setFontType("normal"); + SetPdfColor('White',doc); + doc.text(AlignLine2, y,account.address2); + doc.setFontSize(7); + + y=y+18; + } + + + + doc.setFontSize(12); + doc.setFontType("normal"); + SetPdfColor('White',doc); + + + var LineTwo= account.city+' '+(account.country ? account.country.name : ''); + + doc.text(AlignLine2, y,LineTwo); + doc.setFontSize(7); + + + + +} + + + + + + +function GetReportTemplate3 (invoice,checkMath) +{ + var doc=false; + + var GlobalY=0;//Y position of line at current page + + + + var client = invoice.client; + var account = invoice.account; + + + var currencyId = client.currency_id; + var invoiceNumber = invoice.invoice_number; + var invoiceDate = invoice.invoice_date ? invoice.invoice_date : ''; + var dueDate = invoice.due_date ? invoice.due_date : ''; + + var paid_to_date = invoice.amount - invoice.balance; + + var headerRight = 150; + var accountTop = 30; + var marginLeft = 180; + var rowHeight = 10; + var headerTop = 125; //height of HEADER //should be dynamic ! + + + var descriptionLeft = 162; + var unitCostRight = 410; + var qtyRight = 480; + var taxRight = 480; + var lineTotalRight = 550; + var tableLeft = 50; + + + //var tableTop = 240+100; + + //var tableRowHeight = 18; + var tablePadding = 14; + + + +//------------------------------ move to functions ! + var total = 0; + for (var i=0; i 0) { + + var discount = total * (invoice.discount/100); + total -= discount; + } + + var tax = 0; + if (invoice.tax && parseFloat(invoice.tax.rate)) { + tax = parseFloat(invoice.tax.rate); + } else if (invoice.tax_rate && parseFloat(invoice.tax_rate)) { + tax = parseFloat(invoice.tax_rate); + } + + if (tax) { + var tax = total * (tax/100); + total = parseFloat(total) + parseFloat(tax); + } + + total = formatMoney(total - (invoice.amount - invoice.balance), currencyId); + + var balance = formatMoney(total, currencyId); + + /* + @param orientation One of "portrait" or "landscape" (or shortcuts "p" (Default), "l") + @param unit Measurement unit to be used when coordinates are specified. One of "pt" (points), "mm" (Default), "cm", "in" + @param format One of 'a3', 'a4' (Default),'a5' ,'letter' ,'legal' + @returns {jsPDF} + */ + var doc = new jsPDF('portrait', 'pt','a4'); + + + + //Set PDF properities + doc.setProperties({ + title: '', + subject: 'Report', + author: 'Ninja', + keywords: 'pdf, javascript,geenerated', + creator: 'Ninja' + }); + + + //set default style for report + doc.setFont('Helvetica',''); + doc.setFontSize(7); + + + + + Report3AddHeader (invoice,account,doc); + + + +//---------------------------------------------------------------------------------------------------- + if (invoice.image) + { + + y=170; + var left = headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', left, y, invoice.imageWidth, invoice.imageHeight); + } + + Report3AddFooter (invoice,account,doc); + + var invoiceNumberX = headerRight - (doc.getStringUnitWidth(invoiceNumber, false) * doc.internal.getFontSize()); + var invoiceDateX = headerRight - (doc.getStringUnitWidth(invoiceDate) * doc.internal.getFontSize()); + var dueDateX = headerRight - (doc.getStringUnitWidth(dueDate) * doc.internal.getFontSize()); + var poNumberX = headerRight - (doc.getStringUnitWidth(invoice.po_number) * doc.internal.getFontSize()); + + + + var y = accountTop; + var left = marginLeft; + + + doc.setFontSize(7); + SetPdfColor('White',doc); + + + +//TODO:NOT AVAILEABLE FROM DATAMODEL + //account.email='email N/A'; + if (account.email) { + y += rowHeight; + doc.text(left, y, account.email); + } + else + { + //console.log('account.email NOT DEFINED !'); + } + +//TODO:NOT AVAILEABLE FROM DATAMODEL + if (account.phone) { + y += rowHeight; + doc.text(left, y, account.phone); + } + else + { + //console.log('account.phone NOT DEFINED !'); + } + + + var HeaderMarginThirdColumn=70; + + + + +//-----------------------------Publish Client Details block-------------------------------------------- + + var y = accountTop; + var left = marginLeft; + + var headerY = headerTop; + + + + SetPdfColor('GrayLogo',doc); //set black color + + + var line1=headerTop+16; + var line2=headerTop+16*2; + var line21=headerTop+16*1.6; + var line22=headerTop+16*2.2; + + var line3=headerTop+16*3; + var line31=headerTop+16*3.6; + + var marginLeft1=394; + + + SetPdfColor('Black',doc); //set black color + + doc.setFontSize(7); + + + ClientCompanyName=client.name; + ClientCompanyEmail='';//client.email;//'22222222'; + ClientCompanyPhone=client.work_phone; + + ClientCompanyAddress1=client.address1; + ClientCompanyAddress2=client.address2+' '+client.postal_code; + + if(client) + { + ClientCompanyName=getClientDisplayName(client); + ClientCompanyPhone=client.work_phone; + ClientCompanyEmail=client.contacts[0].email; + + } + + //show left column + SetPdfColor('Black',doc); //set black color + doc.setFontType("normal"); + + GlobalY=170; + + var z=GlobalY; + + + + SetPdfColor('Black',doc); + + if (ClientCompanyName) + { + doc.setFontSize('8'); + doc.setFontType("bold"); + doc.text(marginLeft1, z, ClientCompanyName); + z=z+15;//doc.internal.getFontSize(); + } + + if (ClientCompanyAddress1) + { + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft1, z, ClientCompanyAddress1); + z=z+15;////z=z+doc.internal.getFontSize(); + } + if (ClientCompanyAddress2) + { + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft1, z, ClientCompanyAddress2); + z=z+15;////z=z+doc.internal.getFontSize(); + } + + if (ClientCompanyEmail) + { + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft1, z, ClientCompanyEmail); + z=z+15;///z=z+doc.internal.getFontSize(); + } + if (ClientCompanyPhone) + { + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft1, z, ClientCompanyPhone); + z=z+15;////z=z+doc.internal.getFontSize(); + } + + + + + + + + + marginLeft2=395; + + //publish left side information + + SetPdfColor('White',doc); + z=30;//GlobalY+15; + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft2, z,'Invoice Number'); + z=z+15;//doc.internal.getFontSize(); + + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft2, z,'Invoice date'); + z=z+15;//doc.internal.getFontSize(); + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft2, z,'Payment Date'); + z=z+15;//doc.internal.getFontSize(); + + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft2, z,'Amount Due'); + z=z+15;//doc.internal.getFontSize(); + + + marginLeft3=marginLeft2+65; + + z=30;//GlobalY+15; + + + var invoiceNumber = invoice.invoice_number; + var invoiceDate = invoice.invoice_date ? invoice.invoice_date : ''; + var dueDate = invoice.due_date ? invoice.due_date : ''; + + + doc.setFontSize('7'); + doc.setFontType("bold"); + doc.text(marginLeft3, z,invoiceNumber); + z=z+15;//doc.internal.getFontSize(); + + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft3, z,invoiceDate); + z=z+15;//doc.internal.getFontSize(); + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft3, z,dueDate); + z=z+15;//doc.internal.getFontSize(); + + + + doc.setFontSize('8'); + doc.setFontType("normal"); + doc.text(marginLeft3, z,total); + z=z+15;//doc.internal.getFontSize(); + + + + + + y=z+60; +//--------------------------------Publishing Table-------------------------------------------------- + GlobalY=y+130; + GlobalY=GlobalY+30;//y+30; + SetPdfColor('Black',doc); + doc.setFontSize(7); + var hasTaxes = false; + for (var i=0; i 0) || (item.tax_rate && parseFloat(item.tax_rate) > 0)) { + hasTaxes = true; + break; + } + } + if (hasTaxes) + { + descriptionLeft -= 20; + unitCostRight -= 40; + qtyRight -= 40; + } + + + + + + + + + + + + + + + + + var costX = unitCostRight - (doc.getStringUnitWidth('Unit Cost') * doc.internal.getFontSize()); + var qtyX = qtyRight - (doc.getStringUnitWidth('Quantity') * doc.internal.getFontSize()); + var taxX = taxRight - (doc.getStringUnitWidth('Tax') * doc.internal.getFontSize()); + var totalX = lineTotalRight - (doc.getStringUnitWidth('Line Total') * doc.internal.getFontSize()) -15; + + tableTop=GlobalY;//redefine this to dynamic value + + + doc.setFontSize(12); + doc.setFontType("bold"); + + + + + + + + + + + doc.setLineWidth(0.3); + + doc.setDrawColor(63,60,60); + doc.setFillColor(63,60,60); + var x1 = tableLeft-tablePadding*2+5 ; + var y1 = GlobalY-doc.internal.getFontSize()-15; + var w2 = 515+tablePadding*2-3;//lineTotalRight-tablePadding*5; + var h2 = doc.internal.getFontSize()+15*2; + doc.rect(x1, y1, w2, h2, 'FD'); + + + SetPdfColor('White',doc); + + + + doc.text(tableLeft, tableTop, 'Item'); + doc.text(descriptionLeft, tableTop, 'Description'); + doc.text(costX, tableTop, 'Unit Cost'); + doc.text(qtyX, tableTop, 'Quantity'); + doc.text(totalX, tableTop, 'Line Total'); + + if (hasTaxes) + { + doc.text(taxX, tableTop, 'Tax'); + } + + SetPdfColor('Black',doc); + doc.setFontSize(7); + + /* line items */ + + var line = 1; + var total = 0; + var shownItem = false; + + + GlobalY=GlobalY+24+10; //padding from top + + var FontSize=7; + doc.setFontSize(FontSize); + doc.setFontType("normal"); + + var MaxLinesPerPage=40; + + + + for (var i=0; i MaxGlobalY) { + + tableTop = 180; + GlobalY=tableTop; + + doc.addPage(); + Report3AddHeader(invoice,account,doc); + Report3AddFooter(invoice,account,doc); + NewPageFlag=1; + } + else NewPageFlag=0; + + +if (i!=0&NewPageFlag==0) +{ + doc.setDrawColor(0,0,0); // draw red lines + doc.setLineWidth(0.1); + + var x1 = tableLeft-tablePadding ; + var y1 = GlobalY-FontSize; + var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; + doc.line(x1, y1-10,x1+w2, y1-10); // horizontal line +} + + + + x=GlobalY; + + GlobalY=GlobalY+h+tablePadding*2; + + +// SetPdfColor('SomeGreen',doc); + + doc.setFontType("bold"); + doc.text(tableLeft, x, productKey); + + doc.setFontType("normal"); + SetPdfColor('Black',doc); + doc.text(descriptionLeft, x, notes); + + + + doc.text(costX, x, cost); + doc.text(qtyX, x, qty); + doc.text(totalX, x, lineTotal); + + if (tax) { + doc.text(taxX, x, tax+'%'); + } + + + + line=line+length; + } + + + if (GlobalY>600) + { + GlobalY=150; + x=150; + doc.addPage(); + Report3AddHeader(invoice,account,doc); + Report3AddFooter(invoice,account,doc); + } + + + else + + { + + //put line separator + + doc.setDrawColor(0,0,0); // draw red lines + doc.setLineWidth(0.1); + + var x1 = tableLeft-tablePadding ; + var y1 = GlobalY-FontSize; + var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; + doc.line(x1, y1,x1+w2, y1); // horizontal line + + } + + + +//-------------------------------Publishing Document balance------------------------------------------ + + + x += 16+50; + + doc.setFontType("bold"); + MsgRightAlign=400; + + + + GlobalY=x; + + + SetPdfColor('Black',doc); + Msg='Total'; + var TmpMsgX = MsgRightAlign-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + doc.text(TmpMsgX, x, Msg); + + doc.setFontType("normal"); + AmountText = formatMoney(total , currencyId); + headerLeft=headerRight+400; + var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + doc.text(AmountX, x, AmountText); + + + + + x += doc.internal.getFontSize()*2; + + Msg='Amount Payed'; + var TmpMsgX = MsgRightAlign-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + doc.text(TmpMsgX, x, Msg); + + + + AmountText = formatMoney(paid_to_date , currencyId); + headerLeft=headerRight+400; + var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + doc.text(AmountX, x, AmountText); + + + + + + + + + + + doc.setLineWidth(0.3); + + doc.setDrawColor(63,60,60); + doc.setFillColor(63,60,60); + var x1 = tableLeft-tablePadding*2 +14; + var y1 = x+ doc.internal.getFontSize()*4; + var w2 = 510+tablePadding*2;//lineTotalRight-tablePadding*5; + var h2 = doc.internal.getFontSize()*3+tablePadding*2; + doc.rect(x1, y1, w2, h2, 'FD'); + + + + + + + + + + + doc.setFontType("bold"); + SetPdfColor('White',doc); + doc.setFontSize(12); + x += doc.internal.getFontSize()*4; + Msg='Amount Due'; + var TmpMsgX = MsgRightAlign-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + + + + doc.text(TmpMsgX, x, Msg); + + + doc.setFontType("normal"); + AmountText = formatMoney(balance , currencyId); + headerLeft=headerRight+400; + var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + doc.text(AmountX, x, AmountText); + + + + + + + return doc; +} + + + + +function Report3AddHeader (invoice,account,doc) +{ + doc.setLineWidth(0.5); + //doc.setFillColor( 46,43,43); + //doc.setFillColor( 46,43,43); + doc.setDrawColor(242,101,34); + doc.setFillColor(242,101,34); + var x1 =0; + var y1 = 0; + var w2 = 595; + var h2 = 140; + doc.rect(x1, y1, w2, h2, 'FD'); + + SetPdfColor('White',doc); + //second column + doc.setFontType("bold"); + var MaxWidth=594; + var LineOne= account.name; + var AlignLine = MaxWidth-30- (doc.getStringUnitWidth(LineOne) * doc.internal.getFontSize()); + if (account.name) { + + //SetPdfColor('SomeGreen',doc); + doc.setFontSize('36'); + doc.setFontType("bold"); + doc.text(40,50, LineOne); + + doc.setFontType("normal"); + doc.setFontSize('7'); + } + + +} + + +function Report1AddNewPage(invoice,account,doc) +{ + doc.addPage(); + if (invoice.imageLogo1) + { + pageHeight=820; + y=pageHeight-invoice.imageLogoHeight1; + var left = 20;//headerRight - invoice.imageLogoWidth1; + doc.addImage(invoice.imageLogo1, 'JPEG', left, y, invoice.imageLogoWidth1, invoice.imageLogoHeight1); + + } + + GlobalY = 40; + return GlobalY; +}