From b3a53d6236c1eff468577ff320b347cb84780369 Mon Sep 17 00:00:00 2001 From: Riddhi Kansara Date: Thu, 12 Apr 2018 17:16:36 +0530 Subject: [PATCH] [ADD]Add GST Report Singapore Localization --- addons/l10n_sg_gst/__init__.py | 6 + addons/l10n_sg_gst/__manifest__.py | 41 + addons/l10n_sg_gst/demo/demo_account.xml | 22 + addons/l10n_sg_gst/demo/demo_product.xml | 113 +++ addons/l10n_sg_gst/i18n/l10n_sg_gst.pot | 889 ++++++++++++++++++ addons/l10n_sg_gst/models/__init__.py | 5 + addons/l10n_sg_gst/models/account_tax.py | 32 + addons/l10n_sg_gst/models/res_company.py | 18 + addons/l10n_sg_gst/report/__init__.py | 6 + .../l10n_sg_gst/report/account_gst5_report.py | 122 +++ .../l10n_sg_gst/report/account_gst7_report.py | 49 + .../report/account_gst_analysis_report.py | 145 +++ addons/l10n_sg_gst/report/report_gst_menu.xml | 46 + .../l10n_sg_gst/report/report_paperformat.xml | 36 + .../l10n_sg_gst/static/description/icon.png | Bin 0 -> 79143 bytes addons/l10n_sg_gst/tests/__init__.py | 4 + .../tests/test_gst_summary_report.py | 262 ++++++ .../views/account_gst5_report_view.xml | 850 +++++++++++++++++ .../views/account_gst7_report_view.xml | 847 +++++++++++++++++ .../views/account_gst_analysis_view.xml | 214 +++++ addons/l10n_sg_gst/views/account_tax_view.xml | 15 + addons/l10n_sg_gst/views/layouts_gst.xml | 91 ++ addons/l10n_sg_gst/views/res_company_view.xml | 30 + addons/l10n_sg_gst/wizard/__init__.py | 6 + .../l10n_sg_gst/wizard/gst5_select_period.py | 37 + .../wizard/gst5_select_period_view.xml | 73 ++ .../l10n_sg_gst/wizard/gst7_select_period.py | 65 ++ .../wizard/gst7_select_period_view.xml | 71 ++ addons/l10n_sg_gst/wizard/gst_analysis.py | 27 + .../l10n_sg_gst/wizard/gst_analysis_view.xml | 46 + 30 files changed, 4168 insertions(+) create mode 100644 addons/l10n_sg_gst/__init__.py create mode 100644 addons/l10n_sg_gst/__manifest__.py create mode 100644 addons/l10n_sg_gst/demo/demo_account.xml create mode 100644 addons/l10n_sg_gst/demo/demo_product.xml create mode 100644 addons/l10n_sg_gst/i18n/l10n_sg_gst.pot create mode 100644 addons/l10n_sg_gst/models/__init__.py create mode 100644 addons/l10n_sg_gst/models/account_tax.py create mode 100644 addons/l10n_sg_gst/models/res_company.py create mode 100644 addons/l10n_sg_gst/report/__init__.py create mode 100644 addons/l10n_sg_gst/report/account_gst5_report.py create mode 100644 addons/l10n_sg_gst/report/account_gst7_report.py create mode 100644 addons/l10n_sg_gst/report/account_gst_analysis_report.py create mode 100644 addons/l10n_sg_gst/report/report_gst_menu.xml create mode 100644 addons/l10n_sg_gst/report/report_paperformat.xml create mode 100644 addons/l10n_sg_gst/static/description/icon.png create mode 100644 addons/l10n_sg_gst/tests/__init__.py create mode 100644 addons/l10n_sg_gst/tests/test_gst_summary_report.py create mode 100644 addons/l10n_sg_gst/views/account_gst5_report_view.xml create mode 100644 addons/l10n_sg_gst/views/account_gst7_report_view.xml create mode 100644 addons/l10n_sg_gst/views/account_gst_analysis_view.xml create mode 100644 addons/l10n_sg_gst/views/account_tax_view.xml create mode 100644 addons/l10n_sg_gst/views/layouts_gst.xml create mode 100644 addons/l10n_sg_gst/views/res_company_view.xml create mode 100644 addons/l10n_sg_gst/wizard/__init__.py create mode 100644 addons/l10n_sg_gst/wizard/gst5_select_period.py create mode 100644 addons/l10n_sg_gst/wizard/gst5_select_period_view.xml create mode 100644 addons/l10n_sg_gst/wizard/gst7_select_period.py create mode 100644 addons/l10n_sg_gst/wizard/gst7_select_period_view.xml create mode 100644 addons/l10n_sg_gst/wizard/gst_analysis.py create mode 100644 addons/l10n_sg_gst/wizard/gst_analysis_view.xml diff --git a/addons/l10n_sg_gst/__init__.py b/addons/l10n_sg_gst/__init__.py new file mode 100644 index 00000000..3b3d7f92 --- /dev/null +++ b/addons/l10n_sg_gst/__init__.py @@ -0,0 +1,6 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +from . import models +from . import report +from . import wizard diff --git a/addons/l10n_sg_gst/__manifest__.py b/addons/l10n_sg_gst/__manifest__.py new file mode 100644 index 00000000..9da7ded7 --- /dev/null +++ b/addons/l10n_sg_gst/__manifest__.py @@ -0,0 +1,41 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +{ + 'name': 'Singapore - GST Report', + 'version': '1.0', + 'category': 'Localization', + 'summary': 'GST Reports for Singapore Localization', + 'description': ''' +GST Reports for Singapore Localization +======================================== + +There are Different type of GST Reports available for Singapore Localization. + * GST5 Report + * GST7 Report + * GST Analysis Report + ''', + "author": "FlectraHQ", + 'website': 'https://flectrahq.com', + 'depends': ['account_invoicing', 'l10n_sg'], + 'data': [ + 'views/res_company_view.xml', + 'views/account_tax_view.xml', + 'report/report_paperformat.xml', + 'wizard/gst5_select_period_view.xml', + 'wizard/gst7_select_period_view.xml', + 'wizard/gst_analysis_view.xml', + 'report/report_gst_menu.xml', + 'views/layouts_gst.xml', + 'views/account_gst_analysis_view.xml', + 'views/account_gst5_report_view.xml', + 'views/account_gst7_report_view.xml', + ], + 'demo': [ + 'demo/demo_account.xml', + 'demo/demo_product.xml' + ], + 'installable': True, + 'application': True, + 'auto_install': False +} diff --git a/addons/l10n_sg_gst/demo/demo_account.xml b/addons/l10n_sg_gst/demo/demo_account.xml new file mode 100644 index 00000000..cbcc9c9b --- /dev/null +++ b/addons/l10n_sg_gst/demo/demo_account.xml @@ -0,0 +1,22 @@ + + + + + Income + + + + X2001 + Product Sales - (test) + + + + + Sales Journal - (test) + TSAJ + sale + + + + + diff --git a/addons/l10n_sg_gst/demo/demo_product.xml b/addons/l10n_sg_gst/demo/demo_product.xml new file mode 100644 index 00000000..58d0a4be --- /dev/null +++ b/addons/l10n_sg_gst/demo/demo_product.xml @@ -0,0 +1,113 @@ + + + + + + Cyril Daufeldt + 1 + Wavre + 1300 + 69 rue de Namur + cyril_daufeldt@daufeldt.com + +32 10 588 558 + http://www.Cyril.com + + + + Sunil Daufeldt + 1 + Shanghai + 1530 + + 69 rue de Namur + sunil_daufeldt@gmail.com + +32 10 588 558 + http://www.Sunil.com + + + + + medical instruments operating table + 2000 + 5000 + consu + + + + Blood Glucose Test Strip + 6000 + 7000 + consu + + + + Diamond Tools + 8000 + 10000 + consu + + + + Mobile Track Pad + 12000 + 150000 + consu + + + + Elevator + 2000 + 8000 + consu + + + + Car blackbox + 1000 + 5000 + consu + + + + Multi Block + 200 + 500 + consu + + + + SuperMax + 5000 + 12500 + consu + + + + Digital Wireless System + 2000 + 7500 + consu + + + + Digital Mobile X-Ray System + 300 + 8000 + consu + + + + Electrical Medical Stimulator + 1000 + 5000 + consu + + + + Hommage-Marble Stone + 700 + 1400 + consu + + + diff --git a/addons/l10n_sg_gst/i18n/l10n_sg_gst.pot b/addons/l10n_sg_gst/i18n/l10n_sg_gst.pot new file mode 100644 index 00000000..4a518ecf --- /dev/null +++ b/addons/l10n_sg_gst/i18n/l10n_sg_gst.pot @@ -0,0 +1,889 @@ +# Translation of Flectra Server. +# This file contains the translation of the following modules: +# * l10n_sg_gst +# +msgid "" +msgstr "" +"Project-Id-Version: Flectra Server 1.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-20 08:53+0000\n" +"PO-Revision-Date: 2018-04-20 08:53+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "(Attach payment voucher if you are paying by\n" +" cheque)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "(Please Cross)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "10" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "11" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "12" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "13" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "14" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "55 Newton\n" +" Road, Revenue House, Singapore\n" +" 307987" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "APPLICABLE TO TAXABLE PERSONS UNDER\n" +" MAJOR EXPORTER SCHEME ONLY\n" +" " +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "APPLICABLE TO TAXABLE PERSONS UNDER MAJOR EXPORTER SCHEME ONLY" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Before you fill in this form, please read the notes on\n" +" Page 2.\n" +" " +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Before you fill in this form, please read the notes on Page 2." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Company Name :" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "DECLARATION OF ERRORS" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "DECLARATION" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "DID YOU MAKE FOLLOWING CLAIMS IN BOX 7\n" +" ?\n" +" " +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "DID YOU MAKE FOLLOWING CLAIMS IN BOX 7 ?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Equals:" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "GOODS AND SERVICES TAX RETURN" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "Goods And Services Tax act 1993" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Less:" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "REVENUE" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Total" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "
\n" +" Company Address:" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "
\n" +" GST Registration Number :" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "From :" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "GST Analysis" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Purchases" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Sales" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "To :" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "AT" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_2 +#: model:product.template,name:l10n_sg_gst.product_id_2_product_template +msgid "Blood Glucose Test Strip" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "CP" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst_analysis_form +msgid "Cancel" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_6 +#: model:product.template,name:l10n_sg_gst.product_id_6_product_template +msgid "Car blackbox" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_company_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_company_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_company_id +msgid "Company" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Complete all boxes clearly in ink.\n" +" Please enter a '0' (Zero) if the item is not applicable.\n" +" Exclude GST amount and disregard cents for items 1 to 5." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Complete all boxes clearly in ink. Please enter a '0' (Zero) if the item\n" +" is not applicable. Exclude GST amount and disregard cents for items 1 to 5." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "Comptroller Of Goods and Service\n" +" Tax" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_res_partner +msgid "Contact" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Contact Telephone No." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_create_uid +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_create_uid +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_create_date +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_create_date +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_create_date +msgid "Created on" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Date" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "Declaration Of Errors" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_declaration_of_error +msgid "Declaration of Errors" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Designation:" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_3 +#: model:product.template,name:l10n_sg_gst.product_id_3_product_template +msgid "Diamond Tools" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Did you claim for GST you had refunded to\n" +" tourists?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "Did you claim for GST you had refunded to tourists?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "Did you make any bad debt relief claims?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "Did you make any pre-registration claims?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "Did you make following claims in BOX 7 ?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Difference to be paid to IRAS" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_10 +#: model:product.template,name:l10n_sg_gst.product_id_10_product_template +msgid "Digital Mobile X-Ray System" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_9 +#: model:product.template,name:l10n_sg_gst.product_id_9_product_template +msgid "Digital Wireless System" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst5_report_view_display_name +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst7_report_view_display_name +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst_analysis_view_display_name +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_display_name +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_display_name +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_display_name +msgid "Display Name" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_11 +#: model:product.template,name:l10n_sg_gst.product_id_11_product_template +msgid "Electrical Medical Stimulator" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_5 +#: model:product.template,name:l10n_sg_gst.product_id_5_product_template +msgid "Elevator" +msgstr "" + +#. module: l10n_sg_gst +#: selection:account.tax,tax_group:0 +#: selection:account.tax.template,tax_group:0 +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Exempted" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst_analysis_form +msgid "Filter on Date" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "For Office Use" +msgstr "" + +#. module: l10n_sg_gst +#: code:addons/l10n_sg_gst/report/account_gst5_report.py:110 +#: code:addons/l10n_sg_gst/report/account_gst7_report.py:34 +#: code:addons/l10n_sg_gst/report/account_gst_analysis_report.py:113 +#, python-format +msgid "Form content is missing, this report cannot be printed." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_date_from +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_date_from +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_date_from +msgid "From" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "GST %" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "GST Amount" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.actions.act_window,name:l10n_sg_gst.action_wiz_gst_analysis +#: model:ir.actions.report,name:l10n_sg_gst.action_account_gst_analysis +#: model:ir.model,name:l10n_sg_gst.model_wiz_gst_analysis +#: model:ir.ui.menu,name:l10n_sg_gst.menu_action_wiz_gst_analysis +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst_analysis_form +msgid "GST Analysis" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "GST F5 Summary Report" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "GST F7 Summary Report" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_res_company_gst_number +#: model:ir.model.fields,field_description:l10n_sg_gst.field_res_partner_gst_number +#: model:ir.model.fields,field_description:l10n_sg_gst.field_res_users_gst_number +msgid "GST Number" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.menu,name:l10n_sg_gst.menu_account_gst_report +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "GST Report" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.actions.act_window,name:l10n_sg_gst.action_wiz_gst5_report +#: model:ir.actions.report,name:l10n_sg_gst.action_account_gst5_report_id +#: model:ir.model,name:l10n_sg_gst.model_wiz_gst5_report +#: model:ir.ui.menu,name:l10n_sg_gst.menu_action_wiz_gst5_report +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +msgid "GST5 Report" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.actions.act_window,name:l10n_sg_gst.action_wiz_gst7_report +#: model:ir.actions.report,name:l10n_sg_gst.action_account_gst7_report_id +#: model:ir.model,name:l10n_sg_gst.model_wiz_gst7_report +#: model:ir.ui.menu,name:l10n_sg_gst.menu_action_wiz_gst7_report +msgid "GST7 Report" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Gross Amount" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_12 +#: model:product.template,name:l10n_sg_gst.product_id_12_product_template +msgid "Hommage-Marble Stone" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "I declare that the information given above is\n" +" true and complete." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "I declare that the information given above is true and complete." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst5_report_view_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst7_report_view_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst_analysis_view_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_id +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_id +msgid "ID" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "If you\n" +" have changed your postal adddress, please\n" +" update the address printed below." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "If you have changed your postal adddress,\n" +" please update the address printed below." +msgstr "" + +#. module: l10n_sg_gst +#: model:account.account.type,name:l10n_sg_gst.test_data_account_type_income +msgid "Income" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Input tax and refunds claimed" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_res_company_is_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_res_partner_is_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_res_users_is_gst +msgid "Is GST Applicable?" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst5_report_view___last_update +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst7_report_view___last_update +#: model:ir.model.fields,field_description:l10n_sg_gst.field_report_l10n_sg_gst_account_gst_analysis_view___last_update +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report___last_update +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report___last_update +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis___last_update +msgid "Last Modified on" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_write_uid +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_write_uid +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_write_date +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_write_date +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_sg_gst +#: selection:account.tax,tax_group:0 +#: selection:account.tax.template,tax_group:0 +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "MES" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_4 +#: model:product.template,name:l10n_sg_gst.product_id_4_product_template +msgid "Mobile Track Pad" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_7 +#: model:product.template,name:l10n_sg_gst.product_id_7_product_template +msgid "Multi Block" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "NS" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Name Of Declarant:" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Net GST To be claimed for IRAS" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Net GST paid previously for this accounting period" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Net GST to be paid to IRAS" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_answer1_no +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_answer2_no +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_answer3_no +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_answer1_no +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_answer2_no +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_answer3_no +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "No" +msgstr "" + +#. module: l10n_sg_gst +#: code:addons/l10n_sg_gst/wizard/gst7_select_period.py:43 +#, python-format +msgid "Number of characters must on exceed 200" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "OR" +msgstr "" + +#. module: l10n_sg_gst +#: selection:account.tax,tax_group:0 +#: selection:account.tax.template,tax_group:0 +msgid "Out Of Scope" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Output Of Scope" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Output tax due" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "PR" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Particulars" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Period covered by this return :" +msgstr "" + +#. module: l10n_sg_gst +#: constraint:wiz.gst7.report:0 +msgid "Please do not enter any symbol in this field\"." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst_analysis_form +msgid "Print" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Revenue for the accounting period" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Revised Input tax and refunds claimed(exclude disallowed input tax)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Revised output tax due" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Signature" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Standard" +msgstr "" + +#. module: l10n_sg_gst +#: selection:account.tax,tax_group:0 +#: selection:account.tax.template,tax_group:0 +msgid "Standard Rates" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_8 +#: model:product.template,name:l10n_sg_gst.product_id_8_product_template +msgid "SuperMax" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_account_tax +msgid "Tax" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_account_tax_tax_group +#: model:ir.model.fields,field_description:l10n_sg_gst.field_account_tax_template_tax_group +msgid "Tax Group" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.custom_layout_gst +msgid "Tel:1800-3568633" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_account_tax_template +msgid "Templates for Taxes" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "The due date for\n" +" submission is one month after the end\n" +" of the accountig period.\n" +"
\n" +" Penalties will be imposed if you do not\n" +" submit your Return and make payment\n" +"
\n" +" by the due date." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "The due date for submission is one month after the\n" +" end of the accountig period.\n" +"
\n" +" Penalties will be imposed if you do not submit your Return and make payment\n" +"
\n" +" by the due date." +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +msgid "This is compulsory field, Please provide a brief description of the errors made. Please do not enter any symbol in this field or exceed the word limit of 200 characters. If you are consolidating the errors for more than one accounting period(up till one year), Please state so in this box,For example: *The error declared aboved is for the period _______ to ________" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_date_to +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_date_to +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst_analysis_date_to +msgid "To" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Total revised value of exempt supplies" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Total revised value of standard-rated supplies (excluding GST)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Total revised value of taxable purchases (exclude expenses where input tax is\n" +" disallowed)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Total revised value of zero-rated supplies" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Total value of (1) + (2) + (3)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Total value of exempt supplies" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Total value of goods imported under this scheme" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Total value of standard-rated supplies\n" +" (excluding GST)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Total value of taxable purchases (excluding\n" +" GST)" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +msgid "Total value of zero-rated supplies" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_answer1_yes +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_answer2_yes +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst5_report_answer3_yes +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_answer1_yes +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_answer2_yes +#: model:ir.model.fields,field_description:l10n_sg_gst.field_wiz_gst7_report_answer3_yes +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "Yes" +msgstr "" + +#. module: l10n_sg_gst +#: selection:account.tax,tax_group:0 +#: selection:account.tax.template,tax_group:0 +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst_analysis_view +msgid "Zeroed" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "_____________________" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst5_report_view +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "____________________________________________________________________________________________________________________________________" +msgstr "" + +#. module: l10n_sg_gst +#: model:product.product,name:l10n_sg_gst.product_id_1 +#: model:product.template,name:l10n_sg_gst.product_id_1_product_template +msgid "medical instruments operating table" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst5_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst7_report_form +#: model:ir.ui.view,arch_db:l10n_sg_gst.wiz_gst_analysis_form +msgid "or" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_report_l10n_sg_gst_account_gst5_report_view +msgid "report.l10n_sg_gst.account_gst5_report_view" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_report_l10n_sg_gst_account_gst7_report_view +msgid "report.l10n_sg_gst.account_gst7_report_view" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.model,name:l10n_sg_gst.model_report_l10n_sg_gst_account_gst_analysis_view +msgid "report.l10n_sg_gst.account_gst_analysis_view" +msgstr "" + +#. module: l10n_sg_gst +#: model:ir.ui.view,arch_db:l10n_sg_gst.account_gst7_report_view +msgid "to" +msgstr "" + diff --git a/addons/l10n_sg_gst/models/__init__.py b/addons/l10n_sg_gst/models/__init__.py new file mode 100644 index 00000000..33fc99c4 --- /dev/null +++ b/addons/l10n_sg_gst/models/__init__.py @@ -0,0 +1,5 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +from . import account_tax +from . import res_company diff --git a/addons/l10n_sg_gst/models/account_tax.py b/addons/l10n_sg_gst/models/account_tax.py new file mode 100644 index 00000000..dd868bb1 --- /dev/null +++ b/addons/l10n_sg_gst/models/account_tax.py @@ -0,0 +1,32 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +from flectra import models, fields, api + + +class AccountTax(models.Model): + _inherit = 'account.tax' + + tax_group = fields.Selection([('standard_rates', 'Standard Rates'), + ('zeroed', 'Zeroed'), + ('exempted', 'Exempted'), ('MES', 'MES'), + ('out_of_scope', 'Out Of Scope')], + string='Tax Group') + + +class AccountTaxTemplate(models.Model): + _inherit = 'account.tax.template' + + tax_group = fields.Selection([('standard_rates', 'Standard Rates'), + ('zeroed', 'Zeroed'), + ('exempted', 'Exempted'), ('MES', 'MES'), + ('out_of_scope', 'Out Of Scope')], + string='Tax Group') + + @api.multi + def _get_tax_vals(self, company, tax_template_to_tax): + res = super(AccountTaxTemplate, self)._get_tax_vals( + company, tax_template_to_tax) + if self.tax_group: + res.update({'tax_group': self.tax_group}) + return res diff --git a/addons/l10n_sg_gst/models/res_company.py b/addons/l10n_sg_gst/models/res_company.py new file mode 100644 index 00000000..e521fef3 --- /dev/null +++ b/addons/l10n_sg_gst/models/res_company.py @@ -0,0 +1,18 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +from flectra import models, fields + + +class ResCompany(models.Model): + _inherit = 'res.company' + + is_gst = fields.Boolean(string='Is GST Applicable?', default=False) + gst_number = fields.Char(string='GST Number', size=256) + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + is_gst = fields.Boolean(string='Is GST Applicable?', default=False) + gst_number = fields.Char(string='GST Number', size=256) diff --git a/addons/l10n_sg_gst/report/__init__.py b/addons/l10n_sg_gst/report/__init__.py new file mode 100644 index 00000000..41c5179c --- /dev/null +++ b/addons/l10n_sg_gst/report/__init__.py @@ -0,0 +1,6 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +from . import account_gst5_report +from . import account_gst_analysis_report +from . import account_gst7_report diff --git a/addons/l10n_sg_gst/report/account_gst5_report.py b/addons/l10n_sg_gst/report/account_gst5_report.py new file mode 100644 index 00000000..e6498ce8 --- /dev/null +++ b/addons/l10n_sg_gst/report/account_gst5_report.py @@ -0,0 +1,122 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +import time +from datetime import datetime + +from flectra import api, models, _ +from flectra.exceptions import UserError + +taxes_query = """SELECT l.tax_line_id, \ + COALESCE(SUM(l.debit-l.credit), 0) + FROM account_move as m, account_move_line as l + WHERE (l.move_id=m.id) AND \ + ((((l.date <= '%s') AND \ + ((l.date >= '%s'))) AND \ + (m.state = 'posted')) AND \ + (l.company_id = '%s')) \ + GROUP BY l.tax_line_id \ + """ +gst_taxes_query = """SELECT r.account_tax_id,\ + COALESCE(SUM(l.debit-l.credit), 0) + FROM account_move as m, account_move_line as l\ + INNER JOIN account_move_line_account_tax_rel r ON \ + (l.id = r.account_move_line_id)\ + INNER JOIN account_tax t ON (r.account_tax_id = t.id)\ + WHERE (l.move_id=m.id) AND \ + ((l.date <= '%s') AND \ + ((l.date >= '%s') AND \ + (m.state = 'posted'))\ + ) group by r.account_tax_id""" + +class AccountGst5Report(models.AbstractModel): + _name = 'report.l10n_sg_gst.account_gst5_report_view' + + def get_boolean_data(self, data): + res = {} + if data['form']: + res = { + 'answer1_yes': data['form']['answer1_yes'] and '◉' or '○', + 'answer1_no': data['form']['answer1_no'] and '◉' or '○', + 'answer2_yes': data['form']['answer2_yes'] and '◉' or '○', + 'answer2_no': data['form']['answer2_no'] and '◉' or '○', + 'answer3_yes': data['form']['answer3_yes'] and '◉' or '○', + 'answer3_no': data['form']['answer3_no'] and '◉' or '○', + + } + return res + + def get_tax(self, data, tax_group): + total = 0.0 + flag = 0 + final_domain = [] + date_start = data['date_from'] + date_stop = data['date_to'] + self._cr.execute(taxes_query % (date_stop, date_start, self.env.user.company_id.id)) + taxes_result = self._cr.fetchall() + self._cr.execute(gst_taxes_query % (date_stop, date_start)) + final_sale_domain = [('type_tax_use', '=', 'sale')] + final_purchase_domain = [('type_tax_use', '=', 'purchase')] + gst_taxes_results = self._cr.fetchall() + if tax_group == 'MES': + final_domain = final_purchase_domain + [('tax_group', '=', 'MES')] + elif tax_group == 'purchase': + final_domain = final_purchase_domain + [('tax_group', '!=', 'MES')] + elif tax_group == 'purchase-tax': + flag = 1 + final_domain = final_purchase_domain + if tax_group == 'standard_rates': + final_domain = final_sale_domain + [('tax_group', '=', 'standard_rates')] + elif tax_group == 'zeroed': + final_domain = final_sale_domain + [('tax_group', '=', 'zeroed')] + elif tax_group == 'exempted': + final_domain = final_sale_domain + [('tax_group', '=', 'exempted')] + elif tax_group == 'sales-tax': + flag = 1 + final_domain = final_sale_domain + elif tax_group == 'sales': + final_domain = final_sale_domain + tax_ids = self.env['account.tax'].search(final_domain) + + if flag: + for i in range(len(taxes_result)): + for tax in tax_ids: + if tax.id == taxes_result[i][0]: + total += taxes_result[i][1] + return abs(total) + + for i in range(len(gst_taxes_results)): + for tax in tax_ids: + if tax.id == gst_taxes_results[i][0]: + total += gst_taxes_results[i][1] + return abs(total) + + def get_company(self, data): + res = {} + company_id = self.env['res.company'].browse( + data['form']['company_id'][0]) + if company_id: + res.update({ + 'contact_address': + company_id.partner_id.contact_address or '', + 'name': company_id.name, + 'gst_number': company_id.gst_number}) + return res + + @api.model + def get_report_values(self, docids, data=None): + if not data.get('form') or not self.env.context.get( + 'active_model'): + raise UserError(_( + "Form content is missing, this report cannot be printed.")) + tax_ids = self.env['account.tax'].browse(self.env.context.get('active_ids', [])) + return { + 'doc_ids': docids, + 'doc_model': 'account.tax', + 'docs': tax_ids, + 'data': data, + 'datetime': datetime, + 'get_tax': self.get_tax, + 'get_boolean_data': self.get_boolean_data, + 'get_company': self.get_company, + } diff --git a/addons/l10n_sg_gst/report/account_gst7_report.py b/addons/l10n_sg_gst/report/account_gst7_report.py new file mode 100644 index 00000000..cf1239ae --- /dev/null +++ b/addons/l10n_sg_gst/report/account_gst7_report.py @@ -0,0 +1,49 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +import time +from datetime import datetime +from flectra.addons.l10n_sg_gst.report.account_gst5_report import \ + taxes_query, gst_taxes_query, AccountGst5Report + +from flectra import api, models, _ +from flectra.exceptions import UserError + + +class AccountGst7Report(models.AbstractModel): + _name = 'report.l10n_sg_gst.account_gst7_report_view' + + def get_boolean_data(self, data): + return AccountGst5Report.get_boolean_data(self, data) + + def get_tax(self, data, tax_group): + return AccountGst5Report.get_tax(self, data, tax_group) + # + def get_company(self, data): + res = AccountGst5Report.get_company(self, data) + return res + + @api.constrains('declaration_of_error') + def _get_declaration_of_error(self, data): + return data['form']['declaration_of_error'] + + @api.model + def get_report_values(self, docids, data=None): + if not data.get('form') or not self.env.context.get( + 'active_model'): + raise UserError(_( + "Form content is missing, this report cannot be printed.")) + tax_ids = self.env['account.tax'].browse(self.env.context.get('active_ids', [])) + + return { + 'doc_ids': docids, + 'doc_model': 'account.tax', + 'docs': tax_ids, + 'data': data, + 'time': time, + 'datetime': datetime, + 'get_tax': self.get_tax, + 'get_boolean_data': self.get_boolean_data, + 'get_company': self.get_company, + 'get_declaration_of_error': self._get_declaration_of_error + } diff --git a/addons/l10n_sg_gst/report/account_gst_analysis_report.py b/addons/l10n_sg_gst/report/account_gst_analysis_report.py new file mode 100644 index 00000000..2692b07b --- /dev/null +++ b/addons/l10n_sg_gst/report/account_gst_analysis_report.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +import time + +from flectra import api, models, _ +from flectra.exceptions import UserError +from flectra.addons.l10n_sg_gst.report.account_gst5_report import taxes_query, \ + gst_taxes_query + +class AccountGstAnalysisView(models.AbstractModel): + _name = 'report.l10n_sg_gst.account_gst_analysis_view' + + def compute_group_total(self, tax_browse, gst_taxes_result, group_name): + amount = 0.00 + for i in range(len(gst_taxes_result)): + if tax_browse.id == gst_taxes_result[i][0]: + if tax_browse.tax_group in group_name: + amount += gst_taxes_result[i][1] + return abs(amount) or 0.00 + + def compute_gst_total(self, tax_browse, texes_result, group_name): + tax_amount = 0.00 + for i in range(len(texes_result)): + if tax_browse.id == texes_result[i][0]: + if tax_browse.tax_group in group_name: + tax_amount += texes_result[i][1] + return abs(tax_amount) or 0.00 + + def get_common_data(self, tax_ids, data): + result = [] + gst_perc = standard_total = zeroed_total = exempted_total = mes_total \ + = out_scope_total = gross_amount_total = gst_amount_total = 0.0 + for tax_browse in tax_ids: + date_start = data['form']['date_from'] + date_stop = data['form']['date_to'] + self._cr.execute(taxes_query % ( + date_stop, date_start, self.env.user.company_id.id)) + texes_result = self._cr.fetchall() + self._cr.execute(gst_taxes_query % (date_stop, date_start)) + gst_taxes_result = self._cr.fetchall() + if tax_browse.amount_type == 'fixed': + gst_perc = tax_browse.amount * 100 + elif tax_browse.amount_type == 'percent': + gst_perc = tax_browse.amount + elif tax_browse.amount_type == 'group': + tax = [(6, 0, tax_browse.children_tax_ids)] + gst_perc += tax.amount + else: + gst_perc = tax_browse.amount + + standard = self.compute_group_total(tax_browse, + gst_taxes_result, ['standard_rates']) + standard_total += standard + zeroed = self.compute_group_total(tax_browse, + gst_taxes_result, ['zeroed']) + zeroed_total += zeroed + exempted = self.compute_group_total(tax_browse, + gst_taxes_result, ['exempted']) + exempted_total += exempted + mes = self.compute_group_total(tax_browse, + gst_taxes_result, ['MES']) + mes_total += mes + out_scope = self.compute_group_total(tax_browse, + gst_taxes_result, ['out_of_scope']) + out_scope_total += out_scope + gross_amount = self.compute_group_total(tax_browse, + gst_taxes_result, + ['standard_rates', 'zeroed', 'exempted', 'MES', + 'out_of_scope']) + gross_amount_total += gross_amount + gst_amount = self.compute_gst_total(tax_browse, + texes_result, + ['standard_rates', 'zeroed', 'exempted', 'MES', + 'out_of_scope']) + gst_amount_total += gst_amount + result.append({ + 'tax_name': tax_browse.name, + 'standard': standard, + 'zeroed': zeroed, + 'exempted': exempted, + 'mes': mes, + 'out_scope': out_scope, + 'gross_amount': gross_amount, + 'gst_amount': gst_amount, + 'gst_perc': gst_perc, + }) + total = { + 'standard_total': standard_total, + 'zeroed_total': zeroed_total, + 'exempted_total': exempted_total, + 'mes_total': mes_total, + 'out_scope_total': out_scope_total, + 'gross_amount_total': gross_amount_total, + 'gst_amount_total': gst_amount_total + } + return result, total + + def get_purchase_data(self, data): + tax_ids = self.env['account.tax'].search([('type_tax_use', '=', 'purchase')]) + return self.get_common_data(tax_ids, data) + + + def get_sale_data(self, data): + tax_ids = self.env['account.tax'].search([('type_tax_use', '=', 'sale')]) + return self.get_common_data(tax_ids, data) + + @api.model + def get_report_values(self, docids, data=None): + if not data.get('form') or not self.env.context.get( + 'active_model'): + raise UserError(_( + "Form content is missing, this report cannot be printed.")) + + model = self.env.context.get('active_model') + docs = self.env[model].browse(self.env.context.get('active_ids', [])) + + purchase_data, purchase_total = self.get_purchase_data(data) + sale_data, sale_total = self.get_sale_data(data) + return { + 'doc_ids': docids, + 'doc_model': model, + 'data': data, + 'docs': docs, + 'time': time, + 'get_sale_data': sale_data, + 'get_purchase_data': purchase_data, + 'get_sale_standard_total': sale_total['standard_total'], + 'get_sale_zeroed_total': sale_total['zeroed_total'], + 'get_sale_exempted_total': sale_total['exempted_total'], + 'get_sale_mes_total': sale_total['mes_total'], + 'get_sale_out_scope_total': sale_total['out_scope_total'], + 'get_sale_gross_amount_total': sale_total['gross_amount_total'], + 'get_sale_gst_amount_total': sale_total['gst_amount_total'], + 'get_purchase_standard_total': purchase_total['standard_total'], + 'get_purchase_zeroed_total': purchase_total['zeroed_total'], + 'get_purchase_exempted_total': purchase_total['exempted_total'], + 'get_purchase_mes_total': purchase_total['mes_total'], + 'get_purchase_out_scope_total': purchase_total['out_scope_total'], + 'get_purchase_gross_amount_total': purchase_total[ + 'gross_amount_total'], + 'get_purchase_gst_amount_total': purchase_total[ + 'gst_amount_total'], + } diff --git a/addons/l10n_sg_gst/report/report_gst_menu.xml b/addons/l10n_sg_gst/report/report_gst_menu.xml new file mode 100644 index 00000000..f8ec6af9 --- /dev/null +++ b/addons/l10n_sg_gst/report/report_gst_menu.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/l10n_sg_gst/report/report_paperformat.xml b/addons/l10n_sg_gst/report/report_paperformat.xml new file mode 100644 index 00000000..22979c6e --- /dev/null +++ b/addons/l10n_sg_gst/report/report_paperformat.xml @@ -0,0 +1,36 @@ + + + + + GST Report + + custom + 297 + 210 + Portrait + 30 + 20 + 5 + 5 + + 27 + 90 + + + + GST Report + + custom + 297 + 210 + Portrait + 35 + 28 + 7 + 7 + + 35 + 90 + + + diff --git a/addons/l10n_sg_gst/static/description/icon.png b/addons/l10n_sg_gst/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..809be7ad5ba8d5016054ed8a81872b4ab796891a GIT binary patch literal 79143 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 + + + + diff --git a/addons/l10n_sg_gst/views/account_gst7_report_view.xml b/addons/l10n_sg_gst/views/account_gst7_report_view.xml new file mode 100644 index 00000000..25926904 --- /dev/null +++ b/addons/l10n_sg_gst/views/account_gst7_report_view.xml @@ -0,0 +1,847 @@ + + + + + diff --git a/addons/l10n_sg_gst/views/account_gst_analysis_view.xml b/addons/l10n_sg_gst/views/account_gst_analysis_view.xml new file mode 100644 index 00000000..61405459 --- /dev/null +++ b/addons/l10n_sg_gst/views/account_gst_analysis_view.xml @@ -0,0 +1,214 @@ + + + + + + diff --git a/addons/l10n_sg_gst/views/account_tax_view.xml b/addons/l10n_sg_gst/views/account_tax_view.xml new file mode 100644 index 00000000..41c0ea08 --- /dev/null +++ b/addons/l10n_sg_gst/views/account_tax_view.xml @@ -0,0 +1,15 @@ + + + + + account.tax.inherit.form + account.tax + + + + + + + + + diff --git a/addons/l10n_sg_gst/views/layouts_gst.xml b/addons/l10n_sg_gst/views/layouts_gst.xml new file mode 100644 index 00000000..899fdbdb --- /dev/null +++ b/addons/l10n_sg_gst/views/layouts_gst.xml @@ -0,0 +1,91 @@ + + + + + + + diff --git a/addons/l10n_sg_gst/views/res_company_view.xml b/addons/l10n_sg_gst/views/res_company_view.xml new file mode 100644 index 00000000..2716fa3c --- /dev/null +++ b/addons/l10n_sg_gst/views/res_company_view.xml @@ -0,0 +1,30 @@ + + + + + + res.company.form + res.company + + + + + + + + + + + + res.partner.form + res.partner + + + + + + + + + + diff --git a/addons/l10n_sg_gst/wizard/__init__.py b/addons/l10n_sg_gst/wizard/__init__.py new file mode 100644 index 00000000..eb966874 --- /dev/null +++ b/addons/l10n_sg_gst/wizard/__init__.py @@ -0,0 +1,6 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + +from . import gst5_select_period +from . import gst7_select_period +from . import gst_analysis diff --git a/addons/l10n_sg_gst/wizard/gst5_select_period.py b/addons/l10n_sg_gst/wizard/gst5_select_period.py new file mode 100644 index 00000000..d7773e0c --- /dev/null +++ b/addons/l10n_sg_gst/wizard/gst5_select_period.py @@ -0,0 +1,37 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + + +from flectra import models, fields, api + + +class WizGst5Report(models.TransientModel): + _name = 'wiz.gst5.report' + _description = 'GST5 Report' + + company_id = fields.Many2one('res.company', string='Company', + required=True, + default=lambda self: self.env.user.company_id) + date_from = fields.Date(string="From", required=True) + date_to = fields.Date(string="To", required=True) + answer1_yes = fields.Boolean(string='Yes', default=False) + answer1_no = fields.Boolean(string='No', default=True) + answer2_yes = fields.Boolean(string='Yes', default=False) + answer2_no = fields.Boolean(string='No', default=True) + answer3_yes = fields.Boolean(string='Yes', default=False) + answer3_no = fields.Boolean(string='No', default=True) + + @api.multi + def print_report(self): + self.ensure_one() + [data] = self.read() + data['taxes'] = self.env.context.get('active_ids', []) + account_taxes = self.env['account.tax'].browse(data['taxes']) + data.update({'declaration_of_error': ''}) + datas = { + 'ids': [], + 'model': 'account.tax', + 'form': data + } + return self.env.ref('l10n_sg_gst.action_account_gst5_report_id').\ + report_action(account_taxes, data=datas) diff --git a/addons/l10n_sg_gst/wizard/gst5_select_period_view.xml b/addons/l10n_sg_gst/wizard/gst5_select_period_view.xml new file mode 100644 index 00000000..4dee9328 --- /dev/null +++ b/addons/l10n_sg_gst/wizard/gst5_select_period_view.xml @@ -0,0 +1,73 @@ + + + + + wiz.gst5.report.form + wiz.gst5.report + form + +
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ + + GST5 Report + wiz.gst5.report + ir.actions.act_window + form + form + + new + + + + + + +
diff --git a/addons/l10n_sg_gst/wizard/gst7_select_period.py b/addons/l10n_sg_gst/wizard/gst7_select_period.py new file mode 100644 index 00000000..2635c4a1 --- /dev/null +++ b/addons/l10n_sg_gst/wizard/gst7_select_period.py @@ -0,0 +1,65 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + + +import re + +from flectra import models, fields, api, _ +from flectra.exceptions import ValidationError + + +class WizGst7Report(models.TransientModel): + _name = 'wiz.gst7.report' + _description = 'GST7 Report' + + company_id = fields.Many2one( + 'res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) + date_from = fields.Date(string="From", required=True) + date_to = fields.Date(string="To", required=True) + answer1_yes = fields.Boolean(string='Yes', default=False) + answer1_no = fields.Boolean(string='No', default=True) + answer2_yes = fields.Boolean(string='Yes', default=False) + answer2_no = fields.Boolean(string='No', default=True) + answer3_yes = fields.Boolean(string='Yes', default=False) + answer3_no = fields.Boolean(string='No', default=True) + declaration_of_error = fields.Text(string="Declaration of Errors", + size=200) + + @api.constrains('declaration_of_error') + def check_declaration_of_error(self): + if len(self.declaration_of_error) > 200: + raise ValidationError( + 'Number of characters must on exceed 200') + + def _check_value(self): + pattern = "^[a-z A-Z]*$" + for data in self: + if re.match(pattern, data.declaration_of_error): + return True + else: + return False + if len(self.declaration_of_error) > 200: + raise ValidationError(_( + 'Number of characters must on exceed 200')) + return {} + + _constraints = [ + (_check_value, 'Please do not enter any symbol in this field".', + ['declaration_of_error']), + ] + + @api.multi + def print_report(self): + self.ensure_one() + [data] = self.read() + data['taxes'] = self.env.context.get('active_ids', []) + account_taxes = self.env['account.tax'].browse(data['taxes']) + datas = { + 'ids': [], + 'model': 'account.tax', + 'form': data + } + return self.env.ref( + 'l10n_sg_gst.action_account_gst7_report_id').report_action( + account_taxes, data=datas) diff --git a/addons/l10n_sg_gst/wizard/gst7_select_period_view.xml b/addons/l10n_sg_gst/wizard/gst7_select_period_view.xml new file mode 100644 index 00000000..e15677f8 --- /dev/null +++ b/addons/l10n_sg_gst/wizard/gst7_select_period_view.xml @@ -0,0 +1,71 @@ + + + + + wiz.gst7.report.form + wiz.gst7.report + form + +
+ + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + GST7 Report + wiz.gst7.report + ir.actions.act_window + form + form + + new + + + + +
diff --git a/addons/l10n_sg_gst/wizard/gst_analysis.py b/addons/l10n_sg_gst/wizard/gst_analysis.py new file mode 100644 index 00000000..5cf06286 --- /dev/null +++ b/addons/l10n_sg_gst/wizard/gst_analysis.py @@ -0,0 +1,27 @@ +# Part of Flectra. See LICENSE file for full copyright and licensing +# details. + + +from flectra import models, fields, api + + +class WizGstAnalysis(models.TransientModel): + _name = 'wiz.gst.analysis' + _description = 'GST Analysis' + + company_id = fields.Many2one( + 'res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) + date_from = fields.Date(string="From", required=True) + date_to = fields.Date(string="To", required=True) + + @api.multi + def print_report(self): + datas = {'ids': self.env.context.get('active_ids', [])} + res = self.read( + ['company_id', 'date_from', 'date_to']) + res = res and res[0] or {} + datas['form'] = res + return self.env.ref( + 'l10n_sg_gst.action_account_gst_analysis').report_action([], + data=datas) diff --git a/addons/l10n_sg_gst/wizard/gst_analysis_view.xml b/addons/l10n_sg_gst/wizard/gst_analysis_view.xml new file mode 100644 index 00000000..724fbcb9 --- /dev/null +++ b/addons/l10n_sg_gst/wizard/gst_analysis_view.xml @@ -0,0 +1,46 @@ + + + + + wiz.gst.analysis.form + wiz.gst.analysis + form + +
+ + + + + + + + +
+ +
+
+
+
+ + + GST Analysis + wiz.gst.analysis + ir.actions.act_window + form + form + + new + + + + +