From 480466d1d352a8e0a73ad60ccbbfa86aa65979e8 Mon Sep 17 00:00:00 2001 From: Chaithat Bunneramit Date: Wed, 17 Jun 2020 12:45:11 +0700 Subject: [PATCH 1/6] =?UTF-8?q?#4633=5Fadd=5Fdownload=5Fin=5Fmore=5Fmenu?= =?UTF-8?q?=20Module=20:=20pabi=5Fasset=5Fimport=5Fbatch=20FI=20:=20Downlo?= =?UTF-8?q?ad=20Asset=20Master=20=E0=B9=80=E0=B8=9E=E0=B8=B7=E0=B9=88?= =?UTF-8?q?=E0=B8=AD=20Import=20Asset=20Issues=20:=20https://mobileapp.nst?= =?UTF-8?q?da.or.th/redmine/issues/4633?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pabi_asset_import_batch/__openerp__.py | 2 + pabi_asset_import_batch/models/__init__.py | 1 + .../models/asset_register_report.py | 423 ++++++++++++++++++ .../views/asset_register_report.xml | 88 ++++ .../xlsx_template/import_asset.xlsx | Bin 0 -> 22328 bytes .../xlsx_template/load_template.xml | 3 +- .../xlsx_template/templates.xml | 63 ++- .../xlsx_template/xlsx_template_wizard.xml | 13 +- 8 files changed, 590 insertions(+), 3 deletions(-) create mode 100644 pabi_asset_import_batch/models/asset_register_report.py create mode 100644 pabi_asset_import_batch/views/asset_register_report.xml create mode 100644 pabi_asset_import_batch/xlsx_template/import_asset.xlsx diff --git a/pabi_asset_import_batch/__openerp__.py b/pabi_asset_import_batch/__openerp__.py index 6e0efc2eb..94429a601 100644 --- a/pabi_asset_import_batch/__openerp__.py +++ b/pabi_asset_import_batch/__openerp__.py @@ -7,6 +7,7 @@ "category": "Customs Modules", "depends": [ "pabi_asset_management", + "pabi_account_report", ], "description": """This module allow import asset batch.""", "data": [ @@ -16,6 +17,7 @@ "xlsx_template/templates.xml", "xlsx_template/load_template.xml", "xlsx_template/xlsx_template_wizard.xml", + "views/asset_register_report.xml", ], 'installable': True, } diff --git a/pabi_asset_import_batch/models/__init__.py b/pabi_asset_import_batch/models/__init__.py index c2cffdc92..b333d5164 100644 --- a/pabi_asset_import_batch/models/__init__.py +++ b/pabi_asset_import_batch/models/__init__.py @@ -1,2 +1,3 @@ # -*- coding: utf-8 -*- from . import asset_import_batch +from . import asset_register_report diff --git a/pabi_asset_import_batch/models/asset_register_report.py b/pabi_asset_import_batch/models/asset_register_report.py new file mode 100644 index 000000000..bb52feab6 --- /dev/null +++ b/pabi_asset_import_batch/models/asset_register_report.py @@ -0,0 +1,423 @@ +# -*- coding: utf-8 -*- +from openerp import models, fields, api, _ +from openerp.exceptions import ValidationError + + +REFERENCE_SELECT = [ + ('res.section', 'Section'), + ('res.project', 'Project'), + ('res.invest.asset', 'Invest Asset'), + ('res.invest.construction.phase', 'Invest Construction Phase'), +] + +class AssetRegisterReportDownload(models.TransientModel): + _name = 'asset.register.report.dowload' + _inherit = ['report.account.common','account.asset.import.batch'] + + filter = fields.Selection( + readonly=True, + default='filter_date', + ) + asset_status_ids = fields.Many2many( + 'account.asset.status', + string='Asset Status', + ) + asset_filter = fields.Text( + string='Filter', + help="More filter. You can use complex search with comma and between.", + ) + asset_ids = fields.Many2many( + 'account.asset', + string='Asset Code', + ) + count_asset = fields.Integer( + compute='_compute_count_asset', + string='Asset Count', + ) + asset_profile_ids = fields.Many2many( + 'account.asset.profile', + string='Asset Profile', + required=False, + ) + responsible_person_ids = fields.Many2many( + 'res.users', + string='Responsible Person', + ) + building_ids = fields.Many2many( + 'res.building', + string='Building', + ) + floor_ids = fields.Many2many( + 'res.floor', + string='Floor', + ) + room_ids = fields.Many2many( + 'res.room', + string='Room', + ) + org_ids = fields.Many2many( + 'res.org', + string='Org', + ) + asset_state = fields.Many2many( + 'xlsx.report.status', + string='Asset State', + domain=[('location', '=', 'asset.register.view')], + default=lambda self: self.env['xlsx.report.status'].search([('location', '=', 'asset.register.view'),('status', 'in', ['draft', 'open', 'close', 'removed'])]), + ) + account_ids = fields.Many2many( + 'account.account', + string='Account Code', + ) + costcenter_ids = fields.Many2many( + 'res.costcenter', + string='Cost Center', + ) + division_ids = fields.Many2many( + 'res.division', + string='Division', + ) + sector_ids = fields.Many2many( + 'res.sector', + string='Sector', + ) + subsector_ids = fields.Many2many( + 'res.subsector', + string='Subsector', + ) + current_year = fields.Many2one( + 'account.fiscalyear', + string='Current Year', + default=lambda self: self._get_fiscalyear(), + + ) + # Note: report setting + accum_depre_account_type = fields.Many2one( + 'account.account.type', + string='Account Type for Accum.Depre.', + required=True, + help="Define account type for accumulated depreciation account, " + "to be used in report query SQL." + ) + depre_account_type = fields.Many2one( + 'account.account.type', + string='Account Type for Depre.', + required=True, + help="Define account type for depreciation account, " + "to be used in report query SQL." + ) + + # More fileter + budget_filter = fields.Text( + string='Filter', + help="More filter. You can use complex search with comma and between.", + ) + budget = fields.Many2many( + 'chartfield.view', + 'asset_register_chartfield_rel', + 'wizard_id', 'chartfield_id', + string='Source Budget', + domain=[('model', '!=', 'res.personnel.costcenter')], + ) + count_budget = fields.Integer( + compute='_compute_count_budget', + string='Budget Count', + ) + owner_budget_filter = fields.Text( + string='Filter', + help="More filter. You can use complex search with comma and between.", + ) + owner_budget = fields.Many2many( + 'chartfield.view', + 'asset_register_owner_chartfield_rel', + 'wizard_id', 'chartfield_id', + string='Owner Budget', + domain=[('model', '!=', 'res.personnel.costcenter')], + ) + count_owner_budget = fields.Integer( + compute='_compute_count_budget', + string='Budget Count', + ) + asset_active = fields.Selection( + [('active', 'Active'), + ('inactive', 'Inactive')], + string='Asset Active', + #default='active', + ) + results = fields.Many2many( + 'asset.register.view', + string='Results', + compute='_compute_results', + help='Use compute fields, so there is nothing store in database', + ) + + @api.multi + @api.depends('asset_ids') + def _compute_count_asset(self): + for rec in self: + rec.count_asset = len(rec.asset_ids) + + @api.multi + @api.depends('budget', 'owner_budget') + def _compute_count_budget(self): + for rec in self: + rec.count_budget = len(rec.budget) + rec.count_owner_budget = len(rec.owner_budget) + # @api.onchange('building_id') + # def _onchange_building_id(self): + # self.floor_id = False + # self.room_id = False + # + # @api.onchange('floor_id') + # def _onchange_floor_id(self): + # self.room_id = False + + @api.model + def _domain_to_where_str(self, domain): + """ Helper Function for better performance """ + where_dom = [" %s %s %s " % (x[0], x[1], isinstance(x[2], basestring) + and "'%s'" % x[2] or x[2]) for x in domain] + where_str = 'and'.join(where_dom) + return where_str + + @api.multi + def _compute_results(self): + self.ensure_one() + dom = [] + # Prepare DOM to filter assets + if self.asset_ids: + dom += [('id', 'in', tuple(self.asset_ids.ids + [0]))] + if self.asset_profile_ids: + dom += [('profile_id', 'in', + tuple(self.asset_profile_ids.ids + [0]))] + if self.responsible_person_ids: + dom += [('responsible_user_id', 'in', + tuple(self.responsible_person_ids.ids + [0]))] + if self.org_ids: + dom += [('owner_org_id', 'in', tuple(self.org_ids.ids + [0]))] + if self.asset_status_ids: + dom += [('status', 'in', + tuple(self.asset_status_ids.ids + [0]))] + if self.account_ids: + dom += [('account_asset_id', 'in', + tuple(self.account_ids.ids + [0]))] + if self.budget: + dom_budget = \ + ["%s,%s" % ((x.model).encode('utf-8'), x.res_id) + for x in self.budget] + dom += [('budget', 'in', tuple(dom_budget + ['0']))] + if self.owner_budget: + dom_owner = \ + ["%s,%s" % ((x.model).encode('utf-8'), x.res_id) + for x in self.owner_budget] + dom += [('owner_budget', 'in', tuple(dom_owner + ['0']))] + if self.costcenter_ids: + dom += [('owner_costcenter_id', 'in', + tuple(self.costcenter_ids.ids + [0]))] + if self.division_ids: + dom += [('owner_division_id', 'in', + tuple(self.division_ids.ids + [0]))] + if self.sector_ids: + dom += [('owner_sector_id', 'in', + tuple(self.sector_ids.ids + [0]))] + if self.subsector_ids: + dom += [('owner_subsector_id', 'in', + tuple(self.subsector_ids.ids + [0]))] + if self.asset_state: + res, state_name = [], self.asset_state + for state in self.asset_state: + state_name = self.env['xlsx.report.status'].search([('id', '=', state.id)]) + res += [str(state_name.status)] + if len(self.asset_state) == 1 : dom += [('state', '=', str(state_name.status))] + else : dom += [('state', 'in', tuple(res))] + + if self.building_ids: + dom += [('building_id', 'in', tuple(self.building_ids.ids + [0]))] + if self.floor_ids: + dom += [('floor_id', 'in', tuple(self.floor_ids.ids + [0]))] + if self.room_ids: + dom += [('room_id', 'in', tuple(self.room_ids.ids + [0]))] + if self.asset_active: + dom += [('active', '=', True if (self.asset_active == 'active') else False)] + # date_start <= date_end + if self.date_end: + dom += [('date_start', '<=', self.date_end)] + + # Prepare fixed params + date_start = False + date_end = False + + if self.filter == 'filter_date': + date_start = self.date_start #self.fiscalyear_start_id.date_start + date_end = self.date_end + if self.filter == 'filter_period': + date_start = self.period_start_id.date_start + date_end = self.period_end_id.date_stop + if not date_start or not date_end: + raise ValidationError(_('Please provide from and to dates.')) + accum_depre_account_ids = self.env['account.account'].search( + [('user_type', '=', self.accum_depre_account_type.id)]).ids + depre_account_ids = self.env['account.account'].search( + [('user_type', '=', self.depre_account_type.id)]).ids + where_str = self._domain_to_where_str(dom) + if where_str: + where_str = 'where ' + where_str + self._cr.execute(""" + select * + from ( + select a.*, a.id asset_id, aap.account_asset_id, + aa.code as account_code, aa.name as account_name, + -- purchase_bf_current + case when date_part('year', a.date_start+92) != + CAST(%s AS int) then a.purchase_value + else null end as purchase_before_current, + -- purchase_current + case when date_part('year', a.date_start+92) = + CAST(%s AS int) then a.purchase_value + else null end as purchase_current, + -- net_book_value + (select a.purchase_value - coalesce(sum(credit-debit), 0.0) + from account_move_line ml + where account_id in %s -- accumulated account + and ml.date <= %s -- date end + and asset_id = a.id) net_book_value, + -- budget_type + case when a.section_id is not null then 'Section' + when a.project_id is not null then 'Project' + when a.invest_asset_id is not null then 'Invest Asset' + when a.invest_construction_phase_id is not null + then 'Invest Construction Phase' + else null end as budget_type, + -- budget + case when a.section_id is not null then + concat('res.section,', a.section_id) + when a.project_id is not null then + concat('res.project,', a.project_id) + when a.invest_asset_id is not null then + concat('res.invest.asset,', a.invest_asset_id) + when a.invest_construction_phase_id is not null then + concat('res.invest.construction.phase,', + a.invest_construction_phase_id) + else null end as budget, + -- owner_org_id + case + when a.owner_section_id is not null then rs.org_id + when a.owner_project_id is not null then rp.org_id + when a.owner_invest_asset_id is not null then ria.org_id + when a.owner_invest_construction_phase_id is not null then ricp.org_id + else null + end as owner_org_id, + -- owner_budget + case when a.owner_section_id is not null then + concat('res.section,', a.owner_section_id) + when a.owner_project_id is not null then + concat('res.project,', a.owner_project_id) + when a.owner_invest_asset_id is not null then + concat('res.invest.asset,', a.owner_invest_asset_id) + when a.owner_invest_construction_phase_id is not null + then concat('res.invest.construction.phase,', + a.owner_invest_construction_phase_id) + else null end as owner_budget, + -- owner_costcenter + case when a.owner_section_id is not null then + rs.costcenter_id + when a.owner_project_id is not null then + rp.costcenter_id + when a.owner_invest_asset_id is not null then + ria.costcenter_id + when a.owner_invest_construction_phase_id is not null then + ricp.costcenter_id + else null end as owner_costcenter_id, + -- owner_division + case when a.owner_section_id is not null then + rs.division_id + else null end as owner_division_id, + -- owner_sector + case when a.owner_section_id is not null then + rs.sector_id + else null end as owner_sector_id, + -- owner_subsector + case when a.owner_section_id is not null then + rs.subsector_id + else null end as owner_subsector_id, + -- depreciation + (select coalesce(sum(debit-credit), 0.0) + from account_move_line ml + where account_id in %s -- depreciation account + and ml.date between %s and %s + and asset_id = a.id) depreciation, + -- accumulated_cf + (select coalesce(sum(credit-debit), 0.0) + from account_move_line ml + where account_id in %s -- accumulated account + and ml.date <= %s -- date end + and asset_id = a.id) accumulated_cf, + -- accumulated_bf + (select coalesce(sum(credit-debit), 0.0) + from account_move_line ml + where account_id in %s -- accumulatedp account + and ml.date < %s -- date start + and asset_id = a.id) accumulated_bf + from + account_asset a + left join account_asset_profile aap on a.profile_id = aap.id + left join res_section rs on a.owner_section_id = rs.id + left join res_project rp on a.owner_project_id = rp.id + left join res_invest_asset ria on a.owner_invest_asset_id = ria.id + left join res_invest_construction_phase ricp on + a.owner_invest_construction_phase_id = ricp.id + left join account_account aa on aap.account_asset_id = aa.id + ) asset + """ + where_str + 'order by asset.account_code, asset.code', + (self.fiscalyear_start_id.name,self.fiscalyear_start_id.name, + tuple(accum_depre_account_ids), date_end, + tuple(depre_account_ids), date_start, date_end, + tuple(accum_depre_account_ids), date_end, + tuple(accum_depre_account_ids), date_start)) + + results = self._cr.dictfetchall() + ReportLine = self.env['asset.register.view'] + self.results = [ReportLine.new(line).id for line in results] + return True + + # @api.multi + # def action_get_report(self): + # action = self.env.ref( + # 'pabi_account_report.action_asset_register_report_form') + # return super(AssetRegisterReport, self).action_get_report() + + @api.onchange('asset_filter') + def _onchange_asset_filter(self): + self.asset_ids = [] + Asset = self.env['account.asset'] + dom = [] + if self.asset_filter: + codes = self.asset_filter.split('\n') + codes = [x.strip() for x in codes] + codes = ','.join(codes) + dom.append(('code', 'ilike', codes)) + self.asset_ids = Asset.with_context(active_test=False).search(dom, order='id') + + @api.onchange('budget_filter') + def _onchange_budget_filter(self): + self.budget = [] + Chartfield = self.env['chartfield.view'] + dom = [] + if self.budget_filter: + codes = self.budget_filter.split('\n') + codes = [x.strip() for x in codes] + codes = ','.join(codes) + dom.append(('code', 'ilike', codes)) + self.budget = Chartfield.search(dom, order='id') + + @api.onchange('owner_budget_filter') + def _onchange_owner_budget_filter(self): + self.budget = [] + Chartfield = self.env['chartfield.view'] + dom = [] + if self.owner_budget_filter: + codes = self.owner_budget_filter.split('\n') + codes = [x.strip() for x in codes] + codes = ','.join(codes) + dom.append(('code', 'ilike', codes)) + self.owner_budget = Chartfield.search(dom, order='id') diff --git a/pabi_asset_import_batch/views/asset_register_report.xml b/pabi_asset_import_batch/views/asset_register_report.xml new file mode 100644 index 000000000..d2b797f62 --- /dev/null +++ b/pabi_asset_import_batch/views/asset_register_report.xml @@ -0,0 +1,88 @@ + + + + + view.asset.register.report.form + asset.register.report.dowload + + primary + + + True + + + True + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Define account type for accumulated depreciation account, to be used in report query SQL (one time setup). +

+ + + + + + +
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/pabi_asset_import_batch/xlsx_template/import_asset.xlsx b/pabi_asset_import_batch/xlsx_template/import_asset.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5c4a66f19e847df47d5da0a4a87635d98c2125a4 GIT binary patch literal 22328 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 - + pabi_asset_import_batch/xlsx_template diff --git a/pabi_asset_import_batch/xlsx_template/templates.xml b/pabi_asset_import_batch/xlsx_template/templates.xml index e40a9fa55..750005c2f 100644 --- a/pabi_asset_import_batch/xlsx_template/templates.xml +++ b/pabi_asset_import_batch/xlsx_template/templates.xml @@ -70,6 +70,67 @@ } - + + + + asset.register.report.dowload + + import_asset.xlsx + Download Asset Batch + + + { + '__IMPORT__': { + 1: { + '_HEAD_': { + }, + 'asset_batch_ids': { + 'A3': 'code', + 'B3': 'code2', + 'C3': 'name', + 'D3': 'status', + 'E3': 'is_standard', + 'F3': 'asset_brand', + 'G3': 'asset_model', + 'H3': 'purchase_value', + 'I3': 'salvage_value', + 'J3': 'date_start', + 'K3': 'section_id', + 'L3': 'project_id', + 'M3': 'invest_asset_id', + 'N3': 'invest_construction_phase_id', + 'O3': 'profile_id', + 'P3': 'product_id', + 'Q3': 'purchase_id', + 'R3': 'partner_id', + 'S3': 'method_number', + 'T3': 'owner_section_id', + 'U3': 'owner_project_id', + 'V3': 'owner_invest_asset_id', + 'W3': 'owner_invest_construction_phase_id', + 'X3': 'asset_purchase_method_id', + 'Y3': 'responsible_user_id', + 'Z3': 'room_id', + 'AA3': 'floor_id', + 'AB3': 'building_id', + 'AC3': 'serial_number', + 'AD3': 'warranty_start_date', + 'AE3': 'warranty_expire_date', + 'AF3': 'code', + 'AG3': 'method_period', + 'AH3': 'days_calc', + 'AI3': 'prorata', + # depreciation_lines + 'AJ3': 'line_date', + 'AK3': 'line_days', + 'AL3': 'amount', + 'AM3': 'init_entry', + } + } + } + } + + + diff --git a/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml b/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml index 365ed1590..c88a0e644 100644 --- a/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml +++ b/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml @@ -14,6 +14,17 @@ - + + + + From b7f34c928eabad7246ee2e78b655ee2d00157e1a Mon Sep 17 00:00:00 2001 From: Chaithat Bunneramit Date: Wed, 17 Jun 2020 16:04:29 +0700 Subject: [PATCH 2/6] fix_export --- pabi_asset_import_batch/__openerp__.py | 2 +- pabi_asset_import_batch/models/__init__.py | 2 +- ...ister_report.py => asset_export_report.py} | 6 +- ...ter_report.xml => asset_export_report.xml} | 6 +- .../xlsx_template/export_asset.xlsx | Bin 0 -> 14694 bytes .../xlsx_template/import_asset.xlsx | Bin 22328 -> 0 bytes .../xlsx_template/load_template.xml | 2 +- .../xlsx_template/templates.xml | 105 +++++++++--------- .../xlsx_template/xlsx_template_wizard.xml | 6 +- 9 files changed, 62 insertions(+), 67 deletions(-) rename pabi_asset_import_batch/models/{asset_register_report.py => asset_export_report.py} (98%) rename pabi_asset_import_batch/views/{asset_register_report.xml => asset_export_report.xml} (95%) create mode 100644 pabi_asset_import_batch/xlsx_template/export_asset.xlsx delete mode 100644 pabi_asset_import_batch/xlsx_template/import_asset.xlsx diff --git a/pabi_asset_import_batch/__openerp__.py b/pabi_asset_import_batch/__openerp__.py index 94429a601..0ac24273f 100644 --- a/pabi_asset_import_batch/__openerp__.py +++ b/pabi_asset_import_batch/__openerp__.py @@ -17,7 +17,7 @@ "xlsx_template/templates.xml", "xlsx_template/load_template.xml", "xlsx_template/xlsx_template_wizard.xml", - "views/asset_register_report.xml", + "views/asset_export_report.xml", ], 'installable': True, } diff --git a/pabi_asset_import_batch/models/__init__.py b/pabi_asset_import_batch/models/__init__.py index b333d5164..e5a06df9d 100644 --- a/pabi_asset_import_batch/models/__init__.py +++ b/pabi_asset_import_batch/models/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- from . import asset_import_batch -from . import asset_register_report +from . import asset_export_report diff --git a/pabi_asset_import_batch/models/asset_register_report.py b/pabi_asset_import_batch/models/asset_export_report.py similarity index 98% rename from pabi_asset_import_batch/models/asset_register_report.py rename to pabi_asset_import_batch/models/asset_export_report.py index bb52feab6..e643f891e 100644 --- a/pabi_asset_import_batch/models/asset_register_report.py +++ b/pabi_asset_import_batch/models/asset_export_report.py @@ -10,9 +10,9 @@ ('res.invest.construction.phase', 'Invest Construction Phase'), ] -class AssetRegisterReportDownload(models.TransientModel): - _name = 'asset.register.report.dowload' - _inherit = ['report.account.common','account.asset.import.batch'] +class AssetExportReport(models.TransientModel): + _name = 'asset.export.report' + _inherit = 'report.account.common' filter = fields.Selection( readonly=True, diff --git a/pabi_asset_import_batch/views/asset_register_report.xml b/pabi_asset_import_batch/views/asset_export_report.xml similarity index 95% rename from pabi_asset_import_batch/views/asset_register_report.xml rename to pabi_asset_import_batch/views/asset_export_report.xml index d2b797f62..d24b85299 100644 --- a/pabi_asset_import_batch/views/asset_register_report.xml +++ b/pabi_asset_import_batch/views/asset_export_report.xml @@ -1,9 +1,9 @@ - - view.asset.register.report.form - asset.register.report.dowload + + view.asset.export.report.form + asset.export.report primary diff --git a/pabi_asset_import_batch/xlsx_template/export_asset.xlsx b/pabi_asset_import_batch/xlsx_template/export_asset.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1daa1db5ce29afa0dd59aeb98ecd92e33318f9e5 GIT binary patch literal 14694 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΁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 literal 0 HcmV?d00001 diff --git a/pabi_asset_import_batch/xlsx_template/import_asset.xlsx b/pabi_asset_import_batch/xlsx_template/import_asset.xlsx deleted file mode 100644 index 5c4a66f19e847df47d5da0a4a87635d98c2125a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22328 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 + ref('export_asset_master'),]"/> pabi_asset_import_batch/xlsx_template diff --git a/pabi_asset_import_batch/xlsx_template/templates.xml b/pabi_asset_import_batch/xlsx_template/templates.xml index 750005c2f..7f5bf2f1a 100644 --- a/pabi_asset_import_batch/xlsx_template/templates.xml +++ b/pabi_asset_import_batch/xlsx_template/templates.xml @@ -72,65 +72,60 @@ - - asset.register.report.dowload + + asset.export.report - import_asset.xlsx - Download Asset Batch + export_asset.xlsx + Export Asset Master - { - '__IMPORT__': { - 1: { - '_HEAD_': { - }, - 'asset_batch_ids': { - 'A3': 'code', - 'B3': 'code2', - 'C3': 'name', - 'D3': 'status', - 'E3': 'is_standard', - 'F3': 'asset_brand', - 'G3': 'asset_model', - 'H3': 'purchase_value', - 'I3': 'salvage_value', - 'J3': 'date_start', - 'K3': 'section_id', - 'L3': 'project_id', - 'M3': 'invest_asset_id', - 'N3': 'invest_construction_phase_id', - 'O3': 'profile_id', - 'P3': 'product_id', - 'Q3': 'purchase_id', - 'R3': 'partner_id', - 'S3': 'method_number', - 'T3': 'owner_section_id', - 'U3': 'owner_project_id', - 'V3': 'owner_invest_asset_id', - 'W3': 'owner_invest_construction_phase_id', - 'X3': 'asset_purchase_method_id', - 'Y3': 'responsible_user_id', - 'Z3': 'room_id', - 'AA3': 'floor_id', - 'AB3': 'building_id', - 'AC3': 'serial_number', - 'AD3': 'warranty_start_date', - 'AE3': 'warranty_expire_date', - 'AF3': 'code', - 'AG3': 'method_period', - 'AH3': 'days_calc', - 'AI3': 'prorata', - # depreciation_lines - 'AJ3': 'line_date', - 'AK3': 'line_days', - 'AL3': 'amount', - 'AM3': 'init_entry', - } - } - } - } + { + '__EXPORT__': { + 'Assets': { + '_HEAD_': { + }, + 'results': { + 'A3': 'code${value or ""}#{number_format=text}', + 'B3': 'code2${value or ""}#{number_format=text}', + 'C3': 'name${value or ""}#{number_format=text}', + 'D3': 'status${value and value.name or ""}#{number_format=text}', + 'E3': 'is_standard${value or ""}#{number_format=text}', + 'F3': 'asset_brand${value or ""}#{number_format=text}', + 'G3': 'asset_model${value or ""}#{number_format=text}', + 'H3': 'purchase_value${value or ""}#{number_format=text}', + 'I3': 'salvage_value${value or ""}#{number_format=text}', + 'J3': 'date_start${value and env["account.fiscalyear"].browse(env["account.fiscalyear"].find(value)).name or ""}#{number_format=text}', + 'K3': 'section_id${value and value.name or ""}#{number_format=text}', + 'L3': 'project_id${value and value.name or ""}#{number_format=text}', + 'M3': 'invest_asset_id${value and value.name or ""}#{number_format=text}', + 'N3': 'invest_construction_phase_id${value and value.name or ""}#{number_format=text}', + 'O3': 'profile_id${value and value.name or ""}#{number_format=text}', + 'P3': 'product_id${value and value.name or ""}#{number_format=text}', + 'Q3': 'purchase_id${value and value.name or ""}#{number_format=text}', + 'R3': 'partner_id${value and value.name or ""}#{number_format=text}', + 'S3': 'method_number${value or 0}#{number_format=text}', + 'T3': 'owner_section_id${value and value.name or ""}#{number_format=text}', + 'U3': 'owner_project_id${value and value.name or ""}#{number_format=text}', + 'V3': 'owner_invest_asset_id${value and value.name or ""}#{number_format=text}', + 'W3': 'owner_invest_construction_phase_id${value and value.name or ""}#{number_format=text}', + 'X3': 'asset_purchase_method_id${value and value.name or ""}#{number_format=text}', + 'Y3': 'responsible_user_id${value and value.name or ""}#{number_format=text}', + 'Z3': 'room_id${value and value.name or ""}#{number_format=text}', + 'AA3': 'floor_id${value and value.name or ""}#{number_format=text}', + 'AB3': 'building_id${value and value.name or ""}#{number_format=text}', + 'AC3': 'serial_number${value or ""}#{number_format=text}', + 'AD3': 'warranty_start_date${value or ""}#{number_format=date}', + 'AE3': 'warranty_expire_date${value or ""}#{number_format=date}', + 'AF3': 'code${value or ""}#{number_format=text}', + 'AG3': 'method_period${value or 0}#{number_format=text}', + 'AH3': 'days_calc${value or ""}#{number_format=date}', + 'AI3': 'prorata${value or ""}#{number_format=text}', + } + } + } + } - + diff --git a/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml b/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml index c88a0e644..9bfac0cdd 100644 --- a/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml +++ b/pabi_asset_import_batch/xlsx_template/xlsx_template_wizard.xml @@ -16,10 +16,10 @@ - Date: Fri, 3 Jul 2020 15:30:20 +0700 Subject: [PATCH 3/6] Fix_Report MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Module : pabi_asset_import_batch แก้ไขการแสดงผลในรายงาน Export Asset Master Issues : https://mobileapp.nstda.or.th/redmine/issues/4633 --- pabi_asset_import_batch/xlsx_template/templates.xml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pabi_asset_import_batch/xlsx_template/templates.xml b/pabi_asset_import_batch/xlsx_template/templates.xml index 7f5bf2f1a..ae1423706 100644 --- a/pabi_asset_import_batch/xlsx_template/templates.xml +++ b/pabi_asset_import_batch/xlsx_template/templates.xml @@ -85,7 +85,7 @@ '_HEAD_': { }, 'results': { - 'A3': 'code${value or ""}#{number_format=text}', + 'A3': 'code', 'B3': 'code2${value or ""}#{number_format=text}', 'C3': 'name${value or ""}#{number_format=text}', 'D3': 'status${value and value.name or ""}#{number_format=text}', @@ -116,16 +116,20 @@ 'AC3': 'serial_number${value or ""}#{number_format=text}', 'AD3': 'warranty_start_date${value or ""}#{number_format=date}', 'AE3': 'warranty_expire_date${value or ""}#{number_format=date}', - 'AF3': 'code${value or ""}#{number_format=text}', + 'AF3': 'note${value or ""}#{number_format=text}', 'AG3': 'method_period${value or 0}#{number_format=text}', - 'AH3': 'days_calc${value or ""}#{number_format=date}', + 'AH3': 'days_calc${value or ""}#{number_format=text}', 'AI3': 'prorata${value or ""}#{number_format=text}', + # depreciation_lines + 'AJ3': 'depreciation4${value or ""}#{number_format=date}', + 'AK3': 'depreciation2${value or ""}#{number_format=text}', + 'AL3': 'depreciation3${value or ""}#{number_format=text}', + 'AM3': 'depreciation1${value or ""}#{number_format=text}', } } } } - From 702c822baec4bb785e5a2b3f652a18f2b5034a21 Mon Sep 17 00:00:00 2001 From: Waritchapat Kaewsuriyaporn Date: Fri, 17 Jul 2020 14:31:05 +0700 Subject: [PATCH 4/6] =?UTF-8?q?Fix=5FView=5Fand=5FReport=20Module=20:=20pa?= =?UTF-8?q?bi=5Fasset=5Fimport=5Fbatch=20=E0=B9=81=E0=B8=81=E0=B9=89?= =?UTF-8?q?=E0=B9=84=E0=B8=82=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B9=81=E0=B8=AA?= =?UTF-8?q?=E0=B8=94=E0=B8=87=E0=B8=9C=E0=B8=A5=E0=B9=83=E0=B8=99=E0=B8=A3?= =?UTF-8?q?=E0=B8=B2=E0=B8=A2=E0=B8=87=E0=B8=B2=E0=B8=99=20Export=20Asset?= =?UTF-8?q?=20Master=20=E0=B9=81=E0=B8=A5=E0=B8=B0=20=20Clone=20Code=20?= =?UTF-8?q?=E0=B8=88=E0=B8=B2=E0=B8=81=20=20#4631=20=E0=B9=80=E0=B8=82?= =?UTF-8?q?=E0=B9=89=E0=B8=B2=E0=B8=A1=E0=B8=B2=20Issues=20:=20https://mob?= =?UTF-8?q?ileapp.nstda.or.th/redmine/issues/4633?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/asset_export_report.py | 10 ++-- .../models/asset_import_batch.py | 5 +- .../views/asset_import_batch_view.xml | 2 + .../xlsx_template/export_asset.xlsx | Bin 14694 -> 14211 bytes .../xlsx_template/templates.xml | 44 +++++++++--------- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/pabi_asset_import_batch/models/asset_export_report.py b/pabi_asset_import_batch/models/asset_export_report.py index e643f891e..03003ae0e 100644 --- a/pabi_asset_import_batch/models/asset_export_report.py +++ b/pabi_asset_import_batch/models/asset_export_report.py @@ -63,7 +63,7 @@ class AssetExportReport(models.TransientModel): 'xlsx.report.status', string='Asset State', domain=[('location', '=', 'asset.register.view')], - default=lambda self: self.env['xlsx.report.status'].search([('location', '=', 'asset.register.view'),('status', 'in', ['draft', 'open', 'close', 'removed'])]), + default=lambda self: self.env['xlsx.report.status'].search([('location', '=', 'asset.register.view'),('status', 'in', ['draft', 'open', 'close'])]), ) account_ids = fields.Many2many( 'account.account', @@ -97,14 +97,17 @@ class AssetExportReport(models.TransientModel): string='Account Type for Accum.Depre.', required=True, help="Define account type for accumulated depreciation account, " - "to be used in report query SQL." + "to be used in report query SQL.", + default=lambda self: self.env['account.account.type'].search([('name','=','Accumulated Depreciation')]), ) depre_account_type = fields.Many2one( 'account.account.type', string='Account Type for Depre.', required=True, help="Define account type for depreciation account, " - "to be used in report query SQL." + "to be used in report query SQL.", + default=lambda self: self.env['account.account.type'].search([('name','=','Depreciation')]), + ) # More fileter @@ -421,3 +424,4 @@ def _onchange_owner_budget_filter(self): codes = ','.join(codes) dom.append(('code', 'ilike', codes)) self.owner_budget = Chartfield.search(dom, order='id') + \ No newline at end of file diff --git a/pabi_asset_import_batch/models/asset_import_batch.py b/pabi_asset_import_batch/models/asset_import_batch.py index 5a0b89249..a6984641d 100644 --- a/pabi_asset_import_batch/models/asset_import_batch.py +++ b/pabi_asset_import_batch/models/asset_import_batch.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api, _ +from google.auth._default import default class AccountAssetImportBatch(models.Model): @@ -162,10 +163,10 @@ class AccountAssetImportBatchLine(models.Model): asset_model = fields.Char( string='Model', ) - purchase_value = fields.Float( + purchase_value = fields.Integer( string='Purchase Value', ) - salvage_value = fields.Float( + salvage_value = fields.Integer( string='Salvage Value', ) date_start = fields.Date( diff --git a/pabi_asset_import_batch/views/asset_import_batch_view.xml b/pabi_asset_import_batch/views/asset_import_batch_view.xml index 5f6e14362..685ea2e3e 100644 --- a/pabi_asset_import_batch/views/asset_import_batch_view.xml +++ b/pabi_asset_import_batch/views/asset_import_batch_view.xml @@ -64,6 +64,8 @@ + + diff --git a/pabi_asset_import_batch/xlsx_template/export_asset.xlsx b/pabi_asset_import_batch/xlsx_template/export_asset.xlsx index 1daa1db5ce29afa0dd59aeb98ecd92e33318f9e5..c20878f79e8c5ddc94008ba8cdc87fce626debae 100644 GIT binary patch delta 8617 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 diff --git a/pabi_asset_import_batch/xlsx_template/templates.xml b/pabi_asset_import_batch/xlsx_template/templates.xml index ae1423706..005bd2c76 100644 --- a/pabi_asset_import_batch/xlsx_template/templates.xml +++ b/pabi_asset_import_batch/xlsx_template/templates.xml @@ -89,33 +89,33 @@ 'B3': 'code2${value or ""}#{number_format=text}', 'C3': 'name${value or ""}#{number_format=text}', 'D3': 'status${value and value.name or ""}#{number_format=text}', - 'E3': 'is_standard${value or ""}#{number_format=text}', + 'E3': 'is_standard${value or "False"}#{number_format=text}', 'F3': 'asset_brand${value or ""}#{number_format=text}', 'G3': 'asset_model${value or ""}#{number_format=text}', - 'H3': 'purchase_value${value or ""}#{number_format=text}', - 'I3': 'salvage_value${value or ""}#{number_format=text}', - 'J3': 'date_start${value and env["account.fiscalyear"].browse(env["account.fiscalyear"].find(value)).name or ""}#{number_format=text}', - 'K3': 'section_id${value and value.name or ""}#{number_format=text}', - 'L3': 'project_id${value and value.name or ""}#{number_format=text}', - 'M3': 'invest_asset_id${value and value.name or ""}#{number_format=text}', - 'N3': 'invest_construction_phase_id${value and value.name or ""}#{number_format=text}', - 'O3': 'profile_id${value and value.name or ""}#{number_format=text}', + 'H3': 'purchase_value${value or ""}#{number_format=number}', + 'I3': 'salvage_value${value or "0"}', + 'J3': 'date_start${value and value.strftime("%Y-%m-%d ") or ""}#{align=left}', + 'K3': 'section_id${value.code or ""}#{align=right;number_format=text}', + 'L3': 'project_id${value.code or ""}#{align=left;number_format=text}', + 'M3': 'invest_asset_id${value.code or ""}#{number_format=text}', + 'N3': 'invest_construction_phase_id${value.code or ""}#{number_format=text}', + 'O3': 'profile_id${value and value.code or ""}#{align=right;number_format=text}', 'P3': 'product_id${value and value.name or ""}#{number_format=text}', 'Q3': 'purchase_id${value and value.name or ""}#{number_format=text}', - 'R3': 'partner_id${value and value.name or ""}#{number_format=text}', - 'S3': 'method_number${value or 0}#{number_format=text}', - 'T3': 'owner_section_id${value and value.name or ""}#{number_format=text}', - 'U3': 'owner_project_id${value and value.name or ""}#{number_format=text}', - 'V3': 'owner_invest_asset_id${value and value.name or ""}#{number_format=text}', - 'W3': 'owner_invest_construction_phase_id${value and value.name or ""}#{number_format=text}', - 'X3': 'asset_purchase_method_id${value and value.name or ""}#{number_format=text}', - 'Y3': 'responsible_user_id${value and value.name or ""}#{number_format=text}', - 'Z3': 'room_id${value and value.name or ""}#{number_format=text}', - 'AA3': 'floor_id${value and value.name or ""}#{number_format=text}', - 'AB3': 'building_id${value and value.name or ""}#{number_format=text}', + 'R3': 'partner_id${value and value.id or ""}#{number_format=text}', + 'S3': 'method_number${value or "0"}#{align=right;number_format=text}', + 'T3': 'owner_section_id${value.code or ""}#{align=right;number_format=text}', + 'U3': 'owner_project_id${value.code or ""}#{number_format=text}', + 'V3': 'owner_invest_asset_id${value.code or ""}#{number_format=text}', + 'W3': 'owner_invest_construction_phase_id${value.code or ""}#{number_format=text}', + 'X3': 'asset_purchase_method_id${value.name or ""}#{number_format=text}', + 'Y3': 'responsible_user_id${value.name or ""}#{number_format=text}', + 'Z3': 'room_id${value.code or ""}#{number_format=text}', + 'AA3': 'floor_id${value.code or ""}#{number_format=text}', + 'AB3': 'building_id${value.code or ""}#{number_format=text}', 'AC3': 'serial_number${value or ""}#{number_format=text}', - 'AD3': 'warranty_start_date${value or ""}#{number_format=date}', - 'AE3': 'warranty_expire_date${value or ""}#{number_format=date}', + 'AD3': 'warranty_start_date${value and value.strftime("%Y-%m-%d ") or ""}#{align=left}', + 'AE3': 'warranty_expire_date${value and value.strftime("%Y-%m-%d ") or ""}#{align=left}', 'AF3': 'note${value or ""}#{number_format=text}', 'AG3': 'method_period${value or 0}#{number_format=text}', 'AH3': 'days_calc${value or ""}#{number_format=text}', From 55979f1a2b43dcdc2c4462615e26e9c082e891ce Mon Sep 17 00:00:00 2001 From: MixWarit <52699579+MixWarit@users.noreply.github.com> Date: Mon, 20 Jul 2020 13:35:16 +0700 Subject: [PATCH 5/6] Fix_Error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Module : pabi_asset_import_batch แก้ไข Error ในไฟล์ asset_import_batch.py Issues : https://mobileapp.nstda.or.th/redmine/issues/4633 --- pabi_asset_import_batch/models/asset_import_batch.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pabi_asset_import_batch/models/asset_import_batch.py b/pabi_asset_import_batch/models/asset_import_batch.py index a6984641d..1badcfe3b 100644 --- a/pabi_asset_import_batch/models/asset_import_batch.py +++ b/pabi_asset_import_batch/models/asset_import_batch.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api, _ -from google.auth._default import default class AccountAssetImportBatch(models.Model): From a2c26b1d60ae9d24a4be15a7eb9bbc317fdbff56 Mon Sep 17 00:00:00 2001 From: Waritchapat Kaewsuriyaporn Date: Tue, 4 Aug 2020 17:04:33 +0700 Subject: [PATCH 6/6] =?UTF-8?q?=E0=B8=9B=E0=B8=A3=E0=B8=B1=E0=B8=9A?= =?UTF-8?q?=E0=B8=9B=E0=B8=A3=E0=B8=B8=E0=B8=87=E0=B9=81=E0=B8=81=E0=B9=89?= =?UTF-8?q?=E0=B9=84=E0=B8=82=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88=E0=B8=A1?= =?UTF-8?q?=E0=B9=80=E0=B8=95=E0=B8=B4=E0=B8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/asset_export_report.py | 11 +++ .../xlsx_template/export_asset.xlsx | Bin 14211 -> 6877 bytes .../xlsx_template/templates.xml | 77 +++++++++--------- .../xlsx_template/xlsx_template_wizard.xml | 3 +- 4 files changed, 50 insertions(+), 41 deletions(-) diff --git a/pabi_asset_import_batch/models/asset_export_report.py b/pabi_asset_import_batch/models/asset_export_report.py index 03003ae0e..26d10f6b5 100644 --- a/pabi_asset_import_batch/models/asset_export_report.py +++ b/pabi_asset_import_batch/models/asset_export_report.py @@ -424,4 +424,15 @@ def _onchange_owner_budget_filter(self): codes = ','.join(codes) dom.append(('code', 'ilike', codes)) self.owner_budget = Chartfield.search(dom, order='id') + + @api.onchange('asset_state') + def _onchange_asset_state(self): + res = {} + state_list = [] + for rec in self.asset_state: + status = rec.status + state_list.append(status) + res['domain'] = {'asset_ids': [('state','in',state_list)]} + return res + \ No newline at end of file diff --git a/pabi_asset_import_batch/xlsx_template/export_asset.xlsx b/pabi_asset_import_batch/xlsx_template/export_asset.xlsx index c20878f79e8c5ddc94008ba8cdc87fce626debae..649153cab190b7c2d7bfa702dfc943d7cd3e66b3 100644 GIT binary patch literal 6877 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 bvj4a2RTa>0rgjt*oST>54fM(UisAnNB(w1| literal 14211 zcmeIZbyQr-(lHyW&t3<o^OGP?!zhz#!Tz4Upo{(5=EDz9u45N??wSBj~r0J`d7B zU+HT?D%LLK>0jttRnS;Q=l)hSfwnP*IcaG@2h=~?V0r@`Nda8Man;XLBG*)3F{JlxB0A76m6iBoXR`&aJ7Gz z4|p)Tr4xAcGileC{qY3=@bm-)Q2L8m)~T~no`bO_2evvyuvr>7zO!~>VSX)pyil5ZVcVCi2vCP_M!uJxe1PF+l0ev*>$pmlAF zr7vkL%$6Nkp_H8XDPDy(!u*y19y5<91V`YLzjmLz*0S++ImDEx>S0+(Wdm2%UcyM4 z?@UtuF0xP;2);JZuuPX+=aNeh?35$ZpU1b&aiRs;$FIEMuQ zP{ERMw`Os(bF?zHv$J}RTVK@m?9y1VyfbT`{O%R1;76f9D!c)djq|D>PPfUW64^(n zcYc2@Uu^N@J@b-uh+SSQw6kyK@@LZ($pY^2wEQ7ITT!DqruZryWg10a@yPBp>H zbe*t#s4$p{CZGDOev63fy=?3c%$D{*dC~VwYtgHecnH2N7|z5@QzxPb)JeBUS#AF3 z@lVjeAfg~cZ=%47I7r268e7Lk6YAWz)e)|mV9xu|0m&Z&A@| z$W)dyEm9+J^7Z7?TMZnbK0I2L(_s6RF8eGW8M!^IjCPN6wryegXZ>k-nT-k-Q^{D) z2UOAA;GYvvDq5@&>PQ@$DoPPK~LAsLpanA(h4EH1*UT;SpKk|gMdsa9}ZHf_I*VoA+!&{ zN7h(Dwi#PDDRSGpUe&1fOoo@rURLdK){XoJFbGvOP$qc%q$*{#(C_W$PLG+uXk*6a@H&5p1*n zyN^;8dD$LTv^K=YP*%4zS8Vh-XBLVB^?g*hfm*tSm*lT}&Q}QOoAorOWm%x?LOhO# zK(1GuDC(nAXR9Fm^*{Lr`$Whh-!IQZSep2YdS^hlnVtPMA%CANmOomRZ9@ZDDxKNZQPok?n@2)xYO2qGkK3;tFGKzq%EQnS(0K-0k05eve14h zQeV0cPFp#jTGWr%oJH@x(RD1GG7g>}n{5t&rdGh3{!hq=NV1OmU;_ZlUH||dc*GwL z+R6OgJ7*`BUlrT4r~aJ2Nr3a|juGO~@M(B4yk%cuT}x}8_kBg3OYOSt*&3B%c;uL2Wy;D+9BJ!MhvKhR~1w4PUR@E8n{lr>5Hckqf=sBQ|3jxh-i|V-0s(mX|jgcaOOqY%M&uCV5ZkyHCTUb~U{Y1ueZpmQDIT zOP>o*cWs9jA6q8e3Tn~{WEP)TK3eF1F5m88v4qH!O@C;k=48pVOc%iAdrIqF=Ep8s zsPlX>`MI_6)0gY=={|oY?SduxhXKjcfp3hE_jPsL*NgHPjk5~U*tTsTOLW?MP(h}k zH4}&Sci(aYFYnq<-ptz#XK6#a4HhJ%4|TfB*jzOW9vzpfWtAa|dUuy+jyEH>r_wzk zwsp(;8Y`BrHCp$Ab|ZEYSInjlPxDLnIqiqL6W#_s4~-#)`{!MIJA?Q82cX0JwpL=6 zcI$Ru{&wD`)>e0?i_6pNpChMRBS&685AP%+d4-B}^cMCXl7${_ZYA5Ns}+Ws_kqid zb}mp4p3V)0uxjm}AF3W6ew4eP?QIUFMfMSnaTfYc>#H}|`IK@Ewmdwf-HEnfG%wT# z`S>zAcsROTY}+`sd^IS}=Ciiix$=&78v)+uA?zL22WUJrMnooH}c zIt6bt;AX#Ha7Dj;uw!0dY7g-7Ewz7aw&Bc_p^UA9pl5(0fIB;{Cb}y4kV;?WC@?9|*l1i8|IC$&m|`OSzwg3*bj|y+k&2AyE8o&p=PSeI47f+@ zS9j+|b@v`$D0OXggud_L=4{`YZIlX%36kv3EMa=MNn2}ObUz)ei$5$sj7|8j@*@wk zxF{@5a-Hn)Su+%NYVRCp4zGA~Kj^(5AIcb?SFV4*b(vZZx_@aNz=Dp6h@*D9M8^ zbvw^IEjh>GB5hb>%jQN^Yk$CifNg{2s--(u$MO+mBHx#wL(s=)%7Kb+!#<3HFNpsm zGztYDH#EvGYEVp4x-U&kGC8UtG%75rL`+gH1ivC9*Cf9vJkYo~m6tZZ%p11%oYP53 z&IA@EV)vjf&{#X|nATHT5WmR6Q-_;2zex$|htW>(5k3^CTk(l-&drF3v# ziz>Kp=8TAFLcd~bHRaLsPQyt%g18FZ*%r3aBH%UJfxv;5LJFYiML?Sy zP0~cVHdO#O`Xx!hWpN|w7eGK8%_xP%T*(JCxXTRDNN2+enYCyv;7FFl_5v?{YrN4h zlsTKYL^8ZBHmes-pSYXQsiW-37r;?k4J#EaXR5Sq3c7o#gVkjx1~@z@+Up<9gi<#|3%BkM6n* z)HHX&+f^8}KEzdB7C-e?zjQeA7~HRI`fx4o z2jZf^7~FHRJD)e-(V)aE@G6kz@B4o8;cdBoSZ}QJn}NZA7+@Nw_m5&6Uw(Y}Iat$9 ztQiBA5gRvt-2aUtiqY98BW?()^d)XEtXtK5F2|roLTPzz9kNl=b{b(A{8)Ky2LjZc z7Xz?GiHI9ayO?=xyCTTqVsxtAqr?xy<${eHH9<_@u4co75UA~|V{|5E^j+6i8_POy zuTnSaw@JU~AiC?3p~o#!lwtJuQ`n$N8={k5otoIQlZiz-_X*QSLfeqd0%vPJvqCr` zLj#W$7z_C7q$eQ)+CW8HJ>Fz6U`+YrycyL07$jVIg{A!k3aE}?_hlCNf{A@)dSEpg z2}mj&3DL^y$5mc+MWnrXVu@n6ISYhfLU6D1;|iGt!ZXRZ*9CFO9C$-BNuKQCE#sLS zW7ih0P9ZE8R$jr^rgWC5x|@7^p9st5yr>Pk+ejVsu-^z%0t4Cum(e6(K@5gkeY71A zB~7&LLRi(!)2W^fM_b=%>=GTd(y$Ks=~B#s487&7v@F_|E3JK5Oa&d#RxnCIJX@mTPT9Ns$~^w2Ug3qE z>Fgaq8)+i4mS^Au2!nyM&W2Hi$%Y-VW=z~byJA9vL7&(;z-z0_;4v2- zxS_GK;yvY{bA}r8{|ZE07C!_F{xTaUaI;q-2u%va#EfKw3$`o?G_V-8_$4V^De^_x zbW1mIwt&AKiWZ2;lA49j!G3Z2iF(fJk-ce~l&Ascq*<7PtVu$fIxb#fo+Pf5Lhxt{ zv}!6Gg0matuZ9CZ54MKN_dG_Bn*?x|%jud5ZkF+dP|(0w)xq#PVFWO6AelZSwb8@- z8y?fuO2b|jV=YTpT_I_kwwEPz5#nD8`r$yiy8!HTO^$hL``4z3miw!&AhoehEFtWW zs;)4!6HhGR?Gk72;IyMwr`THA`j#2YmAgu?Ta}HDG0oZh-xi$oC63Ud8t*jLp^Q7o z!rjd{AZj4SOo2;6fl&vD1Kf;!_OdZLx_Dpz|N4q$v(w41>cyTVJo9K9joUFk*u7A6?FV#wJ-E@7IdW}U(FW*P_6 z?R`l}$4W>Oy~0Yp9J>+ZT>&B76($(Dvdh`NSbAlintcZ4?Bj=xqV(Qx4&TrbcJzTD zRX_J^X2&ZAd%G~f#MM#G7G=rFJT>L3Wak zjgR_eL(ma52XXcprL#{Ec8n%$&8x4QG1+%`sWD?WY`g|W!Pt9hDd`9aIwDsHsS2Yv z@Vr7@2sEXEbDsdu!IjjWdlUvzIigit=3)l&8(~F z#AxGDKDd!;il?!p+q5g!lLyU&V2~KJ^S67`;TfR|=4*9@G14Bo&`O0mIyX+DSi#^i zJRnwUiVG`3tMO$KL2RuKrhppQSbE&)Dvk8W1<+Lvnez@+VwjV^HL$aMO`*Ft(nCKa zR6Y!I>`4q{c~7!3+?tYrV=|9TRW(U6b)-B`vb8Fk3TohBS^GjwbQN?dU+5}oF_G*@ zBtCQde!Z2x#g>H|u0ohUQz=v_SxKDsWg^Bmh&t_{#;|Eltr%@;ElOdVSS4X|;X=Ts zQ<0$6%|Y^r&kg<{DufHIHVsvz>>;;hw1*K4tvO~64dgd;rIV@HNG4o^sTU_$&@-{1?@#pv#}>d{=C4qv0Nen<~ooz zJPp%YBh9(EXdULaY*GhRA#4M|O%-O&cV&qQNsf!Eo)mfW-rvRwh`gEWMzry1m^K>U zpNmV@z52$MMFhp{(y0xlFz>e^m_<`wbji8Zm`}u$oLZwX{AQ5nh({n^_3*PJR$}g| z3gR?9w*?HSEsG{Z4JgeMl9;=xB0EjbV?hmS`$8jAERaJ)`HgK|MJh)7b1gc^TTU^m z=rYAIicYFGPoq@bVVph&D50pP1{CFanP~DgPl2e8+X6G@E-@oT<&bVGMFpkToZsqW zE-_xH{G0i%T()y3)P5^v>^uwDk*e*a5|U7b@YIX>7~Hk`4dMoQm&9VNk)H^Kx`(Sg z`l;T6kXU8JGviPQGn+0%1TI8YN8EcbM55Hz%ar!l)b`h8_U2gJ9FDCR^zYBw$wQUj zEOa?tQ#)U0?T;2de>H11mX!R{tip+S7#-dD9k0n8&9V5v1QhgcPE1uM%qD^qSZy9Q zBWr;fV!0V&l%SHFQ?BE9?rnAleoBl`5N0SUM(Fmgzho#|>mzjE}JOMxKU3$GExZ%c2K#5$_iSVZE@NXHt0nVf^fuIeUdRZ*`;i( zVI{k$82J2BwAWr(x7e6l(?k@Ttk)iBB&0QbQe9H-s`u zuYDy^-Ahw>2)d93?T9r$+EC-hcXT08#!LbxU3*~6VRat{|Gv(xS(^90iZ#LlS;(PZig~3bI>bMw$J>bs94X-^7SX~JGrF^?4S=h z_DQ^s%=FaqtsN9$eTxJ;Nj^!9g$1Cd@t=EXwxZQ4~cP)2upwOvxp9BGGA)DKsJIA_f zE02y(OZ69@+RmnqoI)=KQc!E`&YbIS>l+P7mxeoRg@)f|=GV-7uiI^i8`veGUWDGa zTeJd!m-mWdLX78Uj=8Z%WltyfHn|=?7uO>#AsUx@q*($pp=_@enA3(z`nEQNaF5TO zM%tN^wIv=x7ZmTy-YS3R5+aEqF+)95uez4aL@s>_$?B__s{gK%c`tA;*m0FCbg?!z zA9GptKzkSqYPkJ=d=bseFL+y(0UJ5x`D!%yfz&N?AGpK9kkN1qUPe*(MFB&}vRU?s zu8-(s^ipcz;kux=rq50F)2Wb|8|u?1Yu`3rUMr53$7$XXB!z{tC;|PCLKfYoDlMB&(_)eoy|Lz zU*)gu+5@eTNJ1{GcHCPbBqz6fD>G}BpD%#c?-veUlJ9@nEUbGMTb&w@KhVNPuJpkq zTPZb3AEE6+Y5oPq4)udoy}X5Lf5#}z&@5%ymTjsn8Ix8wd+yEo`EDE6N&*Ki%Tjca zQ;@2H=D2GKE`51m0y<%W>Ab5Q3T$5fzP|;~`WhbJsL+~D z;i07H_xf+|1Ov=^SSs-qR_B89*f8wV6b3i2hy#~WlB_<;D8-<^(WMb#OKE%kDGuE= zWc*7@8^>~ieHt7yp(Mvra(>mAm=P#cJ$x0BWPFlGwD#~Tw}~r%k6ZA*QV$Hjc?#>ROt)=z<-gB>p_pi&&WbIbqJ&7kq)ns%}1wNMxu@qbIQ}eSKB)=c;t7<;}583 z9ru*g?+mKod?ScLnrHfQ{wUONYKn{{)BEXk4)e!W4TuIcBZL2XcXO>f0anPYJ}QQf z_R}7*f!Ez!rh)Il{m;!b+}QTYji#8Vi%>-MoNQlW2ikqCR0oYkh;}%u3d;c*NPJh}$E@O(~l?q@{Sv zM_|M~Bj}uNO};mkjnrXnm%uzAghdJ*0G-j(`qkpZ(uVYUQeqCOx>-eke*gA~Dn91H zk5n{*;s-D0>uZu%D`+054#ER{_A3;#a94Ap_L$D<1!`1bUhIlYRjpB?(~&YjmNY}>MA;EG&jU!lco zw1`k6rFpkbNs;paH)I%YpiVeOHzKdt^vZ-tVM@U2+&Mh~a(J=s72DRFmI_gCz#P z=FknXh}A`{f5R5G!N%4U;;G!TY-vwUhwjWrQ07l^_=WAqBBHWf2|-CA=mZ=5d>6S1XHhOCa77}D&Biycu{a2ZxX`WW zC<cA*VlDF6IOPiUUQA?{EzEsVCT?Z_1Ou_2lWdI^a=L+(U+$7n|TOF@l} z(zP5zsiOMT4D4WrHOks@Y#(SCBE5hM?Muo^p$u#cd?-|w<@OMpKjzTKIP4p@V%Dwd z5>mQiqHpu)=@PURw9P5+?WuDZc=v3#pbnWcUvWDx1;eUp89up83ACumj#%VqP0ER> zn@-h6?xr!E5|reG5tOp;YAn3aH`lW&a)~RPrgxB>@(vEjQf7GZs_;$UK06~PpB-mW z`bL28nRsQFT?v8FMbEy5&yE|f)jNO9at8JF5=GM68F*KF*q&V2ADvG0jR@3UKxuTw z+v+VY#FrK8j|BQ< z(?1E)%~tjoN0QlC&*TIh4g7%E6^9-F7{j_ni^jab361<1008pu80O^cVg1hO`C((L z=2C3#Yc$`A$tQ@P8NETmVpxvzRFTf(7ity_Dh9-?;Vv&IHmnm$Zadswga*kUJnSvU zhpyspb7f|*$q60GuJNF?5cyxh-co(eG z$RCk6bt1`o#e%gDt(zgg!gJh{jiN$ZN85C2GxyL*llMWv)zGOW7+1>}tq~oQqUaRn zA|M#>EeKwHov?a?`dI0*G7;NOHaZ#b!@Sp1IZ~U~u}x;Nwk?NxPfza^PULh}#z0Es zOv+W%>v5a_ku)=R(jprYi892u^Xu36E84i^fhF48qt(r#pw#Ivb83~MBHyVD>`n}( zbfOH)u&npzIDRZb;SS?`VFO^UCmBE(q|YRBNohmv?vn%5srwA5!v1noI+~H znW0bSLn?1_WoW{Bb67dt&b_wq#k+FEdh*SD_CguA*V0FZmlO2@CI+Kw)|icusMZ7_ zLb_0W*Ls5Y?jR z!g8bFDGir=KGa$sCe-}en`DlM*E3Pw(Pvw;90?2|d5Fv+0^CZg9ipyq?PczB}MKpv7qI5J|zEtut!< zm=z?CYU!y{dN?PUc6eb{0i~mGIAwJ;sUQAY@vurVhR1fNNDxln3}r;7{$V0Lx4g!t zB%R|B8hVBiYhHY!cgC2)kJceAP`Z&r4s9)B)0=u}62@ zv;M&tr-;L;mRoU;z=0N)wSRcT&u!<4hAFh>e0>>D32cF&O0b zc<|~DoSycd=@CY$*m>39EEyaa008R`H)U?*_|8<-+0nxG{V#77r6wOc$%@oQ`IEGG zac;OAO|L+SJR0sD4s^VD&J@JaCr)+R&{DMH$kIK-X?cKh{C7!MRSPDjC69pp{nf6_>n4P<-hu3+SW zOO-y6@se|16O4XeMMH?OqaenIVhWbl&OkRtteO38mi6A3ur`&8K61U(n+>SJ`yWI@ z)o80}6G(x$ha?tO0lxYXwmMbo4aizQajkD?c00anA-4;utdSG|esi>fHM@g+r+3?bLQzlgbW)AJa zy}E)*Az#2hg@#T*mE1r!vK|YjX05wi8LU36kAAtF;t?A9$*s_AC4acR6Lx8q zj_yU2so}faT0MnL#0-@PYTIR<4wirmJ&{O@ouSIM13NtN6Af0ECIn7wC0H4^%SZ2zI+fEFY`_Z$fy){ z`Sl7%iin`r!7T>~u~2Olj+-wwb5E2nnbdzspMC2KyM$}|I<3nraX#z;_k3&3Cqr_m z&Zg~yuzQ|qIDyqFwgAxvUFnLTuyOKHAgweiB;iO!;+O{PxlJPT@yDbhGU*E9J{Om; z1aVy%CP=}ahc+vv8680b&_(MKN1yt6!@TWScd~862+PZ&FR>d=16Ad(l(f#X4u}>Q zMsm{@dWqM>UYqg|{^)h@dik#F+xmK)&BLb8{+ndhmd8hG1=pUjLep-_b&@#i@?gF4 zjrZ$@X9XUPrHXms3Qu%T|CnX#{}j&f5!}NB&a_4QcLW>R+y589VC4RBeEuL}x4?=N zd<=C-inK&Hx1@pPUz%gibzW%%vF`d_J>Mj|nkuX`{$NJ2x}m4bb1!<6l0;BIX7K=4 zCkk!M{cVk-WDYUptwG^?Y zKj$79DK*Me%gX%N$fB)t0C~^gBVXxvpsa=&ByC}b3iw-Px4}t?z2+;I@~p7fciHYP z*ha&s#6m{uqKBlrF0$sQTS$R0b$OtM2Wc#Z7)EO(ipC2?#gKSQ_0F`tV7OMn+GW!j ztr!~>NeW=mshaxsRc}2my&5hc^Tj%Z+OT`BoH(7Nc5K!F2y*B+@sye&16wq|Vy-Yp zIcA*Ubbe8;4q00H@$@GQ5Fpw$@sb<*O~7)nZB%hu@QbJd&4bdjil9?xg;s! z8Q7?ep@{VAILayV8fWEv)9ZuN@o`_g zi+&Sv?UU;x?rC1;_6kc$iTX{EoRsc&XrTwE8*oba?|=&d$pj9r|NOeszf||H`X63? zQj+~EgTKC*@h`&XIvH#q|Mr^3-wFSoto|oyD|olj5lC;n^h?VqFo06oGl;{T6K z+`serdqU=)ob-_XXA%FAp80n!f8QeflM6bTiuM + target="new"/>