├── .github
├── CODE_OF_CONDUCT.md
├── ISSUE_TEMPLATE
│ ├── Bug_report.md
│ └── Feature_request.md
├── PULL_REQUEST_TEMPLATE.md
└── SECURITY.md
├── .gitignore
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── composer.json
├── composer.lock
└── src
├── components
├── _includes
│ ├── Administrator.php
│ ├── Client.php
│ ├── Company.php
│ ├── Core.php
│ ├── CoreMenu.php
│ ├── CoreTheme.php
│ ├── Creditnote.php
│ ├── Cronjob.php
│ ├── Expense.php
│ ├── Help.php
│ ├── Invoice.php
│ ├── Otherincome.php
│ ├── Payment.php
│ ├── Report.php
│ ├── Schedule.php
│ ├── Setup.php
│ ├── Supplier.php
│ ├── User.php
│ ├── Voucher.php
│ └── Workorder.php
├── administrator
│ ├── acl.php
│ ├── config.php
│ ├── phpinfo.php
│ └── update.php
├── client
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── new.php
│ ├── note_delete.php
│ ├── note_edit.php
│ ├── note_new.php
│ └── search.php
├── company
│ ├── business_hours.php
│ └── edit.php
├── core
│ ├── 403.php
│ ├── 404.php
│ ├── blocks
│ │ ├── theme_debug_block.php
│ │ ├── theme_footer_block.php
│ │ ├── theme_header_block.php
│ │ ├── theme_header_theme_off_block.php
│ │ └── theme_menu_block.php
│ ├── dashboard.php
│ ├── error.php
│ ├── home.php
│ └── maintenance.php
├── creditnote
│ ├── cancel.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── email.php
│ ├── new.php
│ ├── print.php
│ ├── search.php
│ └── status.php
├── cronjob
│ ├── details.php
│ ├── edit.php
│ ├── overview.php
│ ├── run.php
│ └── unlock.php
├── expense
│ ├── cancel.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── new.php
│ ├── search.php
│ └── status.php
├── help
│ ├── about.php
│ ├── attribution.php
│ └── license.php
├── invoice
│ ├── cancel.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── email.php
│ ├── new.php
│ ├── overview.php
│ ├── prefill_items.php
│ ├── print.php
│ ├── search.php
│ └── status.php
├── otherincome
│ ├── cancel.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── new.php
│ ├── search.php
│ └── status.php
├── payment
│ ├── cancel.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── methods
│ │ ├── PaymentMethod.php
│ │ ├── PaymentMethodBankTransfer.php
│ │ ├── PaymentMethodCard.php
│ │ ├── PaymentMethodCash.php
│ │ ├── PaymentMethodCheque.php
│ │ ├── PaymentMethodCreditnote.php
│ │ ├── PaymentMethodDirectdebit.php
│ │ ├── PaymentMethodOther.php
│ │ ├── PaymentMethodPaypal.php
│ │ └── PaymentMethodVoucher.php
│ ├── new.php
│ ├── options.php
│ ├── search.php
│ ├── status.php
│ └── types
│ │ ├── PaymentType.php
│ │ ├── PaymentTypeCreditnote.php
│ │ ├── PaymentTypeExpense.php
│ │ ├── PaymentTypeInvoice.php
│ │ └── PaymentTypeOtherincome.php
├── report
│ ├── basic_stats.php
│ └── financial.php
├── schedule
│ ├── day.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── icalendar.php
│ ├── new.php
│ └── search.php
├── setup
│ ├── choice.php
│ ├── install.php
│ ├── migrate.php
│ └── upgrade.php
├── supplier
│ ├── cancel.php
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── new.php
│ ├── search.php
│ └── status.php
├── user
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── login.php
│ ├── new.php
│ ├── reset.php
│ └── search.php
├── voucher
│ ├── delete.php
│ ├── details.php
│ ├── edit.php
│ ├── email.php
│ ├── new.php
│ ├── print.php
│ ├── search.php
│ └── status.php
└── workorder
│ ├── autosuggest_scope.php
│ ├── delete.php
│ ├── details.php
│ ├── details_edit_comment.php
│ ├── details_edit_description.php
│ ├── details_edit_resolution.php
│ ├── new.php
│ ├── note_delete.php
│ ├── note_edit.php
│ ├── note_new.php
│ ├── overview.php
│ ├── print.php
│ ├── search.php
│ └── status.php
├── cron.php
├── favicon.ico
├── htaccess.txt
├── htpasswd.txt
├── index.php
├── language
├── _gettext_only
│ ├── pages.php
│ └── system_variables.php
└── en_GB
│ └── LC_MESSAGES
│ ├── site.mo
│ └── site.po
├── libraries
├── custom
│ └── smarty
│ │ └── plugins
│ │ ├── block.t.php
│ │ ├── function.locale.php
│ │ ├── modifier.creditnoteadinfodisplay.php
│ │ ├── modifier.invoiceadinfodisplay.php
│ │ ├── modifier.paymentadinfodisplay.php
│ │ ├── modifier.redemptions.php
│ │ └── modifier.vouchers.php
└── qframework
│ ├── Sections
│ ├── Components.php
│ ├── Modules.php
│ ├── Plugins.php
│ └── System.php
│ ├── System
│ ├── Communication.php
│ ├── Email.php
│ ├── General.php
│ ├── Page.php
│ ├── Pdf.php
│ ├── QError.php
│ ├── Router.php
│ ├── Security.php
│ └── Variables.php
│ ├── includes
│ ├── CMSApplication.php
│ ├── Factory.php
│ ├── defines.php
│ └── loader.php
│ └── joomla
│ ├── libraries
│ ├── fof
│ │ └── input
│ │ │ └── jinput
│ │ │ ├── cookie.php
│ │ │ └── input.php
│ ├── joomla
│ │ └── session
│ │ │ ├── handler
│ │ │ ├── interface.php
│ │ │ ├── joomla.php
│ │ │ └── native.php
│ │ │ ├── storage.php
│ │ │ └── storage
│ │ │ ├── database.php
│ │ │ └── none.php
│ ├── src
│ │ ├── Authentication
│ │ │ ├── Authentication.php
│ │ │ └── AuthenticationResponse.php
│ │ ├── Crypt
│ │ │ └── Crypt.php
│ │ ├── Filter
│ │ │ └── InputFilter.php
│ │ ├── Input
│ │ │ ├── Cookie.php
│ │ │ └── Input.php
│ │ ├── Session
│ │ │ └── Session.php
│ │ └── User
│ │ │ ├── User.php
│ │ │ ├── UserHelper.php
│ │ │ └── UserWrapper.php
│ └── vendor
│ │ └── joomla
│ │ ├── application
│ │ └── src
│ │ │ └── Web
│ │ │ └── WebClient.php
│ │ ├── filter
│ │ └── src
│ │ │ └── InputFilter.php
│ │ ├── input
│ │ └── src
│ │ │ └── Input.php
│ │ ├── registry
│ │ └── src
│ │ │ └── Registry.php
│ │ └── string
│ │ └── src
│ │ ├── StringHelper.php
│ │ └── phputf8
│ │ └── native
│ │ └── core.php
│ └── plugins
│ ├── authentication
│ ├── cookie
│ │ └── cookie.php
│ └── joomla
│ │ └── joomla.php
│ ├── system
│ └── remember
│ │ └── remember.php
│ └── user
│ └── joomla
│ └── joomla.php
├── logs
└── .htaccess
├── media
├── .htaccess
└── qw-logo.png
├── robots.txt.dist
├── setup
├── install
│ ├── install_configuration.php
│ └── install_database.sql
├── migrate
│ └── myitcrm
│ │ ├── migrate_configuration.php
│ │ ├── migrate_database.sql
│ │ └── migrate_routines.php
└── upgrade
│ ├── 3_1_0
│ ├── break.txt
│ ├── upgrade_database.sql
│ └── upgrade_routines.php
│ ├── 3_1_1
│ ├── upgrade_database.sql
│ └── upgrade_routines.php
│ ├── 3_1_2
│ ├── upgrade_database.sql
│ └── upgrade_routines.php
│ ├── 3_1_3
│ ├── upgrade_database.sql
│ └── upgrade_routines.php
│ └── 3_1_4
│ ├── upgrade_database.sql
│ └── upgrade_routines.php
└── themes
├── .htaccess
└── default
├── css
└── template.css
├── fonts
├── 04B_08__.TTF
└── 04B_09__.TTF
├── images
├── MC.gif
├── Visa.gif
├── back_24.gif
├── bank.gif
├── btn_paynow_LG.gif
├── buttons
│ ├── Thumbs.db
│ └── ics.png
├── closed.gif
├── cross.png
├── csv_example_screenshot.png
├── detail01.gif
├── detail02.gif
├── fastf_24.gif
├── forwd_24.gif
├── gblnav_left.gif
├── glblnav_selected.gif
├── glbnav_background.gif
├── glbnav_right.gif
├── icons
│ ├── 16x16
│ │ ├── Calendar.gif
│ │ ├── back.gif
│ │ ├── down.gif
│ │ ├── email.jpg
│ │ ├── fileprint.gif
│ │ ├── forward.gif
│ │ ├── help.gif
│ │ ├── next.gif
│ │ ├── pdf_small.gif
│ │ ├── small_clock.gif
│ │ ├── small_edit.gif
│ │ ├── small_edit_employee.gif
│ │ ├── small_new_client.gif
│ │ ├── small_new_invoice_only.gif
│ │ ├── small_new_work_order.gif
│ │ ├── stop.gif
│ │ ├── up.gif
│ │ ├── view.gif
│ │ └── viewmag.gif
│ ├── 3floppy_mount.png
│ ├── bookmark.png
│ ├── bug.png
│ ├── button_ok.png
│ ├── cheque.jpeg
│ ├── clients.gif
│ ├── clock.gif
│ ├── close.gif
│ ├── comment.png
│ ├── control.gif
│ ├── db_restore.png
│ ├── db_save.png
│ ├── decrypted.png
│ ├── delete.gif
│ ├── delete_employees.gif
│ ├── deposit.jpeg
│ ├── edit.gif
│ ├── edit_employee.gif
│ ├── employee.gif
│ ├── encrypted.png
│ ├── filefind.gif
│ ├── gift.png
│ ├── home.gif
│ ├── invoice.png
│ ├── key.png
│ ├── logout.gif
│ ├── map.png
│ ├── money.png
│ ├── new.gif
│ ├── new_customer.gif
│ ├── new_employees.gif
│ ├── new_note.gif
│ ├── new_work_order.gif
│ ├── next.gif
│ ├── note.png
│ ├── pdf.png
│ ├── pdf_small.png
│ ├── php.png
│ ├── previous.gif
│ ├── print.gif
│ ├── reports.png
│ ├── status.gif
│ ├── view.gif
│ ├── warning.gif
│ ├── web.png
│ └── workorders.gif
├── index03.gif
├── index07.gif
├── index13.gif
├── index14.gif
├── index15.gif
├── index16.gif
├── index17.gif
├── index18.gif
├── index19.gif
├── index20.gif
├── index21.gif
├── index22.gif
├── index26.jpg
├── index29.jpg
├── index30.gif
├── index31.gif
├── index41.gif
├── index42.gif
├── index43.gif
├── inside01.gif
├── key.png
├── list.gif
├── list01.gif
├── move.png
├── news.png
├── open.gif
├── paymate
│ ├── Thumbs.db
│ └── paymate_cc.gif
├── paypal
│ ├── Thumbs.db
│ ├── cc_paypal.gif
│ ├── donate.gif
│ ├── pay_now.gif
│ └── pay_now.png
├── request.png
├── rewnd_24.gif
├── sdmenu
│ ├── bottom.gif
│ ├── collapsed.gif
│ ├── expanded.gif
│ └── toptitle.gif
├── searchbar-eBay-logo.png
├── spacer.gif
├── swsh.gif
├── tick.png
├── title.gif
├── upArrow.png
├── xml.png
└── xp_button_blue.gif
├── js
├── components
│ ├── expense_other.js
│ └── workorder.js
├── dhtmltooltip.js
├── dhtmlxcombo
│ ├── dhtmlxcombo.css
│ ├── dhtmlxcombo.js
│ ├── imgs
│ │ ├── dhxcombo_material
│ │ │ ├── dhxcombo_arrow_down.gif
│ │ │ ├── dhxcombo_arrow_down_dis.gif
│ │ │ └── dhxcombo_chbx.gif
│ │ ├── dhxcombo_skyblue
│ │ │ ├── dhxcombo_arrow_down.gif
│ │ │ ├── dhxcombo_arrow_down_dis.gif
│ │ │ └── dhxcombo_chbx.gif
│ │ ├── dhxcombo_terrace
│ │ │ ├── dhxcombo_arrow_down.gif
│ │ │ ├── dhxcombo_arrow_down_dis.gif
│ │ │ └── dhxcombo_chbx.gif
│ │ └── dhxcombo_web
│ │ │ ├── dhxcombo_arrow_down.gif
│ │ │ ├── dhxcombo_arrow_down_dis.gif
│ │ │ └── dhxcombo_chbx.gif
│ └── skins
│ │ ├── dhtmlxcombo_dhx_skyblue.css
│ │ ├── dhtmlxcombo_dhx_terrace.css
│ │ ├── dhtmlxcombo_dhx_web.css
│ │ └── dhtmlxcombo_material.css
├── dhtmlxcommon.js
├── editor-config.js
├── jquery-3.1.1.min.js
├── jscal2
│ ├── css
│ │ ├── border-radius.css
│ │ ├── gold
│ │ │ ├── brushed-steel.jpg
│ │ │ ├── coolbg.png
│ │ │ ├── gold.css
│ │ │ └── gold.jpg
│ │ ├── img
│ │ │ ├── cool-bg-hard-inv.png
│ │ │ ├── cool-bg-hard.png
│ │ │ ├── cool-bg-inv.png
│ │ │ ├── cool-bg.png
│ │ │ ├── drop-down.gif
│ │ │ ├── drop-up.gif
│ │ │ ├── nav-left-x2.gif
│ │ │ ├── nav-left.gif
│ │ │ ├── nav-right-x2.gif
│ │ │ ├── nav-right.gif
│ │ │ ├── time-down.png
│ │ │ └── time-up.png
│ │ ├── jscal2.css
│ │ ├── matrix
│ │ │ ├── matrix.css
│ │ │ ├── nav-left-x2.gif
│ │ │ ├── nav-left.gif
│ │ │ ├── nav-right-x2.gif
│ │ │ └── nav-right.gif
│ │ ├── reduce-spacing.css
│ │ ├── shadow-b.png
│ │ ├── steel
│ │ │ ├── brushed-steel.jpg
│ │ │ ├── brushed-steel.png
│ │ │ ├── coolbg.png
│ │ │ ├── steel.css
│ │ │ └── steel.jpg
│ │ └── win2k
│ │ │ └── win2k.css
│ ├── jscal2.js
│ ├── language.js
│ └── unicode-letter.js
├── sdmenu.js
├── template.js
└── tinymce
│ ├── jquery.tinymce.min.js
│ ├── langs
│ ├── en_GB.js
│ └── readme.md
│ ├── license.txt
│ ├── plugins
│ ├── codesample
│ │ └── css
│ │ │ └── prism.css
│ ├── emoticons
│ │ └── img
│ │ │ ├── smiley-cool.gif
│ │ │ ├── smiley-cry.gif
│ │ │ ├── smiley-embarassed.gif
│ │ │ ├── smiley-foot-in-mouth.gif
│ │ │ ├── smiley-frown.gif
│ │ │ ├── smiley-innocent.gif
│ │ │ ├── smiley-kiss.gif
│ │ │ ├── smiley-laughing.gif
│ │ │ ├── smiley-money-mouth.gif
│ │ │ ├── smiley-sealed.gif
│ │ │ ├── smiley-smile.gif
│ │ │ ├── smiley-surprised.gif
│ │ │ ├── smiley-tongue-out.gif
│ │ │ ├── smiley-undecided.gif
│ │ │ ├── smiley-wink.gif
│ │ │ └── smiley-yell.gif
│ ├── help
│ │ └── img
│ │ │ └── logo.png
│ ├── print
│ │ └── plugin.min.js
│ └── visualblocks
│ │ └── css
│ │ └── visualblocks.css
│ ├── skins
│ ├── lightgray
│ │ ├── content.inline.min.css
│ │ ├── content.min.css
│ │ ├── content.mobile.min.css
│ │ ├── fonts
│ │ │ ├── tinymce-mobile.woff
│ │ │ ├── tinymce-small.eot
│ │ │ ├── tinymce-small.svg
│ │ │ ├── tinymce-small.ttf
│ │ │ ├── tinymce-small.woff
│ │ │ ├── tinymce.eot
│ │ │ ├── tinymce.svg
│ │ │ ├── tinymce.ttf
│ │ │ └── tinymce.woff
│ │ ├── img
│ │ │ ├── anchor.gif
│ │ │ ├── loader.gif
│ │ │ ├── object.gif
│ │ │ └── trans.gif
│ │ ├── skin.min.css
│ │ ├── skin.min.css.map
│ │ ├── skin.mobile.min.css
│ │ └── skin.mobile.min.css.map
│ └── qwcrm
│ │ ├── Variables.less
│ │ ├── content.inline.min.css
│ │ ├── content.min.css
│ │ ├── fonts
│ │ ├── readme.md
│ │ ├── tinymce-small.eot
│ │ ├── tinymce-small.json
│ │ ├── tinymce-small.svg
│ │ ├── tinymce-small.ttf
│ │ ├── tinymce-small.woff
│ │ ├── tinymce.eot
│ │ ├── tinymce.json
│ │ ├── tinymce.svg
│ │ ├── tinymce.ttf
│ │ └── tinymce.woff
│ │ ├── img
│ │ ├── anchor.gif
│ │ ├── loader.gif
│ │ ├── object.gif
│ │ └── trans.gif
│ │ ├── skin.ie7.min.css
│ │ ├── skin.json
│ │ └── skin.min.css
│ └── tinymce.min.js
├── templateDetails.xml
└── templates
├── administrator
├── acl.tpl
├── config.tpl
├── phpinfo.tpl
└── update.tpl
├── client
├── blocks
│ ├── details_account_block.tpl
│ ├── details_notes_block.tpl
│ ├── display_client_details_block.tpl
│ ├── display_client_historic_stats_block.tpl
│ └── display_clients_block.tpl
├── details.tpl
├── edit.tpl
├── new.tpl
├── note_edit.tpl
├── note_new.tpl
├── printing
│ └── print_client_envelope.tpl
└── search.tpl
├── company
├── business_hours.tpl
└── edit.tpl
├── core
├── 403.tpl
├── 404.tpl
├── blocks
│ ├── home_dashboard_block.tpl
│ ├── home_login_block.tpl
│ ├── theme_debug_block.tpl
│ ├── theme_debug_smarty_debug_block.tpl
│ ├── theme_footer_block.tpl
│ ├── theme_footer_legacy_supplement_block.tpl
│ ├── theme_header_block.tpl
│ ├── theme_header_legacy_supplement_block.tpl
│ ├── theme_header_theme_off_block.tpl
│ ├── theme_menu_block.tpl
│ └── theme_searchbar_block.tpl
├── dashboard.tpl
├── dashboard_customer.tpl
├── dashboard_employee.tpl
├── error.tpl
├── home.tpl
└── maintenance.tpl
├── creditnote
├── blocks
│ ├── display_creditnote_balance_block.tpl
│ ├── display_creditnote_current_stats_block.tpl
│ ├── display_creditnote_historic_stats_block.tpl
│ ├── display_creditnote_revenue_stats_block.tpl
│ └── display_creditnotes_block.tpl
├── details.tpl
├── edit.tpl
├── printing
│ └── print_creditnote.tpl
├── search.tpl
└── status.tpl
├── cronjob
├── blocks
│ └── display_cronjobs_block.tpl
├── details.tpl
├── edit.tpl
└── overview.tpl
├── expense
├── blocks
│ ├── display_expense_balance_block.tpl
│ └── display_expenses_block.tpl
├── details.tpl
├── edit.tpl
├── search.tpl
└── status.tpl
├── help
├── about.tpl
├── attribution.tpl
└── license.tpl
├── invoice
├── blocks
│ ├── display_invoice_balance_block.tpl
│ ├── display_invoice_current_stats_block.tpl
│ ├── display_invoice_historic_stats_block.tpl
│ ├── display_invoice_revenue_stats_block.tpl
│ └── display_invoices_block.tpl
├── details.tpl
├── edit.tpl
├── overview.tpl
├── prefill_items.tpl
├── printing
│ └── print_invoice.tpl
├── search.tpl
└── status.tpl
├── otherincome
├── blocks
│ ├── display_otherincome_balance_block.tpl
│ └── display_otherincomes_block.tpl
├── details.tpl
├── edit.tpl
├── search.tpl
└── status.tpl
├── payment
├── blocks
│ ├── display_payment_methods_block.tpl
│ ├── display_payment_revenue_stats_block.tpl
│ └── display_payments_block.tpl
├── details.tpl
├── edit.tpl
├── new.tpl
├── options.tpl
├── search.tpl
└── status.tpl
├── report
├── basic_stats.tpl
└── financial.tpl
├── schedule
├── blocks
│ └── display_schedules_block.tpl
├── day.tpl
├── details.tpl
├── edit.tpl
├── new.tpl
└── search.tpl
├── setup
├── blocks
│ ├── choice_compatibility_test_block.tpl
│ ├── install_administrator_account_block.tpl
│ ├── install_company_details_block.tpl
│ ├── install_config_settings_block.tpl
│ ├── install_database_connection_block.tpl
│ ├── install_database_install_block.tpl
│ ├── install_database_install_results_block.tpl
│ ├── install_delete_setup_folder_block.tpl
│ ├── install_start_numbers_block.tpl
│ ├── migrate_myitcrm_administrator_account_block.tpl
│ ├── migrate_myitcrm_company_details_block.tpl
│ ├── migrate_myitcrm_config_settings_block.tpl
│ ├── migrate_myitcrm_database_connection_myitcrm_block.tpl
│ ├── migrate_myitcrm_database_connection_qwcrm_block.tpl
│ ├── migrate_myitcrm_database_install_qwcrm_block.tpl
│ ├── migrate_myitcrm_database_install_results_qwcrm_block.tpl
│ ├── migrate_myitcrm_database_migrate_block.tpl
│ ├── migrate_myitcrm_database_migrate_results_block.tpl
│ ├── migrate_myitcrm_upgrade_confirmation_block.tpl
│ ├── upgrade_database_connection_block.tpl
│ ├── upgrade_database_upgrade_block.tpl
│ ├── upgrade_database_upgrade_results_block.tpl
│ └── upgrade_delete_setup_folder_block.tpl
├── choice.tpl
├── install.tpl
├── migrate.tpl
└── upgrade.tpl
├── supplier
├── blocks
│ └── display_suppliers_block.tpl
├── details.tpl
├── edit.tpl
├── new.tpl
├── search.tpl
└── status.tpl
├── user
├── blocks
│ ├── details_details_block.tpl
│ ├── display_users_block.tpl
│ ├── reset_enter_email_block.tpl
│ ├── reset_enter_password_block.tpl
│ └── reset_enter_token_block.tpl
├── details.tpl
├── edit.tpl
├── login.tpl
├── new.tpl
├── reset.tpl
└── search.tpl
├── voucher
├── blocks
│ ├── display_voucher_revenue_stats_block.tpl
│ └── display_vouchers_block.tpl
├── details.tpl
├── edit.tpl
├── new.tpl
├── printing
│ └── print_voucher.tpl
├── search.tpl
└── status.tpl
└── workorder
├── blocks
├── details_history_block.tpl
├── details_notes_block.tpl
├── details_schedule_block.tpl
├── details_workorder_block.tpl
├── display_workorder_current_stats_block.tpl
├── display_workorder_historic_stats_block.tpl
└── display_workorders_block.tpl
├── details.tpl
├── details_edit_comment.tpl
├── details_edit_description.tpl
├── details_edit_resolution.tpl
├── new.tpl
├── note_edit.tpl
├── note_new.tpl
├── overview.tpl
├── printing
├── print_client_workorder_slip.tpl
├── print_technician_job_sheet.tpl
└── print_technician_workorder_slip.tpl
├── search.tpl
└── status.tpl
/.github/ISSUE_TEMPLATE/Bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 |
5 | ---
6 |
7 | **Describe the bug**
8 | A clear and concise description of what the bug is.
9 |
10 | **To Reproduce**
11 | Steps to reproduce the behavior:
12 | 1. Go to '...'
13 | 2. Click on '....'
14 | 3. Scroll down to '....'
15 | 4. See error
16 |
17 | **Expected behavior**
18 | A clear and concise description of what you expected to happen.
19 |
20 | **Actual result**
21 | A clear and concise description of what you see. Like an error message.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **System information (please complete the following information)**
27 |
28 | QWcrm version:
29 | Php version:
30 | Database version:
31 |
32 | **Desktop (please complete the following information):**
33 | - OS: [e.g. iOS]
34 | - Browser [e.g. chrome, safari]
35 | - Version [e.g. 22]
36 |
37 | **Smartphone (please complete the following information):**
38 | - Device: [e.g. iPhone6]
39 | - OS: [e.g. iOS8.1]
40 | - Browser [e.g. stock browser, safari]
41 | - Version [e.g. 22]
42 |
43 | **Additional context**
44 | Add any other context about the problem here.
45 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/Feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 |
5 | ---
6 |
7 | **Is your feature request related to a problem? Please describe.**
8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9 |
10 | **Describe the solution you'd like**
11 | A clear and concise description of what you want to happen.
12 |
13 | **Describe alternatives you've considered**
14 | A clear and concise description of any alternative solutions or features you've considered.
15 |
16 | **Additional context**
17 | Add any other context or screenshots about the feature request here.
18 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Pull Request for Issue # .
2 |
3 | #### Summary of Changes
4 |
5 | #### Testing Instructions
--------------------------------------------------------------------------------
/.github/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | | Version | Supported |
6 | | ------- | ------------------ |
7 | | 3.2.0 | :white_check_mark: |
8 | | 3.1.0 | :white_check_mark: |
9 | | < 3.0 | :x: |
10 |
11 | ## Reporting a Vulnerability
12 |
13 | Please send a email to: xxx@quantumwarp.com with a example or POC.
14 |
15 | We will send you a email within 24 hours.
16 | After the confirmation we will work on the fix asap.
17 |
18 |
19 | ## Bug Bounty
20 |
21 | Sorry, we have no bug bounty rewards for the reports. All our donations are going to the server costs.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /localonly/
2 | /nbproject/
3 | /src/cache/smarty/cache/
4 | /src/cache/smarty/compile/
5 | /src/libraries/vendor/
6 | /src/logs/
7 | /src/media/
8 | /src/-setup/
9 | /src/tmp/
10 | /src/configuration.php
11 | /src/-configuration.php
12 | /.php_cs.cache
13 | /src/.htaccess
14 | /src/off.htaccess
15 | /src/themail.log
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "vendor-dir": "src/libraries/vendor"
4 | },
5 | "require": {
6 | "phpmyadmin/motranslator": "^5.0",
7 | "smarty/smarty": "^4.0",
8 | "mpdf/mpdf": "^8.0",
9 | "adodb/adodb-php": "^5.20",
10 | "swiftmailer/swiftmailer": "^6.0",
11 | "google/recaptcha": "^1.1",
12 | "picqer/php-barcode-generator": "^2.0",
13 | "filp/whoops": "^2.2",
14 | "dragonmantank/cron-expression": "^3.0.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/_includes/Core.php:
--------------------------------------------------------------------------------
1 | app->db->execute($sql)) {$this->app->system->page->forceErrorPage('database', __FILE__, __FUNCTION__, $this->app->db->ErrorMsg(), $sql);}
32 |
33 | return $rs->fields['welcome_msg'];
34 |
35 | }
36 |
37 | }
--------------------------------------------------------------------------------
/src/components/_includes/CoreMenu.php:
--------------------------------------------------------------------------------
1 | app->components->administrator->resetAclPermissions();
14 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Permissions reset to default."));
15 | }
16 |
17 | // Update the ACL permissions if submitted
18 | if(isset(\CMSApplication::$VAR['submit']) && \CMSApplication::$VAR['submit'] == 'update') {
19 | $this->app->components->administrator->updateAcl(\CMSApplication::$VAR['qform']['permissions']);
20 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Permissions Updated."));
21 | }
22 |
23 | // Build the page with the permissions from the database
24 | $this->app->smarty->assign('acl', $this->app->components->administrator->getAclPermissions());
--------------------------------------------------------------------------------
/src/components/administrator/phpinfo.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('phpinfo', $this->app->components->administrator->getPHPInfo());
--------------------------------------------------------------------------------
/src/components/administrator/update.php:
--------------------------------------------------------------------------------
1 | app->components->administrator->checkQwcrmUpdateAvailability();
15 |
16 | } else {
17 | // Prevent undefined variable errors
18 | $this->app->smarty->assign('update_response', null);
19 | }
20 |
21 | // Build the page
22 |
23 | $this->app->smarty->assign('current_version', QWCRM_VERSION);
24 |
25 |
--------------------------------------------------------------------------------
/src/components/client/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm()) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a client_id
18 | if(!isset(\CMSApplication::$VAR['client_id']) || !\CMSApplication::$VAR['client_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Client ID supplied."));
20 | $this->app->system->page->forcePage('client', 'search');
21 | }
22 |
23 | // Run the delete function and return the results
24 | if(!$this->app->components->client->deleteRecord(\CMSApplication::$VAR['client_id'])) {
25 |
26 | // Reload client details page with error messages
27 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("This client cannot be deleted."));
28 | $this->app->system->page->forcePage('client', 'details&client_id='.\CMSApplication::$VAR['client_id']);
29 |
30 | } else {
31 |
32 | // Load the Client search page
33 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The client has been deleted."));
34 | $this->app->system->page->forcePage('client', 'search');
35 |
36 | }
--------------------------------------------------------------------------------
/src/components/client/edit.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Client ID supplied."));
14 | $this->app->system->page->forcePage('client', 'search');
15 | }
16 |
17 | if(isset(\CMSApplication::$VAR['submit'])) {
18 |
19 | // Update the Client's Details
20 | $this->app->components->client->updateRecord(\CMSApplication::$VAR['qform']);
21 |
22 | // Load the client's details page
23 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The Client's information was updated."));
24 | $this->app->system->page->forcePage('client', 'details&client_id='.\CMSApplication::$VAR['client_id']);
25 |
26 | } else {
27 |
28 | // Build the page
29 | $this->app->smarty->assign('client_types', $this->app->components->client->getTypes());
30 | $this->app->smarty->assign('client_details', $this->app->components->client->getRecord(\CMSApplication::$VAR['client_id']));
31 |
32 | }
--------------------------------------------------------------------------------
/src/components/client/new.php:
--------------------------------------------------------------------------------
1 | app->components->client->insertRecord(\CMSApplication::$VAR['qform']);
15 |
16 | // Load the new Client's Details page
17 | $this->app->system->page->forcePage('client', 'details&client_id='.\CMSApplication::$VAR['client_id']);
18 |
19 | } else {
20 |
21 | // Build the page
22 | $this->app->smarty->assign('client_types', $this->app->components->client->getTypes());
23 |
24 | }
--------------------------------------------------------------------------------
/src/components/client/note_delete.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Client Note ID supplied."));
14 | $this->app->system->page->forcePage('client', 'search');
15 | }
16 |
17 | // Get the client_id before we delete the record
18 | \CMSApplication::$VAR['client_id'] = $this->app->components->client->getNote(\CMSApplication::$VAR['client_note_id'], 'client_id');
19 |
20 | // Delete the client note
21 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The client note has been deleted."));
22 | $this->app->components->client->deleteNote(\CMSApplication::$VAR['client_note_id']);
23 |
24 | // Reload the clients details page
25 | $this->app->system->page->forcePage('client', 'details&client_id='.\CMSApplication::$VAR['client_id']);
--------------------------------------------------------------------------------
/src/components/client/note_edit.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Client Note ID supplied."));
14 | $this->app->system->page->forcePage('client', 'search');
15 | }
16 |
17 | // If record submitted for updating
18 | if(isset(\CMSApplication::$VAR['submit'])) {
19 |
20 | $this->app->components->client->updateNote(\CMSApplication::$VAR['client_note_id'], \CMSApplication::$VAR['note']);
21 | $this->app->system->page->forcePage('client', 'details&client_id='.$this->app->components->client->getNote(\CMSApplication::$VAR['client_note_id'], 'client_id'));
22 |
23 | } else {
24 |
25 | $this->app->smarty->assign('client_note_details', $this->app->components->client->getNote(\CMSApplication::$VAR['client_note_id']));
26 |
27 | }
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/components/client/note_new.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Client ID supplied."));
14 | $this->app->system->page->forcePage('client', 'search');
15 | exit;
16 | }
17 |
18 | // Insert the client note
19 | if(isset(\CMSApplication::$VAR['submit'])) {
20 |
21 | $this->app->components->client->insertNote(\CMSApplication::$VAR['client_id'], \CMSApplication::$VAR['note']);
22 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Client note created."));
23 | $this->app->system->page->forcePage('client', 'details&client_id='.\CMSApplication::$VAR['client_id']);
24 |
25 | } else {
26 |
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/src/components/company/business_hours.php:
--------------------------------------------------------------------------------
1 | app->components->company->checkOpeningHoursValid($opening_time, $closing_time)) {
20 |
21 | // Update opening and closing Times into the database
22 | $this->app->components->company->updateOpeningHours(\CMSApplication::$VAR['openingTime'], \CMSApplication::$VAR['closingTime']);
23 |
24 | }
25 |
26 | // Assign varibles (for page load)
27 | $this->app->smarty->assign('opening_time', $opening_time );
28 | $this->app->smarty->assign('closing_time', $closing_time );
29 |
30 | // If page is just loaded get the opening and closing times stored in the database
31 | } else {
32 | $this->app->smarty->assign('opening_time', $this->app->components->company->getOpeningHours('opening_time', 'smartytime'));
33 | $this->app->smarty->assign('closing_time', $this->app->components->company->getOpeningHours('closing_time', 'smartytime'));
34 | }
--------------------------------------------------------------------------------
/src/components/company/edit.php:
--------------------------------------------------------------------------------
1 | app->components->company->updateRecord(\CMSApplication::$VAR['qform']);
19 |
20 | // Reload Company options
21 | $this->app->system->page->forcePage('company', 'edit');
22 |
23 | }
24 |
25 | // Build the page
26 | $this->app->smarty->assign('date_formats', $this->app->system->general->getDateFormats());
27 | $this->app->smarty->assign('tax_systems', $this->app->components->company->getTaxSystems() );
28 | $this->app->smarty->assign('vat_tax_codes', $this->app->components->company->getVatTaxCodes(null, true) );
29 | $this->app->smarty->assign('company_details', $this->app->components->company->getRecord() );
30 |
--------------------------------------------------------------------------------
/src/components/core/403.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('qwcrm_version', QWCRM_VERSION);
--------------------------------------------------------------------------------
/src/components/core/blocks/theme_header_block.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('todays_display_date', date('l, j F Y'));
13 |
14 | //Add a welcome message based on time
15 | if(!defined('QWCRM_SETUP')) {
16 | $this->app->smarty->assign('greeting_msg', $this->app->components->coretheme->getGreetingMsg($this->app->user->login_display_name));
17 | } else {
18 | $this->app->smarty->assign('greeting_msg', $this->app->components->coretheme->getGreetingMsg(null));
19 | }
--------------------------------------------------------------------------------
/src/components/core/blocks/theme_header_theme_off_block.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('menu_workorder_is_closed', menu_get_single_workorder_is_closed(\CMSApplication::$VAR['workorder_id']));
14 | }*/
--------------------------------------------------------------------------------
/src/components/core/home.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('creditnote', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an creditnote_id
18 | if(!isset(\CMSApplication::$VAR['creditnote_id']) || !\CMSApplication::$VAR['creditnote_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Creditnote ID supplied."));
20 | $this->app->system->page->forcePage('creditnote', 'search');
21 | }
22 |
23 | // Cancel Credit Note
24 | if(!$this->app->components->creditnote->cancelRecord(\CMSApplication::$VAR['creditnote_id'], \CMSApplication::$VAR['qform']['reason_for_cancelling'])) {
25 |
26 | // Load the creditnote details page with error
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The creditnote failed to be cancelled."));
28 | $this->app->system->page->forcePage('creditnote', 'details&creditnote_id='.\CMSApplication::$VAR['creditnote_id']);
29 |
30 |
31 | } else {
32 |
33 | // Load the creditnote search page with success message
34 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The creditnote has been cancelled successfully."));
35 | $this->app->system->page->forcePage('creditnote', 'search');
36 |
37 | }
--------------------------------------------------------------------------------
/src/components/creditnote/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('creditnote', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an creditnote_id
18 | if(!isset(\CMSApplication::$VAR['creditnote_id']) || !\CMSApplication::$VAR['creditnote_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Credit Note ID supplied."));
20 | $this->app->system->page->forcePage('creditnote', 'search');
21 | }
22 |
23 | // Delete Invoice
24 | if(!$this->app->components->creditnote->deleteRecord(\CMSApplication::$VAR['creditnote_id'])) {
25 |
26 | // Load the creditnote record on the search page with the error
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The credit note failed to be deleted."));
28 | //$this->app->system->page->forcePage('creditnote', 'details&creditnote_id='.\CMSApplication::$VAR['creditnote_id']);
29 | $this->app->system->page->forcePage('creditnote', 'search&search_category=creditnote_id&search_term='.\CMSApplication::$VAR['creditnote_id']);
30 |
31 | } else {
32 |
33 | // Load the creditnote search page with success message
34 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The credit note has been deleted successfully."));
35 | $this->app->system->page->forcePage('creditnote', 'search');
36 |
37 | }
--------------------------------------------------------------------------------
/src/components/cronjob/details.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Cronjob ID supplied."));
14 | $this->app->system->page->forcePage('cronjob', 'search');
15 | }
16 |
17 | // Build the page
18 | $this->app->smarty->assign('cronjob_details', $this->app->components->cronjob->getRecord(\CMSApplication::$VAR['cronjob_id']));
--------------------------------------------------------------------------------
/src/components/cronjob/edit.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Cronjob ID supplied."));
14 | $this->app->system->page->forcePage('cronjob', 'overview');
15 | }
16 |
17 | // If details submitted run update values, if not set load edit.tpl and populate values
18 | if(isset(\CMSApplication::$VAR['submit'])) {
19 |
20 | // Update the cron in the database
21 | $this->app->components->cronjob->updateRecord(\CMSApplication::$VAR['qform']);
22 |
23 | // Load details page
24 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Cronjob updated successfully."));
25 | $this->app->system->page->forcePage('cronjob', 'details&cronjob_id='.\CMSApplication::$VAR['qform']['cronjob_id']);
26 |
27 | } else {
28 |
29 | // Build the page
30 | $this->app->smarty->assign('cronjob_details', $this->app->components->cronjob->getRecord(\CMSApplication::$VAR['cronjob_id']));
31 |
32 | }
--------------------------------------------------------------------------------
/src/components/cronjob/overview.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('cronjob_system_details', $this->app->components->cronjob->getSystem());
13 | $this->app->smarty->assign('display_cronjobs', $this->app->components->cronjob->getRecords('cronjob_id', 'ASC'));
--------------------------------------------------------------------------------
/src/components/cronjob/run.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('cronjob', 'details') && !$this->app->system->security->checkPageAccessedViaQwcrm('cronjob', 'overview')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a cronjob_id
18 | if(!isset(\CMSApplication::$VAR['cronjob_id']) || !\CMSApplication::$VAR['cronjob_id']) {
19 | $this->app->system->page->forcePage('cronjob', 'overview');
20 | }
21 |
22 | // Run the cronjob
23 | $this->app->components->cronjob->runCronjob(\CMSApplication::$VAR['cronjob_id'], false);
24 |
25 | // Return to the page this cron was run from
26 | $this->app->system->page->forcePage($_SERVER['HTTP_REFERER']);
--------------------------------------------------------------------------------
/src/components/expense/cancel.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('expense', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an expense_id
18 | if(!isset(\CMSApplication::$VAR['expense_id']) || !\CMSApplication::$VAR['expense_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Expense ID supplied."));
20 | $this->app->system->page->forcePage('expense', 'search');
21 | }
22 |
23 | // Cancel the expense
24 | $this->app->components->expense->cancelRecord(\CMSApplication::$VAR['expense_id']);
25 |
26 | // Load the expense search page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Expense cancelled successfully."));
28 | $this->app->system->page->forcePage('expense', 'search');
--------------------------------------------------------------------------------
/src/components/expense/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('expense', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an expense_id
18 | if(!isset(\CMSApplication::$VAR['expense_id']) || !\CMSApplication::$VAR['expense_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Expense ID supplied."));
20 | $this->app->system->page->forcePage('expense', 'search');
21 | }
22 |
23 | // Delete the expense
24 | $this->app->components->expense->deleteRecord(\CMSApplication::$VAR['expense_id']);
25 |
26 | // Load the expense search page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Expense deleted successfully."));
28 | $this->app->system->page->forcePage('expense', 'search');
--------------------------------------------------------------------------------
/src/components/expense/new.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Supplier ID supplied."));
14 | $this->app->system->page->forcePage('expense', 'search');
15 | }*/
16 |
17 | // This is a workaround whilst supplier IDs are not enforced
18 | \CMSApplication::$VAR['supplier_id'] = null;
19 |
20 | // Create the expense record and return the new expense_id
21 | \CMSApplication::$VAR['expense_id'] = $this->app->components->expense->insertRecord(\CMSApplication::$VAR['supplier_id']);
22 |
23 | // Load the newly created invoice edit page
24 | $this->app->system->page->forcePage('expense', 'edit&expense_id='.\CMSApplication::$VAR['expense_id']);
--------------------------------------------------------------------------------
/src/components/expense/status.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Expense ID supplied."));
14 | $this->app->system->page->forcePage('expense', 'search');
15 | }
16 |
17 | // Update Expense Status
18 | if(isset(\CMSApplication::$VAR['change_status'])){
19 | $this->app->components->expense->updateStatus(\CMSApplication::$VAR['expense_id'], \CMSApplication::$VAR['assign_status']);
20 | $this->app->system->page->forcePage('expense', 'status&expense_id='.\CMSApplication::$VAR['expense_id']);
21 | }
22 |
23 | // Build the page with the current status from the database
24 | $this->app->smarty->assign('allowed_to_change_status', false ); // I am not sure this is needed
25 | $this->app->smarty->assign('expense_status', $this->app->components->expense->getRecord(\CMSApplication::$VAR['expense_id'], 'status') );
26 | $this->app->smarty->assign('expense_statuses', $this->app->components->expense->getStatuses() );
27 | $this->app->smarty->assign('allowed_to_cancel', $this->app->components->expense->checkRecordAllowsCancel(\CMSApplication::$VAR['expense_id']) );
28 | $this->app->smarty->assign('allowed_to_delete', $this->app->components->expense->checkRecordAllowsDelete(\CMSApplication::$VAR['expense_id']) );
29 | $this->app->smarty->assign('expense_selectable_statuses', $this->app->components->expense->getStatuses(true) );
--------------------------------------------------------------------------------
/src/components/help/about.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('invoice', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an invoice_id
18 | if(!isset(\CMSApplication::$VAR['invoice_id']) || !\CMSApplication::$VAR['invoice_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Invoice ID supplied."));
20 | $this->app->system->page->forcePage('invoice', 'search');
21 | }
22 |
23 | // Cancel Invoice --- add reasso9n for cancel here
24 | if(!$this->app->components->invoice->cancelRecord(\CMSApplication::$VAR['invoice_id'], \CMSApplication::$VAR['qform']['reason_for_cancelling'])) {
25 |
26 | // Load the invoice details page with error
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The invoice failed to be cancelled."));
28 | $this->app->system->page->forcePage('invoice', 'details&invoice_id='.\CMSApplication::$VAR['invoice_id']);
29 |
30 |
31 | } else {
32 |
33 | // Load the invoice search page with success message
34 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The invoice has been cancelled successfully."));
35 | $this->app->system->page->forcePage('invoice', 'search');
36 |
37 | }
--------------------------------------------------------------------------------
/src/components/invoice/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('invoice', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an invoice_id
18 | if(!isset(\CMSApplication::$VAR['invoice_id']) || !\CMSApplication::$VAR['invoice_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Invoice ID supplied."));
20 | $this->app->system->page->forcePage('invoice', 'search');
21 | }
22 |
23 | // Delete Invoice
24 | if(!$this->app->components->invoice->deleteRecord(\CMSApplication::$VAR['invoice_id'])) {
25 |
26 | // Load the invoice record on the search page with the error
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The invoice failed to be deleted."));
28 | //$this->app->system->page->forcePage('invoice', 'details&invoice_id='.\CMSApplication::$VAR['invoice_id']);
29 | $this->app->system->page->forcePage('invoice', 'search&search_category=invoice_id&search_term='.\CMSApplication::$VAR['invoice_id']);
30 |
31 | } else {
32 |
33 | // Load the invoice search page with success message
34 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The invoice has been deleted successfully."));
35 | $this->app->system->page->forcePage('invoice', 'search');
36 |
37 | }
--------------------------------------------------------------------------------
/src/components/invoice/overview.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('overview_invoices_pending', $this->app->components->invoice->getRecords('invoice_id', 'DESC', 25, false, null, null, null, 'pending') );
13 | $this->app->smarty->assign('overview_invoices_unpaid', $this->app->components->invoice->getRecords('invoice_id', 'DESC', 25, false, null, null, null, 'unpaid') );
14 | $this->app->smarty->assign('overview_invoices_partially_paid', $this->app->components->invoice->getRecords('invoice_id', 'DESC', 25, false, null, null, null, 'partially_paid') );
15 | $this->app->smarty->assign('overview_invoices_in_dispute', $this->app->components->invoice->getRecords('invoice_id', 'DESC', 25, false, null, null, null, 'in_dispute') );
16 | $this->app->smarty->assign('overview_invoices_overdue', $this->app->components->invoice->getRecords('invoice_id', 'DESC', 25, false, null, null, null, 'overdue') );
17 | $this->app->smarty->assign('overview_invoices_collections', $this->app->components->invoice->getRecords('invoice_id', 'DESC', 25, false, null, null, null, 'collections') );
18 |
19 | $this->app->smarty->assign('overview_invoice_stats', $this->app->components->report->getInvoicesStats('current'));
20 | $this->app->smarty->assign('invoice_statuses', $this->app->components->invoice->getStatuses());
--------------------------------------------------------------------------------
/src/components/invoice/prefill_items.php:
--------------------------------------------------------------------------------
1 | app->components->invoice->exportPrefillItemsCsv();
17 | die();
18 | }
19 |
20 | // if something submitted
21 | if(isset(\CMSApplication::$VAR['submit'])) {
22 |
23 | // If the export of the invoice prefill items has been requested
24 | if(\CMSApplication::$VAR['submit'] == 'export') {
25 | $this->app->components->invoice->exportPrefillItemsCsv();
26 | die();
27 | }
28 |
29 | // New invoice prefill item
30 | if(\CMSApplication::$VAR['submit'] == 'submit') {
31 | $this->app->components->invoice->insertPrefillItems(\CMSApplication::$VAR['qform']['prefill_items']);
32 | }
33 |
34 | // Upload CSV file of prefill items
35 | if(\CMSApplication::$VAR['submit'] == 'import') {
36 | $this->app->components->invoice->uploadPrefillItemsCsv(\CMSApplication::$VAR['empty_prefill_items_table']);
37 | }
38 |
39 | }
40 |
41 | // Build Page
42 | $this->app->smarty->assign('invoice_prefill_items_json', json_encode($this->app->components->invoice->getPrefillItems()));
43 |
--------------------------------------------------------------------------------
/src/components/otherincome/cancel.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('otherincome', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a otherincome_id
18 | if(!isset(\CMSApplication::$VAR['otherincome_id']) || !\CMSApplication::$VAR['otherincome_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Otherincome ID supplied."));
20 | $this->app->system->page->forcePage('otherincome', 'search');
21 | }
22 |
23 | // Cancel the otherincome call
24 | $this->app->components->otherincome->cancelRecord(\CMSApplication::$VAR['otherincome_id']);
25 |
26 | // Load the otherincome search page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Otherincome cancelled successfully."));
28 | $this->app->system->page->forcePage('otherincome', 'search');
29 |
--------------------------------------------------------------------------------
/src/components/otherincome/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('otherincome', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a otherincome_id
18 | if(!isset(\CMSApplication::$VAR['otherincome_id']) || !\CMSApplication::$VAR['otherincome_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Otherincome ID supplied."));
20 | $this->app->system->page->forcePage('otherincome', 'search');
21 | }
22 |
23 | // Delete the otherincome function call
24 | $this->app->components->otherincome->deleteRecord(\CMSApplication::$VAR['otherincome_id']);
25 |
26 | // Load the otherincome search page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Otherincome deleted successfully."));
28 | $this->app->system->page->forcePage('otherincome', 'search');
29 |
--------------------------------------------------------------------------------
/src/components/otherincome/new.php:
--------------------------------------------------------------------------------
1 | app->components->otherincome->insertRecord();
13 |
14 | // Load the newly created invoice edit page
15 | $this->app->system->page->forcePage('otherincome', 'edit&otherincome_id='.\CMSApplication::$VAR['otherincome_id']);
--------------------------------------------------------------------------------
/src/components/otherincome/status.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Voucher ID supplied."));
14 | $this->app->system->page->forcePage('otherincome', 'search');
15 | }
16 |
17 | // Update Otherincome Status
18 | if(isset(\CMSApplication::$VAR['change_status'])){
19 | $this->app->components->otherincome->updateStatus(\CMSApplication::$VAR['otherincome_id'], \CMSApplication::$VAR['assign_status']);
20 | $this->app->system->page->forcePage('otherincome', 'status&otherincome_id='.\CMSApplication::$VAR['otherincome_id']);
21 | }
22 |
23 | // Build the page with the current status from the database
24 | $this->app->smarty->assign('allowed_to_change_status', false );
25 | $this->app->smarty->assign('otherincome_status', $this->app->components->otherincome->getRecord(\CMSApplication::$VAR['otherincome_id'], 'status') );
26 | $this->app->smarty->assign('otherincome_statuses', $this->app->components->otherincome->getStatuses() );
27 | $this->app->smarty->assign('allowed_to_cancel', $this->app->components->otherincome->checkRecordAllowsCancel(\CMSApplication::$VAR['otherincome_id']) );
28 | $this->app->smarty->assign('allowed_to_delete', $this->app->components->otherincome->checkRecordAllowsDelete(\CMSApplication::$VAR['otherincome_id']) );
29 | $this->app->smarty->assign('otherincome_selectable_statuses', $this->app->components->otherincome->getStatuses(true));
--------------------------------------------------------------------------------
/src/components/payment/cancel.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('payment', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an payment_id
18 | if(!isset(\CMSApplication::$VAR['payment_id']) || !\CMSApplication::$VAR['payment_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Payment ID supplied."));
20 | $this->app->system->page->forcePage('payment', 'search');
21 | }
22 |
23 | // Check if payment can be cancelled
24 | if(!$this->app->components->payment->checkRecordAllowsCancel(\CMSApplication::$VAR['payment_id'])) {
25 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("You cannot cancel this payment because its status does not allow it."));
26 | $this->app->system->page->forcePage('payment', 'details&payment_id='.\CMSApplication::$VAR['payment_id']);
27 | }
28 |
29 | // Build the Payment Environment
30 | $this->app->components->payment->buildPaymentEnvironment('cancel');
31 |
32 | // Process the payment
33 | $this->app->components->payment->processPayment();
--------------------------------------------------------------------------------
/src/components/payment/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('payment', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an payment_id
18 | if(!isset(\CMSApplication::$VAR['payment_id']) || !\CMSApplication::$VAR['payment_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Payment ID supplied."));
20 | $this->app->system->page->forcePage('payment', 'search');
21 | }
22 |
23 | // Check if payment can be deleted
24 | if(!$this->app->components->payment->checkRecordAllowsDelete(\CMSApplication::$VAR['payment_id'])) {
25 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("You cannot delete this payment because its status does not allow it."));
26 | $this->app->system->page->forcePage('payment', 'details&payment_id='.\CMSApplication::$VAR['payment_id']);
27 | }
28 |
29 | // Build the Payment Environment
30 | $this->app->components->payment->buildPaymentEnvironment('delete');
31 |
32 | // Process the payment
33 | $this->app->components->payment->processPayment();
34 |
--------------------------------------------------------------------------------
/src/components/payment/details.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Payment ID supplied."));
14 | $this->app->system->page->forcePage('payment', 'search');
15 | }
16 |
17 | $payment_details = $this->app->components->payment->getRecord(\CMSApplication::$VAR['payment_id']);
18 |
19 | // Build the page
20 | $this->app->smarty->assign('employee_display_name', $this->app->components->user->getRecord($payment_details['employee_id'], 'display_name'));
21 | $this->app->smarty->assign('client_display_name', $this->app->components->client->getRecord($payment_details['client_id'], 'display_name'));
22 | $this->app->smarty->assign('supplier_display_name', $this->app->components->supplier->getRecord($payment_details['supplier_id'], 'display_name'));
23 | $this->app->smarty->assign('payment_types', $this->app->components->payment->getTypes());
24 | $this->app->smarty->assign('payment_methods', $this->app->components->payment->getMethods());
25 | $this->app->smarty->assign('payment_directions', $this->app->components->payment->getDirections());
26 | $this->app->smarty->assign('payment_statuses', $this->app->components->payment->getStatuses());
27 | $this->app->smarty->assign('payment_creditnote_action_types', $this->app->components->payment->getCreditnoteActionTypes());
28 | $this->app->smarty->assign('payment_details', $payment_details);
--------------------------------------------------------------------------------
/src/components/payment/options.php:
--------------------------------------------------------------------------------
1 | app->components->payment->updateMethodsStatuses(\CMSApplication::$VAR['qform']['payment_methods']);
24 |
25 | // Update Payment details
26 | $this->app->components->payment->updateOptions(\CMSApplication::$VAR['qform']);
27 |
28 | // Assign success message
29 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Payment Options Updated.") );
30 |
31 | // Log activity
32 | $this->app->system->general->writeRecordToActivityLog(_gettext("Payment Options Updated."));
33 |
34 | }
35 |
36 | // Build the page
37 | $this->app->smarty->assign('payment_methods', $this->app->components->payment->getMethods() );
38 | $this->app->smarty->assign('payment_options', $this->app->components->payment->getOptions() );
39 |
--------------------------------------------------------------------------------
/src/components/payment/status.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Payment ID supplied."));
14 | $this->app->system->page->forcePage('payment', 'search');
15 | }
16 |
17 | // Update Payment Status
18 | if(isset(\CMSApplication::$VAR['change_status'])){
19 | $this->app->components->payment->updateStatus(\CMSApplication::$VAR['payment_id'], \CMSApplication::$VAR['assign_status']);
20 | $this->app->system->page->forcePage('payment', 'status&payment_id='.\CMSApplication::$VAR['payment_id']);
21 | }
22 |
23 | // Build the page with the current status from the database
24 | $this->app->smarty->assign('allowed_to_change_status', $this->app->components->payment->checkRecordAllowsManualStatusChange(\CMSApplication::$VAR['payment_id']) );
25 | $this->app->smarty->assign('payment_status', $this->app->components->payment->getRecord(\CMSApplication::$VAR['payment_id'], 'status') );
26 | $this->app->smarty->assign('payment_statuses', $this->app->components->payment->getStatuses() );
27 | $this->app->smarty->assign('allowed_to_cancel', $this->app->components->payment->checkRecordAllowsCancel(\CMSApplication::$VAR['payment_id']) );
28 | $this->app->smarty->assign('allowed_to_delete', $this->app->components->payment->checkRecordAllowsDelete(\CMSApplication::$VAR['payment_id']) );
29 | $this->app->smarty->assign('payment_selectable_statuses', $this->app->components->payment->getStatuses(true) );
--------------------------------------------------------------------------------
/src/components/schedule/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm()) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a schedule_id
18 | if(!isset(\CMSApplication::$VAR['schedule_id']) || !\CMSApplication::$VAR['schedule_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Schedule ID supplied."));
20 | $this->app->system->page->forcePage('schedule', 'search');
21 | }
22 |
23 | // Get workorder_id before deleting the record
24 | \CMSApplication::$VAR['workorder_id'] = $this->app->components->schedule->getRecord(\CMSApplication::$VAR['schedule_id'], 'workorder_id');
25 |
26 | // Delete the schedule
27 | $this->app->components->schedule->deleteRecord(\CMSApplication::$VAR['schedule_id']);
28 |
29 | // load schedule search page
30 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Schedule record has been deleted."));
31 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.\CMSApplication::$VAR['workorder_id']);
32 |
--------------------------------------------------------------------------------
/src/components/schedule/details.php:
--------------------------------------------------------------------------------
1 | app->smarty->assign('client_details', $this->app->components->client->getRecord($this->app->components->schedule->getRecord(\CMSApplication::$VAR['schedule_id'], 'client_id')));
13 | $this->app->smarty->assign('schedule_details', $this->app->components->schedule->getRecord(\CMSApplication::$VAR['schedule_id']));
14 | $this->app->smarty->assign('employee_display_name', $this->app->components->user->getRecord($this->app->components->schedule->getRecord(\CMSApplication::$VAR['schedule_id'], 'employee_id'), 'display_name') );
--------------------------------------------------------------------------------
/src/components/setup/choice.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('setup', 'choice', 'setup')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Define the setup type for smarty - currently only used for 'upgrade'
18 | $this->app->smarty->assign('setup_type', \CMSApplication::$VAR['setup_type'] ?? null);
19 |
20 | // Create a Setup Object
21 | $qsetup = new Setup(\CMSApplication::$VAR);
22 |
23 | // Get Compatibility Results
24 | $this->app->smarty->assign('compatibility_results', $qsetup->checkServerEnviromentCompatibility());
--------------------------------------------------------------------------------
/src/components/supplier/cancel.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('supplier', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a supplier_id
18 | if(!isset(\CMSApplication::$VAR['supplier_id']) || !\CMSApplication::$VAR['supplier_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Supplier ID supplied."));
20 | $this->app->system->page->forcePage('supplier', 'search');
21 | }
22 |
23 | // Cancel the supplier function call
24 | $this->app->components->supplier->cancelRecord(\CMSApplication::$VAR['supplier_id']);
25 |
26 | // Load the supplier search page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Supplier cancelled successfully."));
28 | $this->app->system->page->forcePage('supplier', 'search');
29 |
--------------------------------------------------------------------------------
/src/components/supplier/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('supplier', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a supplier_id
18 | if(!isset(\CMSApplication::$VAR['supplier_id']) || !\CMSApplication::$VAR['supplier_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Supplier ID supplied."));
20 | $this->app->system->page->forcePage('supplier', 'search');
21 | }
22 |
23 | // Delete the supplier function call
24 | $this->app->components->supplier->deleteRecord(\CMSApplication::$VAR['supplier_id']);
25 |
26 | // Load the supplier search page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Supplier deleted successfully."));
28 | $this->app->system->page->forcePage('supplier', 'search');
29 |
--------------------------------------------------------------------------------
/src/components/supplier/details.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Supplier ID supplied."));
14 | $this->app->system->page->forcePage('supplier', 'search');
15 | }
16 |
17 | // Build the page
18 | $this->app->smarty->assign('supplier_statuses', $this->app->components->supplier->getStatuses() );
19 | $this->app->smarty->assign('supplier_types', $this->app->components->supplier->getTypes());
20 | $this->app->smarty->assign('supplier_details', $this->app->components->supplier->getRecord(\CMSApplication::$VAR['supplier_id']));
21 | $this->app->smarty->assign('allowed_to_create_creditnote', $this->app->components->creditnote->checkRecordCanBeCreated(null, null, \CMSApplication::$VAR['supplier_id'], null));
22 |
23 | $this->app->smarty->assign('creditnote_types', $this->app->components->creditnote->getTypes());
24 | $this->app->smarty->assign('creditnote_statuses', $this->app->components->creditnote->getStatuses());
25 | $this->app->smarty->assign('display_creditnotes', $this->app->components->creditnote->getRecords('creditnote_id', 'DESC', 25, false, null, null, null, null, null, null, \CMSApplication::$VAR['supplier_id']));
--------------------------------------------------------------------------------
/src/components/supplier/new.php:
--------------------------------------------------------------------------------
1 | app->components->supplier->insertRecord(\CMSApplication::$VAR['qform']);
16 |
17 | if (isset(\CMSApplication::$VAR['submitandnew'])) {
18 |
19 | // load the new supplier page
20 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Supplier added successfully.").' '._gettext("ID").': '.\CMSApplication::$VAR['supplier_id']);
21 | $this->app->system->page->forcePage('supplier', 'new');
22 |
23 | } else {
24 |
25 | // load the supplier details page
26 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Supplier added successfully.").' '._gettext("ID").': '.\CMSApplication::$VAR['supplier_id']);
27 | $this->app->system->page->forcePage('supplier', 'details&supplier_id='.\CMSApplication::$VAR['supplier_id']);
28 |
29 | }
30 |
31 | }
32 |
33 | // Build the page
34 | $this->app->smarty->assign('supplier_types', $this->app->components->supplier->getTypes());
--------------------------------------------------------------------------------
/src/components/supplier/status.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Supplier ID supplied."));
14 | $this->app->system->page->forcePage('supplier', 'search');
15 | }
16 |
17 | // Update Supplier Status
18 | if(isset(\CMSApplication::$VAR['change_status'])){
19 | $this->app->system->general->updateStatus(\CMSApplication::$VAR['supplier_id'], \CMSApplication::$VAR['assign_status']);
20 | $this->app->system->page->forcePage('supplier', 'status&supplier_id='.\CMSApplication::$VAR['supplier_id']);
21 | }
22 |
23 | // Build the page with the current status from the database
24 | $this->app->smarty->assign('allowed_to_change_status', false );
25 | $this->app->smarty->assign('supplier_status', $this->app->components->supplier->getRecord(\CMSApplication::$VAR['supplier_id'], 'status') );
26 | $this->app->smarty->assign('supplier_statuses', $this->app->components->supplier->getStatuses() );
27 | $this->app->smarty->assign('allowed_to_cancel', false );
28 | $this->app->smarty->assign('allowed_to_delete', $this->app->components->supplier->checkRecordAllowsDelete(\CMSApplication::$VAR['supplier_id']) );
29 | $this->app->smarty->assign('supplier_selectable_statuses', $this->app->components->supplier->getStatuses(true) );
--------------------------------------------------------------------------------
/src/components/user/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm()) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an user_id
18 | if(!isset(\CMSApplication::$VAR['user_id']) || !\CMSApplication::$VAR['user_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No User ID supplied."));
20 | $this->app->system->page->forcePage('user', 'search');
21 | }
22 |
23 | // Run the delete function
24 | if(!$this->app->components->user->deleteRecord(\CMSApplication::$VAR['user_id'])) {
25 |
26 | // load the user details page
27 | $this->app->system->page->forcePage('user', 'details&user_id='.\CMSApplication::$VAR['user_id']);
28 |
29 | } else {
30 |
31 | // load the user search page
32 | $this->app->system->variables->systemMessagesWrite('success', _gettext("User record deleted."));
33 | $this->app->system->page->forcePage('user', 'search');
34 |
35 | }
--------------------------------------------------------------------------------
/src/components/user/details.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No User ID supplied."));
17 | $this->app->system->page->forcePage('user', 'search');
18 | }
19 |
20 | // Build the page
21 |
22 | $this->app->smarty->assign('user_details', $this->app->components->user->getRecord(\CMSApplication::$VAR['user_id']) );
23 | $this->app->smarty->assign('client_display_name', $this->app->components->client->getRecord($this->app->components->user->getRecord(\CMSApplication::$VAR['user_id'], 'client_id'), 'client_display_name') );
24 | $this->app->smarty->assign('usergroups', $this->app->components->user->getUsergroups() );
25 | $this->app->smarty->assign('user_workorders', $this->app->components->workorder->getRecords('workorder_id', 'DESC', 25, false, \CMSApplication::$VAR['page_no'], null, null, 'open', \CMSApplication::$VAR['user_id']));
26 | $this->app->smarty->assign('user_locations', $this->app->components->user->getLocations());
--------------------------------------------------------------------------------
/src/components/voucher/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('voucher', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have an voucher_id
18 | if(!isset(\CMSApplication::$VAR['voucher_id']) || !\CMSApplication::$VAR['voucher_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Voucher ID supplied."));
20 | $this->app->system->page->forcePage('voucher', 'search');
21 | }
22 |
23 | // Get invoice_id before deleting
24 | $invoice_id = $this->app->components->voucher->getRecord(\CMSApplication::$VAR['voucher_id'], 'invoice_id');
25 |
26 | // Delete the Voucher
27 | if(!$this->app->components->voucher->deleteRecord(\CMSApplication::$VAR['voucher_id'])) {
28 |
29 | // Load the relevant invoice page with fail message
30 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("Voucher failed to be deleted."));
31 | $this->app->system->page->forcePage('invoice', 'details&invoice_id='.$invoice_id);
32 |
33 | } else {
34 |
35 | // Recalculate the invoice totals and update them
36 | $this->app->components->invoice->recalculateTotals($invoice_id);
37 |
38 | // Load the relevant invoice page with success message
39 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Voucher deleted successfully."));
40 | $this->app->system->page->forcePage('invoice', 'details&invoice_id='.$invoice_id);
41 | }
--------------------------------------------------------------------------------
/src/components/voucher/details.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Voucher ID supplied."));
14 | $this->app->system->page->forcePage('voucher', 'search');
15 | }
16 |
17 | $voucher_details = $this->app->components->voucher->getRecord(\CMSApplication::$VAR['voucher_id']);
18 |
19 | // if the voucher is deleted return to the search page
20 | if($voucher_details['status'] === 'deleted') {
21 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("Voucher").' '.\CMSApplication::$VAR['voucher_id'].' '._gettext("has been deleted and can no longer be accessed."));
22 | $this->app->system->page->forcePage('voucher', 'search');
23 | }
24 |
25 | // Build the page
26 | $this->app->smarty->assign('client_details', $this->app->components->client->getRecord($voucher_details['client_id']) );
27 | $this->app->smarty->assign('employee_display_name', $this->app->components->user->getRecord($voucher_details['employee_id'], 'display_name') );
28 | $this->app->smarty->assign('voucher_statuses', $this->app->components->voucher->getStatuses() );
29 | $this->app->smarty->assign('voucher_types', $this->app->components->voucher->getTypes() );
30 | $this->app->smarty->assign('voucher_details', $voucher_details );
--------------------------------------------------------------------------------
/src/components/voucher/status.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Voucher ID supplied."));
14 | $this->app->system->page->forcePage('voucher', 'search');
15 | }
16 |
17 | // Update Voucher Status
18 | if(isset(\CMSApplication::$VAR['change_status'])){
19 | $this->app->components->voucher->updateStatus(\CMSApplication::$VAR['voucher_id'], \CMSApplication::$VAR['assign_status']);
20 | $this->app->system->page->forcePage('voucher', 'status&voucher_id='.\CMSApplication::$VAR['voucher_id']);
21 | }
22 |
23 | // Build the page with the current status from the database
24 | $this->app->smarty->assign('allowed_to_change_status', $this->app->components->voucher->checkRecordAllowsManualStatusChange(\CMSApplication::$VAR['voucher_id']) );
25 | $this->app->smarty->assign('voucher_status', $this->app->components->voucher->getRecord(\CMSApplication::$VAR['voucher_id'], 'status') );
26 | $this->app->smarty->assign('voucher_statuses', $this->app->components->voucher->getStatuses() );
27 | $this->app->smarty->assign('allowed_to_delete', $this->app->components->voucher->checkRecordAllowsDelete(\CMSApplication::$VAR['voucher_id']) );
28 | $this->app->smarty->assign('voucher_selectable_statuses', $this->app->components->voucher->getStatuses(true) );
--------------------------------------------------------------------------------
/src/components/workorder/autosuggest_scope.php:
--------------------------------------------------------------------------------
1 | 0) {
14 |
15 | // BuildPage will only hold the html for this scope table
16 | $pagePayload .= $this->app->components->workorder->getScopeSuggestions(\CMSApplication::$VAR['posted_scope_string']);
17 |
18 | }
19 |
20 | // This page should be treated as RAW HTML
21 | \CMSApplication::$VAR['themeVar'] = 'rawHtml';
22 |
23 | // Skip page logging
24 | if(!defined('SKIP_LOGGING')) {
25 | define('SKIP_LOGGING', true);
26 | }
--------------------------------------------------------------------------------
/src/components/workorder/delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm('workorder', 'status')) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a workorder_id
18 | if(!isset(\CMSApplication::$VAR['workorder_id']) || !\CMSApplication::$VAR['workorder_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Workorder ID supplied."));
20 | $this->app->system->page->forcePage('workorder', 'search');
21 | }
22 |
23 | // Delete the Workorder
24 | if(!$this->app->components->workorder->deleteRecord(\CMSApplication::$VAR['workorder_id'])) {
25 |
26 | // load the staus page
27 | $this->app->system->page->forcePage('workorder', 'status', 'workorder_id='.\CMSApplication::$VAR['workorder_id']);
28 |
29 | } else {
30 |
31 |
32 | // load the workorder search page
33 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Work Order has been deleted."));
34 | $this->app->system->page->forcePage('workorder', 'search');
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/components/workorder/details_edit_comment.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Workorder ID supplied."));
14 | $this->app->system->page->forcePage('workorder', 'search');
15 | }
16 |
17 | // Check if we can edit the workorder comment
18 | if($this->app->components->workorder->getRecord(\CMSApplication::$VAR['workorder_id'], 'is_closed')) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("Cannot edit the comment of a closed Work Order."));
20 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.\CMSApplication::$VAR['workorder_id']);
21 | }
22 |
23 | // If updated comment are submitted
24 | if(isset(\CMSApplication::$VAR['submit'])) {
25 |
26 | // update the workorder comment in the database
27 | $this->app->components->workorder->updateComment(\CMSApplication::$VAR['workorder_id'], \CMSApplication::$VAR['comment']);
28 |
29 | // load the workorder details page
30 | $this->app->system->variables->systemMessagesWrite('success', _gettext("Comment has been updated."));
31 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.\CMSApplication::$VAR['workorder_id']);
32 |
33 | }
34 |
35 | // Build the page
36 | $this->app->smarty->assign('comment', $this->app->components->workorder->getRecord(\CMSApplication::$VAR['workorder_id'], 'comment'));
--------------------------------------------------------------------------------
/src/components/workorder/new.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Client ID supplied."));
17 | $this->app->system->page->forcePage('client', 'search');
18 | }
19 |
20 | // If a workorder is submitted
21 | if(isset(\CMSApplication::$VAR['submit'])){
22 |
23 | // insert the submitted workorder and return it's id
24 | \CMSApplication::$VAR['workorder_id'] = $this->app->components->workorder->insertRecord(\CMSApplication::$VAR['client_id'], \CMSApplication::$VAR['scope'], \CMSApplication::$VAR['description'], \CMSApplication::$VAR['comment']);
25 |
26 | // If workorder is to be assigned to an employee
27 | if(\CMSApplication::$VAR['assign_to_employee'] === '1') {
28 | $this->app->components->workorder->assignToEmployee(\CMSApplication::$VAR['workorder_id'], $this->app->user->login_user_id);
29 | }
30 |
31 | // load the workorder details page
32 | $this->app->system->variables->systemMessagesWrite('success', _gettext("New Work Order created."));
33 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.\CMSApplication::$VAR['workorder_id']);
34 |
35 | }
36 |
37 | // Build the page
38 | $this->app->smarty->assign('client_display_name', $this->app->components->client->getRecord(\CMSApplication::$VAR['client_id'], 'display_name'));
--------------------------------------------------------------------------------
/src/components/workorder/note_delete.php:
--------------------------------------------------------------------------------
1 | app->system->security->checkPageAccessedViaQwcrm()) {
13 | header('HTTP/1.1 403 Forbidden');
14 | die(_gettext("No Direct Access Allowed."));
15 | }
16 |
17 | // Check if we have a workorder_note_id
18 | if(!isset(\CMSApplication::$VAR['workorder_note_id']) || !\CMSApplication::$VAR['workorder_note_id']) {
19 | $this->app->system->variables->systemMessagesWrite('danger', _gettext("No Work Order Note ID supplied."));
20 | $this->app->system->page->forcePage('workorder', 'search');
21 | }
22 |
23 | // Get the workorder_id before we delete the record
24 | $workorder_id = $this->app->components->workorder->getNote(\CMSApplication::$VAR['workorder_note_id'], 'workorder_id');
25 |
26 | // Delete the record
27 | $this->app->components->workorder->deleteNote(\CMSApplication::$VAR['workorder_note_id']);
28 |
29 | // Reload the workorder details page
30 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The note has been deleted."));
31 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.$workorder_id);
--------------------------------------------------------------------------------
/src/components/workorder/note_edit.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Work Order Note ID supplied."));
14 | $this->app->system->page->forcePage('workorder', 'search');
15 | }
16 |
17 | // Get teh work order note details
18 | $workorder_note_details = $this->app->components->workorder->getNote(\CMSApplication::$VAR['workorder_note_id']);
19 |
20 | // If record submitted for updating
21 | if(isset(\CMSApplication::$VAR['submit'])) {
22 |
23 | // update the workorder note
24 | $this->app->components->workorder->updateNote(\CMSApplication::$VAR['workorder_note_id'], \CMSApplication::$VAR['note']);
25 |
26 | // load the workorder details page
27 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The note has been updated."));
28 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.$workorder_note_details['workorder_id']);
29 |
30 | }
31 |
32 | // Build the page
33 | $this->app->smarty->assign('workorder_note_details', $workorder_note_details);
34 |
--------------------------------------------------------------------------------
/src/components/workorder/note_new.php:
--------------------------------------------------------------------------------
1 | app->system->variables->systemMessagesWrite('danger', _gettext("No Workorder ID supplied."));
14 | $this->app->system->page->forcePage('workorder', 'search');
15 | }
16 |
17 | // If a note is submitted
18 | if(isset(\CMSApplication::$VAR['submit'])){
19 |
20 | // insert the note into the database
21 | $this->app->components->workorder->insertNote(\CMSApplication::$VAR['workorder_id'], \CMSApplication::$VAR['workorder_note']);
22 |
23 | // load the workorder details page
24 | $this->app->system->variables->systemMessagesWrite('success', _gettext("The note has been inserted."));
25 | $this->app->system->page->forcePage('workorder', 'details&workorder_id='.\CMSApplication::$VAR['workorder_id']);
26 |
27 | }
--------------------------------------------------------------------------------
/src/cron.php:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | getTemplateDir() : $smarty->template_dir;
25 | $path_param = isset($params['path']) ? $params['path'] : '';
26 | $domain = isset($params['domain']) ? $params['domain'] : 'messages';
27 | $stack_operation = isset($params['stack']) ? $params['stack'] : 'push';
28 |
29 | foreach ((array)$template_dirs as $template_dir) {
30 | $path = $template_dir . $path_param;
31 | if (is_dir($path)) {
32 | break;
33 | }
34 | }
35 |
36 | if (!$path && $stack_operation != 'pop') {
37 | trigger_error("Directory for locales not found (path='{$path_param}')", E_USER_ERROR);
38 | }
39 |
40 | if ($stack_operation == 'push') {
41 | $stack[] = array($domain, $path);
42 |
43 | } elseif ($stack_operation == 'pop') {
44 | if (count($stack) > 1) {
45 | array_pop($stack);
46 | }
47 | list($domain, $path) = end($stack);
48 | } else {
49 | trigger_error("Unknown stack operation '{$stack_operation}'", E_USER_ERROR);
50 | }
51 |
52 | _bind_textdomain_codeset($domain, 'UTF-8');
53 | _bindtextdomain($domain, $path);
54 | _textdomain($domain);
55 | }
56 |
--------------------------------------------------------------------------------
/src/libraries/custom/smarty/plugins/modifier.creditnoteadinfodisplay.php:
--------------------------------------------------------------------------------
1 | $value) {
42 |
43 | // Make sure there is a value
44 | if(!$value) {continue;}
45 |
46 | // Apply modifications as required
47 | $html .= ''._gettext($key).': '.$value.'
';
48 | $contentFlag = true;
49 |
50 | }
51 |
52 | $html = rtrim($html, '
'); // Remove the last
if present
53 |
54 | // If there is no additional info, return false
55 | if(!$contentFlag) {
56 | $html = false;
57 | }
58 |
59 | return $html;
60 |
61 | }
--------------------------------------------------------------------------------
/src/libraries/qframework/Sections/Components.php:
--------------------------------------------------------------------------------
1 | app = \Factory::getApplication();
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/libraries/qframework/Sections/Modules.php:
--------------------------------------------------------------------------------
1 | app = \Factory::getApplication();
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/libraries/qframework/Sections/Plugins.php:
--------------------------------------------------------------------------------
1 | app = \Factory::getApplication();
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/libraries/qframework/Sections/System.php:
--------------------------------------------------------------------------------
1 | app = \Factory::getApplication();
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/libraries/qframework/joomla/libraries/joomla/session/storage/none.php:
--------------------------------------------------------------------------------
1 |
7 | * @license GNU General Public License version 2 or later; see LICENSE
8 | */
9 |
10 | defined('JPATH_PLATFORM') or die;
11 |
12 | /**
13 | * File session handler for PHP
14 | *
15 | * @link https://www.php.net/manual/en/function.session-set-save-handler.php
16 | * @since 1.7.0
17 | * @deprecated 4.0 The CMS' Session classes will be replaced with the `joomla/session` package
18 | */
19 | class JSessionStorageNone extends JSessionStorage
20 | {
21 | /**
22 | * Register the functions of this class with PHP's session handler
23 | *
24 | * @return void
25 | *
26 | * @since 1.7.0
27 | */
28 | public function register()
29 | {
30 | // Default session handler is `files`
31 | }
32 | }
--------------------------------------------------------------------------------
/src/logs/.htaccess:
--------------------------------------------------------------------------------
1 | Options -Indexes
2 |
--------------------------------------------------------------------------------
/src/media/.htaccess:
--------------------------------------------------------------------------------
1 | Options -Indexes
2 |
--------------------------------------------------------------------------------
/src/media/qw-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shoulders/qwcrm/fe1161496bbb7bd8866290f24898d1b307c8a0f1/src/media/qw-logo.png
--------------------------------------------------------------------------------
/src/robots.txt.dist:
--------------------------------------------------------------------------------
1 | # If the QWcrm site is installed within a folder such as at
2 | # e.g. www.example.com/qwcrm/ the robots.txt file MUST be
3 | # moved to the site root at e.g. www.example.com/robots.txt
4 | # AND the qwcrm folder name MUST be prefixed to the disallowed
5 | # path, e.g. the Disallow rule for the /administrator/ folder
6 | # MUST be changed to read Disallow: /qwcrm/administrator/
7 | #
8 | # For more information about the robots.txt standard, see:
9 | # http://www.robotstxt.org/orig.html
10 | #
11 | # For syntax checking, see:
12 | # http://tool.motoricerca.info/robots-checker.phtml
13 |
14 | # No robots should visit any URL on this site
15 | User-agent: *
16 | Disallow: /
17 |
18 | # Selective blocking
19 | #User-agent: *
20 | #Disallow: /cache/
21 | #Disallow: /includes/
22 | #Disallow: /language/
23 | #Disallow: /libraries/
24 | #Disallow: /logs/
25 | #Disallow: /media/
26 | #Disallow: /modules/
27 | #Disallow: /themes/
28 |
29 | #Sitemap: http://www.example.co.uk/sitemap.xml
--------------------------------------------------------------------------------
/src/setup/upgrade/3_1_0/break.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shoulders/qwcrm/fe1161496bbb7bd8866290f24898d1b307c8a0f1/src/setup/upgrade/3_1_0/break.txt
--------------------------------------------------------------------------------
/src/setup/upgrade/3_1_1/upgrade_database.sql:
--------------------------------------------------------------------------------
1 | /*
2 | * @package QWcrm
3 | * @author Jon Brown https://quantumwarp.com/
4 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
5 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
6 | */
--------------------------------------------------------------------------------
/src/setup/upgrade/3_1_3/upgrade_database.sql:
--------------------------------------------------------------------------------
1 | /*
2 | * @package QWcrm
3 | * @author Jon Brown https://quantumwarp.com/
4 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
5 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
6 | */
7 |
8 | --
9 | -- Correct Payment Status on some records, issue introduced in an earlier version and fixed but records were never corrected
10 | --
11 |
12 | UPDATE `#__invoice_records`
13 | SET `status` = 'paid', `closed_on` = `last_active`, `is_closed` = 1
14 | WHERE `status` = 'partially_paid' AND `balance` = 0 AND `unit_gross` > 0;
15 |
16 | UPDATE `#__refund_records`
17 | SET `status` = 'paid', `closed_on` = `last_active`
18 | WHERE `status` = 'partially_paid' AND `balance` = 0 AND `unit_gross` > 0;
19 |
20 | UPDATE `#__expense_records`
21 | SET `status` = 'paid', `closed_on` = `last_active`
22 | WHERE `status` = 'partially_paid' AND `balance` = 0 AND `unit_gross` > 0;
23 |
24 | UPDATE `#__otherincome_records`
25 | SET `status` = 'paid', `closed_on` = `last_active`
26 | WHERE `status` = 'partially_paid' AND `balance` = 0 AND `unit_gross` > 0;
27 |
28 | --
29 | -- Remove some erroneous indexes in #__user_keys
30 | --
31 |
32 | ALTER TABLE `#__user_keys` DROP INDEX `series_2`;
33 | ALTER TABLE `#__user_keys` DROP INDEX `series_3`;
--------------------------------------------------------------------------------
/src/themes/.htaccess:
--------------------------------------------------------------------------------
1 | # Block direct access to template files
2 |
{t}New This Calendar Month{/t} | 14 |{t}New This Financial Year{/t} | 15 |{t}Total{/t} {t}Clients{/t} | 16 |
{$client_stats.count_new_month} | 19 |{$client_stats.count_new_year} | 20 |{$client_stats.count_total} | 21 |
11 | 13 | {t}403 - You do not have permission to access this resource or your session has expired.{/t} 14 | 15 | 16 | 17 | {* 18 | 21 | *} 22 |23 | 24 | 25 | 26 | 27 | |
28 |
11 | 13 | {t}404 - The requested page was not found on our system.{/t} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
23 |
{t}Welcome to QWcrm{/t} | 11 ||||
14 |
|
34 |
14 | |
QWcrm {$qwcrm_version} | 17 |
{$greeting_msg} | 39 |{$todays_display_date} | 40 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/themes/default/templates/core/blocks/theme_header_theme_off_block.tpl:
--------------------------------------------------------------------------------
1 |
2 | {*
3 | * @package QWcrm
4 | * @author Jon Brown https://quantumwarp.com/
5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
7 | *}
8 |
9 |
10 |
11 |
12 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/themes/default/templates/core/dashboard.tpl:
--------------------------------------------------------------------------------
1 |
2 | {*
3 | * @package QWcrm
4 | * @author Jon Brown https://quantumwarp.com/
5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
7 | *}
8 | {if $page_version == 'employee'}
9 | {include file='core/dashboard_employee.tpl'}
10 | {elseif $page_version == 'client'}
11 | {include file='core/dashboard_client.tpl'}
12 | {/if}
--------------------------------------------------------------------------------
/src/themes/default/templates/core/error.tpl:
--------------------------------------------------------------------------------
1 |
2 | {*
3 | * @package QWcrm
4 | * @author Jon Brown https://quantumwarp.com/
5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
7 | *}
8 |
12 |
16 |
17 |
18 | ![]() 13 | 14 | 15 |
19 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
9 | {t}Error Page{/t}: {$error_component}:{$error_page_tpl}
--------------------------------------------------------------------------------
/src/themes/default/templates/core/home.tpl:
--------------------------------------------------------------------------------
1 |
2 | {*
3 | * @package QWcrm
4 | * @author Jon Brown https://quantumwarp.com/
5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
7 | *}
8 | {* {include file="core/blocks/home_dashboard_block.tpl"} *}
9 |
10 | {include file="core/blocks/home_login_block.tpl"}
11 |
--------------------------------------------------------------------------------
/src/themes/default/templates/core/maintenance.tpl:
--------------------------------------------------------------------------------
1 |
2 | {*
3 | * @package QWcrm
4 | * @author Jon Brown https://quantumwarp.com/
5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
7 | *}
8 | 10 | {t}Error Type{/t}: {$error_type} 11 | 12 | {t}Error Location{/t}: {$error_location} 13 | {t}PHP Function{/t}: {$error_php_function} 14 | 15 | {t}Database Error{/t}: {$error_database} 16 | {t}SQL Query{/t}: {$error_sql_query} 17 | 18 | {t}Error Message{/t}: {$error_msg} 19 | This is the maintenance page - not much here yet -------------------------------------------------------------------------------- /src/themes/default/templates/creditnote/blocks/display_creditnote_current_stats_block.tpl: -------------------------------------------------------------------------------- 1 | 2 | {* 3 | * @package QWcrm 4 | * @author Jon Brown https://quantumwarp.com/ 5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved. 6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html 7 | *} 8 | {$block_title} 9 |10 |
10 |
10 |
9 |
--------------------------------------------------------------------------------
/src/themes/default/templates/invoice/blocks/display_invoice_current_stats_block.tpl:
--------------------------------------------------------------------------------
1 |
2 | {*
3 | * @package QWcrm
4 | * @author Jon Brown https://quantumwarp.com/
5 | * @copyright Copyright (C) 2016 - 2017 Jon Brown, All rights reserved.
6 | * @license GNU/GPLv3 or later; https://www.gnu.org/licenses/gpl.html
7 | *}
8 | {$block_title}
9 | License10 |QWcrm is distributed under the GNU General Public License V3 11 |Not all assets are covered by the GNU General Public License V3 (GPL-3.0). 12 |QWcrm makes use of other software packages which have their own license which allows their inclusion in QWcrm. 13 |The QW / QuantumWarp Logo are Copyrighted and are not open source or free for you to use. You may use the logo in conjuction with this software but not proport ownership or endorsement by or for QuantumWarp or any other reason. 14 |10 |
10 |
10 |
10 |
10 |
10 |
10 |
|