From f45b9d2c71adc9351181ad9a137f388e3f597718 Mon Sep 17 00:00:00 2001 From: raman Date: Wed, 23 Jul 2025 11:56:46 +0530 Subject: [PATCH] feed added --- .../models/batch_payslip.py | 17 +- .../pqgrid_batch_payslip.js | 106 ++++++--- addons_extensions/ftp_feed/__init__.py | 1 + addons_extensions/ftp_feed/__manifest__.py | 19 ++ .../ftp_feed/controllers/__init__.py | 1 + .../ftp_feed/controllers/controller.py | 22 ++ addons_extensions/ftp_feed/models/__init__.py | 1 + addons_extensions/ftp_feed/models/feed.py | 147 ++++++++++++ .../ftp_feed/security/ir.model.access.csv | 5 + .../ftp_feed/security/security.xml | 14 ++ .../ftp_feed/static/description/banner.png | Bin 0 -> 30738 bytes .../ftp_feed/static/description/banner_2.png | Bin 0 -> 43906 bytes addons_extensions/ftp_feed/views/feed.xml | 156 +++++++++++++ addons_extensions/hr_payroll/__manifest__.py | 1 + .../hr_payroll/models/wages_register.py | 61 +++++ .../hr_payroll/static/src/js/payslip_batch.js | 215 ++++++++++++++++++ .../hr_payroll/static/src/js/wage_register.js | 207 +++++++++++++++++ .../static/src/xml/payslip_batch.xml | 11 + .../src/xml/wage_register_templates.xml | 21 ++ .../hr_payroll/views/ftp_payslip.xml | 12 +- .../hr_payroll/views/wage_register_view.xml | 10 + 21 files changed, 991 insertions(+), 36 deletions(-) create mode 100644 addons_extensions/ftp_feed/__init__.py create mode 100644 addons_extensions/ftp_feed/__manifest__.py create mode 100644 addons_extensions/ftp_feed/controllers/__init__.py create mode 100644 addons_extensions/ftp_feed/controllers/controller.py create mode 100644 addons_extensions/ftp_feed/models/__init__.py create mode 100644 addons_extensions/ftp_feed/models/feed.py create mode 100644 addons_extensions/ftp_feed/security/ir.model.access.csv create mode 100644 addons_extensions/ftp_feed/security/security.xml create mode 100644 addons_extensions/ftp_feed/static/description/banner.png create mode 100644 addons_extensions/ftp_feed/static/description/banner_2.png create mode 100644 addons_extensions/ftp_feed/views/feed.xml create mode 100644 addons_extensions/hr_payroll/models/wages_register.py create mode 100644 addons_extensions/hr_payroll/static/src/js/payslip_batch.js create mode 100644 addons_extensions/hr_payroll/static/src/js/wage_register.js create mode 100644 addons_extensions/hr_payroll/static/src/xml/payslip_batch.xml create mode 100644 addons_extensions/hr_payroll/static/src/xml/wage_register_templates.xml create mode 100644 addons_extensions/hr_payroll/views/wage_register_view.xml diff --git a/addons_extensions/consolidated_batch_payslip/models/batch_payslip.py b/addons_extensions/consolidated_batch_payslip/models/batch_payslip.py index 762af2245..a7f7bfb63 100644 --- a/addons_extensions/consolidated_batch_payslip/models/batch_payslip.py +++ b/addons_extensions/consolidated_batch_payslip/models/batch_payslip.py @@ -1,6 +1,9 @@ from odoo import models, fields, api, _ from odoo.exceptions import UserError, ValidationError -import datetime +from collections import defaultdict +from functools import reduce + + class HrPayslipRun(models.Model): _inherit = 'hr.payslip.run' @@ -287,6 +290,8 @@ class HrPayslipRun(models.Model): class HrPayslip(models.Model): _inherit = 'hr.payslip' + + def get_payslip_lines_data(self, payslip_id): payslip = self.browse(payslip_id) return [{ @@ -296,4 +301,12 @@ class HrPayslip(models.Model): 'amount': line.amount, 'quantity': line.quantity, 'rate': line.rate - } for line in payslip.line_ids] \ No newline at end of file + } for line in payslip.line_ids] + + def action_open_payslips(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id("hr_payroll.action_view_hr_payslip_month_form") + action['views'] = [[False, "form"]] + action['res_id'] = self.id + action['target'] = 'new' + return action diff --git a/addons_extensions/consolidated_batch_payslip/static/src/components/pqgrid_batch_payslip/pqgrid_batch_payslip.js b/addons_extensions/consolidated_batch_payslip/static/src/components/pqgrid_batch_payslip/pqgrid_batch_payslip.js index 963eb098d..a33cbb545 100644 --- a/addons_extensions/consolidated_batch_payslip/static/src/components/pqgrid_batch_payslip/pqgrid_batch_payslip.js +++ b/addons_extensions/consolidated_batch_payslip/static/src/components/pqgrid_batch_payslip/pqgrid_batch_payslip.js @@ -4,6 +4,7 @@ import { Component, onMounted, useRef, useState, onWillStart } from "@odoo/owl"; import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { loadJS, loadCSS } from "@web/core/assets"; +import { rpc } from "@web/core/network/rpc"; export class ConsolidatedPayslipGrid extends Component { static props = { @@ -15,6 +16,7 @@ export class ConsolidatedPayslipGrid extends Component { setup() { this.orm = useService("orm"); this.gridRef = useRef("gridContainer"); + this.action = useService("action"); this.state = useState({ rows: [], payslipRunId: this.props.record.resId || this.props.record.evalContext.id || false @@ -36,16 +38,15 @@ export class ConsolidatedPayslipGrid extends Component { async loadDependencies() { try { - await Promise.all([ - loadJS("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"), - loadJS("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"), - loadCSS("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/themes/base/jquery-ui.min.css"), - loadJS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/pqgrid.min.js"), - loadJS("https://cdnjs.cloudflare.com/ajax/libs/jszip/2.6.1/jszip.min.js"), - loadJS("https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"), - loadCSS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/pqgrid.min.css"), - loadCSS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/themes/Office/pqgrid.min.css") - ]); + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"); + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"); + await loadCSS("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/themes/base/jquery-ui.min.css"); + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/pqgrid.min.js"); + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/jszip/2.6.1/jszip.min.js"); + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"); + await loadCSS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/pqgrid.min.css"); + await loadCSS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/themes/Office/pqgrid.min.css"); + // Set global jQuery references window.$ = window.jQuery = window.$ || window.jQuery; @@ -145,24 +146,18 @@ export class ConsolidatedPayslipGrid extends Component { editable: true, stripeRows:false, editModel: { saveKey: $.ui.keyCode.ENTER }, - filterModel: { - on: true, - mode: "AND", - header: true, - autoSearch: true, - type: 'local', - minLength: 1 - }, - dataModel: { - data: this.state.rows, - location: "local", - sorting: "local", - paging: "local" - }, + filterModel: {on: true, mode: "AND", header: true, autoSearch: true, type: 'local', minLength: 1}, + dataModel: {data: this.state.rows, location: "local", sorting: "local", paging: "local"}, + cellSave: function (evt, ui) { + const payload = { + id: ui.rowData.id, + field: ui.dataIndx, + value: ui.newVal + }; + updateData(payload); + }, menuIcon: true, - menuUI:{ - tabs: ['hideCols'] - }, + menuUI:{tabs: ['hideCols']}, colModel: columns, postRenderInterval: -1, toolbar: { @@ -212,6 +207,21 @@ export class ConsolidatedPayslipGrid extends Component { ] }, }; + function updateData(data){ + $.ajax({ + url: "/slip/update", + type: "POST", + contentType: "application/json", + data: JSON.stringify(data), + success: function (response) { + console.log("Update successful:", response); + }, + error: function (xhr) { + console.error("Update failed:", xhr.responseText); + } + }); + }; + // Apply CSS and initialize grid $(this.gridRef.el) @@ -428,7 +438,47 @@ export class ConsolidatedPayslipGrid extends Component { return `${state}`; } }, - ...subCols + ...subCols, + { + title: "View", + width: 120, + editable: false, + summary:false, + render: function (ui) { + return "" + }, + postRender: function (ui) { + var grid = this, + $cell = grid.getCell(ui); + $cell.find(".row-btn-view") + .button({ icons: { primary: 'ui-icon-extlink'} }) + .on("click", async function (evt) { + const res = await odoo.__WOWL_DEBUG__.root.orm.call('hr.payslip','action_open_payslips',[ui.rowData.id]) +// res.views = [[false, "form"]], + await odoo.__WOWL_DEBUG__.root.actionService.doAction(res) + }); + } + + }, + { + title: "Edit", + width: 120, + editable: false, + render: function (ui) { + return "" + }, + postRender: function (ui) { + var grid = this, + $cell = grid.getCell(ui); + $cell.find(".row-btn-edit") + .button({ icons: { primary: 'ui-icon-pencil'} }) + .on("click", async function (evt) { + const res = await odoo.__WOWL_DEBUG__.root.orm.call('hr.payslip','action_edit_payslip_lines',[ui.rowData.id]) + res.views = [[false, "form"]], + await odoo.__WOWL_DEBUG__.root.actionService.doAction(res) + }); + } + } ]; } diff --git a/addons_extensions/ftp_feed/__init__.py b/addons_extensions/ftp_feed/__init__.py new file mode 100644 index 000000000..45fab17f9 --- /dev/null +++ b/addons_extensions/ftp_feed/__init__.py @@ -0,0 +1 @@ +from . import models, controllers \ No newline at end of file diff --git a/addons_extensions/ftp_feed/__manifest__.py b/addons_extensions/ftp_feed/__manifest__.py new file mode 100644 index 000000000..f2db3ed64 --- /dev/null +++ b/addons_extensions/ftp_feed/__manifest__.py @@ -0,0 +1,19 @@ +{ + 'name': 'FTP Feed', + 'summary': 'Feed Module', + 'category': 'Reporting', + 'version': '1.0.0', + 'author': 'Pranay', + 'website': 'https://ftprotech.in', + 'license': 'LGPL-3', + 'sequence': -100, + 'depends': [ + 'base', 'web', 'hr' + ], + 'data': [ + 'security/ir.model.access.csv', + 'security/security.xml', + 'views/feed.xml', + ], + 'images': ['static/description/banner.png'], +} diff --git a/addons_extensions/ftp_feed/controllers/__init__.py b/addons_extensions/ftp_feed/controllers/__init__.py new file mode 100644 index 000000000..72f4562d7 --- /dev/null +++ b/addons_extensions/ftp_feed/controllers/__init__.py @@ -0,0 +1 @@ +from . import controller \ No newline at end of file diff --git a/addons_extensions/ftp_feed/controllers/controller.py b/addons_extensions/ftp_feed/controllers/controller.py new file mode 100644 index 000000000..1a8d6eb2f --- /dev/null +++ b/addons_extensions/ftp_feed/controllers/controller.py @@ -0,0 +1,22 @@ +from odoo import http +from odoo.http import request + + +class FeedController(http.Controller): + @http.route('/feed/attachment/', auth='user') + def get_feed_attachment(self, attachment_id, **kwargs): + attachment = request.env['ir.attachment'].sudo().search([ + ('id', '=', attachment_id), + '|', + ('res_model', '=', 'ftp.feed'), + ('res_model', '=', 'ftp.feed.comments') + ]) + + if not attachment: + return request.not_found() + + return http.send_file( + attachment._full_path(attachment.store_fname), + filename=attachment.name, + as_attachment=True + ) \ No newline at end of file diff --git a/addons_extensions/ftp_feed/models/__init__.py b/addons_extensions/ftp_feed/models/__init__.py new file mode 100644 index 000000000..25e3f9d79 --- /dev/null +++ b/addons_extensions/ftp_feed/models/__init__.py @@ -0,0 +1 @@ +from . import feed \ No newline at end of file diff --git a/addons_extensions/ftp_feed/models/feed.py b/addons_extensions/ftp_feed/models/feed.py new file mode 100644 index 000000000..7cce75402 --- /dev/null +++ b/addons_extensions/ftp_feed/models/feed.py @@ -0,0 +1,147 @@ +from odoo import fields, api, _, models +from odoo.exceptions import UserError, ValidationError +from datetime import datetime + + +class FtpFeed(models.Model): + _name = 'ftp.feed' + _description = 'Social Feed Posts' + _order = 'create_date desc' + + description = fields.Text(string='Post Content') + images = fields.Many2many('ir.attachment', string='Post Images') + user_id = fields.Many2one('res.users', default=lambda self: self.env.user, string='Author') + employee_id = fields.Many2one('hr.employee', string='Employee', compute='_compute_employee', store=True) + feed_data = fields.One2many('ftp.feed.data', 'feed_id', string='Reactions') + feed_comments = fields.One2many('ftp.feed.comments', 'feed_id', string='Comments') + like_count = fields.Integer(compute='_compute_like_count', string='Likes') + comment_count = fields.Integer(compute='_compute_comment_count', string='Comments') + post_time = fields.Char(compute='_compute_post_time', string='Posted') + + @api.depends('user_id') + def _compute_employee(self): + for record in self: + employee = self.env['hr.employee'].search([('user_id', '=', record.user_id.id)], limit=1) + record.employee_id = employee.id if employee else False + + @api.depends('feed_data.feed_type') + def _compute_like_count(self): + for record in self: + record.like_count = len(record.feed_data.filtered(lambda x: x.feed_type == 'like')) + + @api.depends('feed_comments') + def _compute_comment_count(self): + for record in self: + record.comment_count = len(record.feed_comments) + + @api.depends('create_date') + def _compute_post_time(self): + for record in self: + if record.create_date: + delta = datetime.now() - record.create_date + if delta.days > 0: + record.post_time = f"{delta.days}d ago" + elif delta.seconds > 3600: + record.post_time = f"{delta.seconds // 3600}h ago" + elif delta.seconds > 60: + record.post_time = f"{delta.seconds // 60}m ago" + else: + record.post_time = "Just now" + else: + record.post_time = "" + + @api.model + def create(self, vals): + vals['user_id'] = self.env.uid + if not vals.get('images') and not vals.get('description'): + raise ValidationError(_("Can't create an empty post")) + # Handle images to ensure they are public + if vals.get('images'): + # images is a list of commands like [(6, 0, [id1, id2])] + image_ids = [] + for command in vals['images']: + if command[0] == 6: # REPLACE command + image_ids = command[2] + elif command[0] in (4, 1): # LINK or CREATE command + image_ids.append(command[1] if command[0] == 4 else command[0]) + + # Update all attachments to be public + if image_ids: + self.env['ir.attachment'].browse(image_ids).write({'public': True}) + + return super().create(vals) + + def write(self, vals): + for record in self: + if self.env.user != record.user_id: + if 'description' in vals or 'images' in vals: + raise UserError(_("Only the author can modify post content")) + if vals.get('images'): + # Get all new image IDs being added + new_image_ids = [] + for command in vals['images']: + if command[0] == 6: # REPLACE command + new_image_ids = command[2] + elif command[0] in (4, 1): # LINK or CREATE command + new_image_ids.append(command[1] if command[0] == 4 else command[0]) + + # Update all new attachments to be public + if new_image_ids: + self.env['ir.attachment'].browse(new_image_ids).write({'public': True}) + return super().write(vals) + + def unlink(self): + for record in self: + if self.env.user != record.user_id: + raise UserError(_("Only the author can delete this post")) + return super().unlink() + + +class FtpFeedData(models.Model): + _name = 'ftp.feed.data' + _description = 'Feed Reactions' + + feed_type = fields.Selection([ + ('like', 'Like'), + ('dislike', 'Dislike') + ], default='like', required=True) + user_id = fields.Many2one('res.users', default=lambda self: self.env.user, required=True) + feed_id = fields.Many2one('ftp.feed', required=True, ondelete='cascade') + + _sql_constraints = [ + ('unique_user_feed', 'unique(user_id, feed_id)', 'You can only react once per post!'), + ] + + +class FtpFeedComments(models.Model): + _name = 'ftp.feed.comments' + _description = 'Feed Comments' + _order = 'create_date desc' + + feed_comment = fields.Text(string='Comment', required=True) + user_id = fields.Many2one('res.users', default=lambda self: self.env.user, string='Author') + employee_id = fields.Many2one('hr.employee', string='Employee', compute='_compute_employee', store=True) + feed_id = fields.Many2one('ftp.feed', required=True, ondelete='cascade') + comment_time = fields.Char(compute='_compute_comment_time', string='Commented') + + @api.depends('user_id') + def _compute_employee(self): + for record in self: + employee = self.env['hr.employee'].search([('user_id', '=', record.user_id.id)], limit=1) + record.employee_id = employee.id if employee else False + + @api.depends('create_date') + def _compute_comment_time(self): + for record in self: + if record.create_date: + delta = datetime.now() - record.create_date + if delta.days > 0: + record.comment_time = f"{delta.days}d ago" + elif delta.seconds > 3600: + record.comment_time = f"{delta.seconds // 3600}h ago" + elif delta.seconds > 60: + record.comment_time = f"{delta.seconds // 60}m ago" + else: + record.comment_time = "Just now" + else: + record.comment_time = "" \ No newline at end of file diff --git a/addons_extensions/ftp_feed/security/ir.model.access.csv b/addons_extensions/ftp_feed/security/ir.model.access.csv new file mode 100644 index 000000000..d61fe4c24 --- /dev/null +++ b/addons_extensions/ftp_feed/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_ftp_feed,access_ftp_feed,model_ftp_feed,,1,1,1,1 +access_ftp_feed_data,access_ftp_feed_data,model_ftp_feed_data,,1,1,1,1 +access_ftp_feed_comments,access_ftp_feed_comments,model_ftp_feed_comments,,1,1,1,1 +access_ftp_feed_attachment,ftp.feed.attachment.access,base.model_ir_attachment,base.group_user,1,0,0,0 diff --git a/addons_extensions/ftp_feed/security/security.xml b/addons_extensions/ftp_feed/security/security.xml new file mode 100644 index 000000000..4b732fc0c --- /dev/null +++ b/addons_extensions/ftp_feed/security/security.xml @@ -0,0 +1,14 @@ + + + + + Feed - Read + + [(1, '=', 1)] + + + + + + + diff --git a/addons_extensions/ftp_feed/static/description/banner.png b/addons_extensions/ftp_feed/static/description/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..53845a42e990b117d5e2735ac2f31686e078ffee GIT binary patch literal 30738 zcmZU41yog0*X_ANN z<^@Qv?76@K*!?4F&vh<~(r&{y?{u zP`3jB>`wT9NUv4CA^6AV_V3l~m8^{Io%C#t04FD>*QSGN$) zt?A;Tq7R`0Sm9zySX9C=?~Es+I2lgHy2kO^e}6M?U*EqAME@D>Hq0}eU?+6w<&OOK zUQkD`e)ux=Pzj*^|Nreq`0gU%*W4OvmBmkd5Ydg#{lz4~JRki=3oU^vC$@lBhD$p_Gm)*~&UvgMw<(?-yzC)u@*_JT$BUb?S1=XitJ?fP(XtUM2>i08B9tDru_wF=_huPoYoby+ayDb`T0&(7nluSs60S~mkT zE{(^s=-1pYPbvV7`bAH>$CBC)4>G#Z^y5VB)p%rvtu1{jJ=ev6AeK-$S< zLnXyFvU7V-s_XptyfV6^{Lch_=0UO}x4J0#WZ9)f#r^{HUeqV7X~WAkL>LRtCbO(c z7CrPMTAt%+C6yqU(i}1NHZE48mP>qfx*&X9U8?W4uvx z#^1u4d&928#4INlCIV}%&FYr(OxJ2|Bz971-=a9`;XxEmm{@>XvXWnKo~)~&{jTK& z7d~H8=Qlbr6TZ^)-bQ(#{$L1tUm+ z+~|2PnHu=9wyGEiSNytqmivXWU8O`Ux{_VS$MS_|YeMu^v&0Ac&5w*O5R%#cN(9~Q zgq~iAOPR`XV4&+uFGV>Bz_^(*Yt&0##Xy!>RGAGh@TouYNVpGuR}&KxNEzOi;`NW- zid&v>ynFB(g21^1|n+e z;hmF;_LKY|(e#Yl9)2d;SL(&qZ8Ri#c;NFovq= zP36Xs`uq1XpHOlpCJyL!`C~Uk4C-7XE6qi-;nyV-ekoIHxFsLuOBH)_J-6Fu}>ky=;R*!pB=6bt6h%<{9 zuP7CV2{7i+QMQ?Uc_SvK9l75vJWcKAK5>#BZQG~`g2*^44nE?6G`J2kb5{)c>aWwI ze;ko=Cq_3B+I?4Yo{EVr8qNm6R7ciyp|HrY90c7%Kg>VjSAmPaz(s|wR<$AnfMUNJ zXf!$NkLX%2fy{%Bd5GamGA3Tcwwed!h|aJ5i%J5ndE9tKF(M5>zqQ2_d@`yL@+x?@@AhUHBDP`VD1gi=V^_}X{p*yM z3CNBnf$fp@gYT}|pTj`wd&h}P_hYXdn6W9$;ew@$Hh?RM)uKlbp?-|1{Lb$7Eh^4I z4Y>O4oU0TBUP=hXg!tiE>{zH;pOj)_!s=hE1GsqV!sF~FpW_a7_6XBhuaIDkC7o#> z1}9t|gzzHX@4I5)j>~v{QmS*fLlR!cd4?CEvd@dJW^z~gVR8ESltJdGP?DNDc&AZ- z9${BxW?X|(PU;$cDWtc;Xn@XqUNPk4q{_s~N;O6C4!an~KrXVdnLXLy-#SCvuOg(+n&^MZC|brO>I;XD3i7cT1z00TSq5h0E!O zNz)OIt~Ivihq+gU^mOFqHFjU!|2&(GRw| zt^Jvs%cR?V8d~y)@pdIflg`KsUp$Q1@Aq$}NmF@LI=O^GUS#S48!VvVeLo@KKm4QV z@IHQ*eTU@a1hd@wnC#yibN6sX@@0J(95evHdOh^*=+uZ?^zfG5oN6^ z?G}G*%()HSC8`t}*gaAFja)Zu>?8#A z(*EUtrr4>uMz9EhZ0&v`02nD!eNA|5^A?ZCmk-j1b;S`J*r(^;F%C!y5CURi*y}d! z8z@XbU?6D^ASByPr!qn8r?4cHbVlXm*7lELODqL6rP*N)je}M>p z|Mwe=8Bh%Ucahf$`9=2?frMB#Fb#x%T?qLomJOT#44lL;nyzkLG>3=yQX$%0U2uJ; z4J;Z8-tR{N?cpX$W_cigs zRYHyJx-G4pQsU04ddVr@V>X^PwwHeXpN+c0{9v}UXFF9{ZOrU;M6iZfoTEB_v_7E^ zaiK2SrKH*`?aqdH@ZI>X=0OP4TN zoEiutjJDUT>AuS>S;StewKRg>AYGH5Me^@B{ZRrQx^F$Us z5GV~vMZcz2F+y+A0yVM*dVhaPLA`$lcMd->u4&-R^7T7PZ387v&Zw>BB3bW;@Be*} zHQgpgCSgWSWPvs=)NVbtJGu)#S*jA~B?M`W16)ic8+86!KX9>(7roKbeIgQsywSFvT z@uL1)bTn?J)FtF^?swY8*0wMqGQ>NTJJv~xajYTH;w&j~3tN1pf{4?ZGE2ztWX zPY#3yAVR_NJRi;2xwr~seM8NwJj<`CLM!E{w-(yf*suI7a9g+hqIL-Wj4oD#R4%*m4&N8pTM8j$bb z*&TMZn0q0y!}(>MA5!6K0c_{oNy7a6JdR_^9^StGq?(nvMyg+tzZB9#)|0gZj zo^3h~FU5v-^&y~D6evi1l8-!-2yElq(`QaHlVGA6DtVC~K@X^BYD)*Mk&(gRllgQa z#sU_nV)Xk&8v+Q6Fd?@iw7+9qM4+U$^(kFIwpMrOv6sN{w3pHi()`o$;2-RAm=_qB zAMj_$H7+pKuW>{STBRTgco>Y1zE#Xp zald;a?R;XJ?zVZ8)WA7N_3tq6$zrzGxd?RyeN;|{S{Z!kf79Vg)3AK@n1Z!p~$ysUT$J)z|bE4-x>Eu}EAKWnWq-XP_6_>53-E4a_F+?FrRCYw&485ywrMX^SK zpE#nOVyu-{OE~Pct%uW@d}g>&@A$?Q#oX0eITxbtvAFc$^FkypJG`6MG5^}xppHbGaMy2&<9gc96-LP$)uDy3SUVf%; z#1YsVGF9|w`NJ_zlZP^!7oFwb9VpYz2mP(&q8huzxs4JBH zIRH0vLwu_Zg`u5BKv}`dV`Hdr`~sFPJ$&7-jhnTn{+P`Tbp;FrF0Baj$~Gwpa!_eG z;A_LNw-33r7ENAA1^qz6W!oxjKz_3}S%5P;Csz1#SKwj>FIE{Gjy4o~q%<1u<_g!` z7kiYWN0AOu$}#^L2Y;}HmD8#G>JVe~^K!PcSWyidEp2w!!AZiZdg192^}i`>xVi9+ z5boVTvn9%2{+ge^#&k>86}viAPVpszMDx!*S;sh_b<>rn;45t=$=&+{nVuI_ zDss)=tQo1w;ez@7dpRuM?3;r5;7yBKupr}{esax=_@>`c13k~c z>Am{T9mjWclyjjzUc6hcbTq8H3Uyy+iW}Wof}xsb?_Yj;m}M{IhLe27pmCZmzED zdFX4DJZ5itPbQIjI-coHN}k#K?;r&4#61B-(~B`Uydy7=b`Rp-&H_ycxB!;-tJBocrozT$N;==3tz3Q@V`pc$N_ zi*qA9R-SvE4!qMF5LGX6S6MaXLnzAKJ9bmv9)Uk-eb=YQ&N)>i>%&`KRjllQAy!*I zSLX#Bp%2EMvrM{G-KdjKAiqFzLVQ65hNxg7mO@!?UYle6nBAv=#ZIACk8#Mp=N7>8 z$=+%eKWue!wU)hk)evY2Z%`^crpYtpg8@s7AvzbHP+Y4Px9!$F4j^zABLbBDszk2G zwv;9|wGjN6O62w~q#8Rczy-`}kBj|V1*T?YF0Qtyu}1`vz5 zNKJ2`~_DDBN_6vvTh5O}Qb6h!^dD?if)qCZ*Ak4YU+vBk+%+fQd&XfyyIra3@9KITx>4|^)UpOin(in_;?lgrtK6)Hh zLyA8+G1zef<0tLk(RB-=m%due{L6l{^y%)}oHmhiv6Grc&{3g zn8_QQ`j0uvxO=_ycia{Ed5AM74*e;21G0Ji*!VI6ocrJ)<*~ zQ@FFDI0E3W+muA>;1uR62SK#b`|&uAGBK)cY%VqrphMv#ADpr9(A`Aoi6vUh20iB+ z91Xh9Jm^>4T7E~WLEK8wK3wnqMA1Na)dNLn3WHzv6I<|o3>bEDn_sTk!DTf!L1a() z`0AT)4JuYW3@NrRhVvlfj2I5;gl`_2pWlqyN*T;mL({!FSBte`Q9nulH~5bd{F_rC z2z`&!W$NV9rJU`vlPyUW=*96*b)o5)iVqCB)GCSd>)g(*?;S`O8AWNKs>yTK0I- zW0q6fje~(W_~xsHJmbw&OH2*N7x#60GsIV_xJ~jLMD4tjLG{lyz^VWG8ccnqGr+8I z<;3BcgpFLNrZi(LrQ7|Y4DIhz5LGi@Ag4M%TU&Uq(K|x5LNMiJ$Q6g$+c8mmsF6>% zxp)%9C^%_a|NP&bJ637_$LZal=aY!?RDtaJm?Z!eY}H`7q5BoMr0b%4{x@1q zMnW~kcmCgv2+P5=tWynNGMbsWkUmDJHw^k%0N&Mscuk@XB$jYJAfI5a02A$Q19{T4 zS*|^oQ&`2ORbc+f({W!z=*quv#fuNxIVBIq=|mPw4_xWpYm$|oYf=0#sewD@$A#Bv z&r@@FasETtyxVco0z9iV9Y|D-1`+^8L*2sO zy6(BNuQbFgAR6i8pAa_KnwP5CraN9))FD@9&JDgHPeRvynH?V(xDR#P9#)J3N>8>) zIApF6c(bWk4`Q3X0{aBvP1zG%Xe}kqw}mPKTdXNZ{&uy2VcwF)}5*c=T?( zY|b+XkpZRrw^i3e^)-u^Lfe;WL`_6tu`_aNOX{nXJlC!boEawu`OT?j_PwmaxVSK6 z{4G@clsiZ}dzlMvG`21|Oh;V5$IrBG>HH+L&V7gGYTC*@A-B6-Q`zMCx_iz|Es9%e-em+>wO$*m z)-1v$&6ZAQyB{ZZ4+MI>i$M5KFHesL$R1*mk;xbrHN7Ki0|UPCrRBF~S&VBjv-Iit zam$9iclKkRP8i_vq6X$Vs?actWOb*c7BO2%FDCHC`?&kW(@%YR2gUc}Ga1kV#Pr`E( z#3~q!O><`i4yJJK_o5kbZX#3O=1-ZRyw{Q_+Q8u~~MG6Ja zonwvHhc$&4(&NojmarjoU&>9Vv*vyc^ zTmCkz`1F-jR=KTWdR_h?X0;CARW2s@L30+PBf`R$$x9$L5w90d=)~&&=eY9Mqst14 zSytiY)~{-hWz8rdssv(@aowvs$!%(H475{GK5Z`}@v)9ZsvHe~g}?1vl#l`u2m8c2 z(T_)#x%oMjJbf%iysIVKVd)2$fCbDX*wLf9!>Jz(n~VJH{IUf3AL%~WTEN=yg@veU z)(V1!u8y;P97I9IR3;RQVX0o$fkaH;qm~wPZM3<3ia+gLn;x30?5cL3M(P*8e81A`rI_Mxu@7>j&YP~<&ySLz`*PaJ@2Qb-r%694ngb50fIHjW zwWiq5&(FSs)95=kekWzvl)M1S$uFdr%ZWN3KVuK5_BTk#&r~)@!8vk0nYRi)g1%zg zMfRhY`V30FG!cT_V*QS2a0&LEHYjF;nt|_G2wYt_=Z>P6Q%MmKIXeizy%|yx{(XXD zrh1Hym57yxFuDJCa{eU!_0h^XmZTT7x*p3qLFcP&cgXx9xw*JCr5`5HwhSuLwfE?l z5qTk`9H3-;*-WPAI*W(Yb_}H?QA+tv1BL@)tMT6VU+c6E$>iemB%_FWu_yFnW>WE9CWrrN9D&E-!1{o2sKOrX+nI{!HUW zr6HLIMTL_(|wsHi=k zNhXjTbpn76Z_cwm`EKh>GvQ#=i zP8mUem8$8}j`PX&COqwLC7j}Zy0p35{Y)=SG2;0eoMsC85vX+&YD#LRAWhqP@>OQnma_eU6UZj!Jg>zWmgIyd!@D+TK6w!r ze<(zR5+~408Q%rSG(oV9uu)eUCS!4AOr>x3J^r+-oc@f)p@aH>6y}`a#=iy4V>J(# zBeYQI58J*o2IacG$!XA83w&}WvWB{S0oi}~!xiV2P=Mcjhb@;&*$?{QCMo=&TmxCX zmfuL*9l43rfxyF}Q7AEcO5j4^+5JB);joJT^95XTUDlacl)lL^zi;8sm_28)d^guA z4TFqW$s0e;wGCd+lLbH9(mb#X zY4RE;%%{K)e*SuUxk6AP=QnlDpu*$uQ+I3nr3m+CZ5a2igM#Wa|FvI*c=@Kku+r0s zgYzXz*quB-7yTfAxH2vyl}u79g2W%Gvl8$q^?4q1-^rDU&fPy^d0eth&Svw^J0cb{ z9xaFn1NC->c4n1q(oGmZEqH6m*_fzA)8TF0rz>#*CvE8;+5ZTCdd(Z|cZr$ZV663U z*Iy?FBo~E^RH4EcFPc>%kbwyCD|_z{SeP~yqWU{TQ%|x)Ec!Nw7;cTw70}HySRTLK z-e~oOb;Eu>bs-wC<#*x|E`uecP<(Hy#G;f|1~cvdmhZUVx?1#Lm6KGp77;dRD%Wql}zhk)^e=}WbYFh0yNSyO* zsZv#BlYWb>RdwZ7hr1cn8iNcd;AEmxzA~ib8VuNH&yrd`LiG0+_NTah?pgg_CVILq zqjl0hXg2z&WC`-P<R&sZNo`l=H3~6)R#RtmzRNahkC=7;iH1B*Dm3w>vh>iu|%j zi|0V3UpSLZdfaz%Sj%^X0H7YmN9e;K>65vn;xiPU#`h|wI5Vv;rNqKoB_5inrNXb; z>eN|w#Pv>Vdvc)mGwpr0urP6;gxT~#g0Q2EsjN*$$Q(~B$|t6AE90lRy^bmzdr<_~ zC$dmswX3JX#LMf0=L%$fXz`o2uaY+A?&rnx-*`BoIt4twt`k@f|BY~H9 z>t4R!Y=jahSX99_Ent{X*DPKC%Q@gO%py#%Re-O6n6M6#h**M!o~GP~0PB1IW+~y! zZp{5io&S%H(7oJJvliy!abt$Bh0yU*vu`9@8!ff5SXV{HYd#RBqAfkA;4D3c4=i)<(7$tqhu`YPf$V z(dQA8KkoP=vf8l6x+2};WwZO~4~joo?5m}Mi2~p`9P<~0G#;Yu&rr1z_BQFgxaY5m zOeU-(xC8wx0D_swe@Mj`PCgP*WHQzkNe9zIrfSw2MK~piYIM9J1%2Hc6n}MX*Dmp! z<^YxMYgcfz60BVWsb09V$m~pLu*}Q^WNDH248=IcxRe866uCHn5Q+jY%ak0bGP(x)?wWXf7&f zKvy9eq9Kvlt^YDS>Oj`ua@{vDpqlc%2-$=K0`>EoPj__PZWkVD-7$r{2QbV#%|`I8cd|*U<3Uez<~)MYS_oRP<7_{1j?!D@UnE3i~S5k%e6TTuYB8)Bk%eNR)-vu@GXmuQVIsoZ!ksA z|0=pPu#U6*GeqkK_44~)9+mB+Sm)@jc>sT|GKJ48=B#cq^;V@DfvBkH*yr(v zYk#pSD$0vqHig%l;&J%WdZnbLP)VV`%xov+Pj9~9AL3;pL_|BE)Py^hf#xr{yH6#& z2P}Xh70W>>=ZfT{MWI&4KVDaFDxe5if?Br5*fQW73qaaNBD%Dc zrj^wr*9(#$EKOD-24g?^e>>OB0d0#HH^F(4WT%y2snI!Ka!nd11?h50(rXPIOgZ^{ zndY`pB+y*0*0O-Wu^OV!+$uRrNVBT3x3C+#m)I*xSzz&YQO(QoUBIKpuMmeEaFm;K zihN!_aBzSQwNBx#&wTgw5cIi?kEy~l$2#Xo8b?aH?P#*~66s~^XBsjOiXXFC1 zOB}2p<49j4gQ#SxvTD!X7rcLbop3cBSqXNSJt1br)w%7dV>8?VtI{?t3k&@GC)X?n zbD@8=N$CJXpKi2Ke8`f=<5q}-wZgBK7AxmgpTti z8oI3~HbK^K>%Dr-%4RD=D?8=7$-a;XF-TuWk|8z?UY~A)olOC?QxkLROV8Vu1HSzf zdGeh9cjRr+0j2dH*TrOe3fpma)~7mUd$bODuQR`HO@qoi#zefubTc`xf-6Jot^Xle zyrHQ)5rbfiOt3F>GVy`CN!dE8!zFSp)<(_IWd z9?DLO+Vc4k)yiCnx|z{fPGm@n^ZO$QB!h;@AhstY;5^8p<{_$Mp-)~4OmNL4oI~iu zVi=7M#SEI~QR){mqn$JDYdoTa!q=FAU6(fqyeL~JYGk52c0Zy`ZL`aaQNy z^F=aOLj{EYo9T{Gc6SM`X3s+pO%a>9x#u7K4A&jNB3*-aUmhIUd(MYfvde_G$hh)l zy`RGCDachEO>VSz%(H`nYz2&5v&6a21CSmjA~$tz7VL)A-QSKc>tn(+88^mXpP!9; zpb-}4eE3YFR*`fQ5Nz*#Y7^8N)Ds^5 zYHS`#K6AW)V)i&v=ABl&K_aM?Zgr7kbz^X2ly2n+i)zC(5urRon+FOQOq8JM?kX9y zakKS7xb4xN2SF)Ouk{etgq+&0Z#5Fb)T!9zgT5nw_{$s0cq9Q%Afk$XFQ*Sc(|?5 z{5p1)3#uPZuTeLF&S!}ht>7W8p|TUc>HREetjr@@uD7AIRU6HsiK+{WkE`_|ImJZ_ ztlTQ*QjUXYGhUxwhC1RaJeO4m7OS3?n{vSzbhLIF2D|~?uglhX2UzH%FZ}LqO3#aO z<4U}=X35Z*0EwUldkU0I6s42G#nhK($LC;!2J(}PcXg}Bng^{R5bLXmIs!qCoPuEv zuT#Y`FTV-utjl7rbvA~F$6+mCqrN!Yo63c1()5hM;^1J$>xi{~SV#Ds_Ulp#E|fo} zL)z0xvwYB)&f5`ODLT_l0J1o;`q6uG!BSvJQ@ zuf7<-oJWt$mKQ6wY6SWtn-DMo+vrmCC%-T&mY0zuB#<-)91Sdvjm_s;5m&9}o7#vl zP>xr|nvQ?{SlXM}{2&6D{#Xjz^12G8S&wi-@(cT<*2dl9?vQp8k;c1O0QUdq;+XR( zxxZwWM{vNM!{|DvIAHWV&);n>1r>AB$ud=#z$3Pp0bBInIUf!vSC+FGtrtlB_ZWO_vnyiJ?gqo~NHCxH#!Z_qtWAxIY1CkZg~?j_h84 z(8YUbF454)n8EB7UK9(v`pr17UPvd?@D!|_x!8jREgm|q#XMf*9BIai!}fQ@%&$9= zl4{d)ONS!sdu4gu@;_hP9h)O&Q<9N9p~9`I$CCe7J0l>UkD&uQZq_tJ>Yefs!95h~ z%gfn7_fq^w%I%J17A#d>T92ecWX41xI-PQFCo?P)z^TXZ+k>8rEN%i5jf^dL9(eQG zpEFHjIfbpbJE2!CEaG2d4g@={U})pB8W2t+;;Dg6U{fM0{=;CfXHZR}`8iQxp#_=Q zKEszoWjtU^$P1b%_-H5IOM8y+6HJ1wEgjxjjBaZ%{U}Og?^Xnu0EQZ5kEO>8ul42zAVTUof$(h;g03N7bY#=o_VL@iz}7WHN7~8 z0(P>59r4}8&oSl=C3hyS4XQQSyp>HkIKf+qz25hs=$uiYA*JAIQ6)M1)rq(4@cXzz zvLu~#gehwZg@dj9*yMxyRNxl07^`@p{lCpT^tK!ztl(+$UTvGZAWsp->4J;n_WU?l zl6!yibnP^)nIhOKwZzaJka%3MFmb=i>+hlGxD!FuwSfTX?hbmQQ)q|GEHSuJka8e> z;u)9LHB#}w%OVzi(O;j6=c|!#mjsbak7-6q`}%*k|2E~)?buI;( zakce+x4<6l%GW=iojG*=pLD>6W;G~5gxxOQ1cLXsq}_}O1&k2BqTSTG)g?mpy<{dcP=3E}V5pd`z9 zq_ou~uiWQpEzhu+07Y34S!y%>X%1Wa)Q1A9k?r{K{pH}O>!r%!n?_*g+F5+Se=SkE{*K`#1fgiOd*W{`QNy5#8|XN>Or&|+YBa@yIwr%-Oo z+dsoeJY*U2BgdqXF|l|swlDnp-M1=vBG{O7picJGV|S^4A@OaiO=FFB%&WkZvQ)$s znaQB$I6lEpM%sxQu^6x=J$gp15{sowJ9uo-En4R0tz~?OpPjM(l#CJ{#znK_p`(%N8 z)0HWi57W*v(f_QPz1OZ>X)2UP9_)X#O-2DpC~id~mi23H@?1iHV}B;B;>2jD0s35b z1^&wMn?lBSpog*@#|Jg8$MlhD?_A9+KRi5g^Iq>YhM7ju>8~ay#Ph9xFf=yg=BynT zG4;G6l>2ZNs`bA<0Kg@Z!I!@hl!eCU+WR+q-+bOeR4d_)06U<@_Qu0+ zgT+b7+uLjGq5_cM z0o!wC{R4!aK~L6@$BUVl7TYJf6hTF{43q!ijeFVM0U7a@e@kEh&4}nw@;RH`9G3G# z%rw61Vc(uVd&W_wD^4*XCA^U0#_X&>;_Z`=_bR-<2 z#_A+$ElnH!5UPp|O*IE<&^ZWOH?4lw?UQI|YtZCt*FZh~wvI+<<}S0MN709LmU>t@ z{5kJL!TAYVzTA39`U&~S^45Mc4KC}-?Z^|cM@>*+wvE@>F^QWZ1n9!GloFLRS+g9& za=a%8Lb~2sAs>C)6>D~p<|pqpGn-x?9Mq6kQ1@HdHnBf&Ht?gGur8ygV!p4ujv_!!Oi zn-Za9$%nW4*Gd4|Ec?N&Rnkw2;aX0xY+TY>UsmUAtrOhO4t94kEVd$hX+FI8skeC$ z?7EmNamT1MDR!8N8V9m*-y(hoOxo|l=$pXu< z!awfMVd0jZ%X}BF{=8_l1rmNXMw=#gW9QiV$N0*mABq>~?G-cuqw+d=U_mfC#zKj+ z*0B*ER3i#*twMUNk0<{=!?F)zq`e^L4y1Tko31~72sql|Y7G^7+&p&zOFn^O)Xolr zNmplatzoAzDq)*jr+<#TChX+Q3osFW`m^jQW~+kj1_yV30c za%G1YJBp)2gO5n9Z3re(``?OkRcBCkUNX{Rlk$F}c-(cW-}4?`SuOJD_>m`ilUAJqgthPcUlHL#5?I1arTb0$vR7`FP?&Y%^ia=>Mdi`UeV9me z*^PSja)23iRC_)|xYWsNKx%5$ptr(!-56wRl2=K0rT3`TS2H#tB%UeVvszkH@sN7r zBgBKRQ&iz3pqMrX4Uw$iY?(vr5pY1t^Q~7Al(!DxT7*W=gwu-`| z`M@WbTQ48bUKYte`iA@qbme7O8gHnM;5E}brFMd% zqAMNOVWHxG@v8H%a0}y~fY`>(U8Z{Df+Oe9tO#^P_{ev90e={VU-D-N^R z&)87ggFOrKZ5q#Ncr9M!s9~%~J~PNOhX8<-;0+~6+*i7ev%seM_~Gr|Jc=8BTf3B& z2w6UBj2>6Bsm;EzPLnco;q(!WFCO;Y4c|}UZU|-o>odQUYQs3p`zSTmbr{{0bu^zK z!^&@Qrm4-YGqMJEIfbLxc$U6uj*RPjfRQpDSB)W!sh=Q?TY3F#2JBx$`UY|TL-BwP zU2;d%s5AfRclxYQX}40B)z@a7ZlxB-9nIsG*WIur8tv|kcCYmDdqTda11buC^+=-g zYp2#qj6F`R#4{W+fxmt69+++h{k}F~Ar1){W@w(Scyr`V-Q8a{(qSW`#>WLPk?-wr zB?_zl;9DN})pKjUoI7#5RWdm@{G+0y=YmY1-BAgdTM@xy8R2;8r7_Bm)sfy9^>`ME zIC4qbdUW^|v^d1M9>{N0^Ks~=g_{5|;0L$sgYPiw5sS_>wf*Atsq!14H$KS17?mYh z@{v&-E47$lvt~e!E+joR1IjvfB|i52aonr~r}30w?&U7-{`P`5hhtGeQ74!>z}f7~ z;{{bb26oEsbRO>GNeqjAf7fx?4=iA|^EREA2Ft`!<&9v0fjE?MYAxxh1>4Zgm;oZZ zZ;ZdeTr;Eou;e2>>ZZB)VrCqfck5&JxwlMEFw0>(Y?!Ale)QvcXsBA7%d08#g^LKn=qwr2uFz!P{UfI)(A~cN76HWkFzOHG(!D%e| zX@(3Vk2!9F-2MFZP92c11I6br8vC)TQr_fh06RyW?s%05TZcZ z^N&Y!+3||J=G~?~6&+UxvMJL>($V#~&?9DCmew`%^JAw|UGwihn0yOhEpC zdzpESr^>Kf0{$e6d2c(*lJPRJq{$C4`9?FADT|jK{*e}Fbu~PxKDnm#dTY)LwJXNI zQ*3C)#uvOIB1_ScgzR4Z{6TB2gLG~J*+J{vT~j08o+2cL-b8$-B1HWp^LDLA9JuQ$ z0E^%9ae?*d>ns;(^UF7JZ`$7@3%|hcxEP3fh_yfqn3TR*7yt3|+w9wN=OxVz!!JCk zqLptB8zbN@RfHv9^_JdhN1T5KB^*v-!{<%h!bCOAckcXt&3WOM&=-YsR@dDdX!$VG z)<*yB+C7I>nBHO=MLlewua}z)F)i@#(Vg}0xbG6=CN0sAaBgO=F@eQ&>>uf%P-W01pqAIxZ+gX*{qm*>{X32ot zbuD_`z)VDUt)2~JMs!=liQWsz+F{$eL^1?u0=BO{x7~`X-I-YYw-;ctAiVQiZ8ao4 z1#AO%--)y>dj|Z(Js}6#lRhgUFu}u^LB!{TBYwrg2OuL0TWAT8-}ltnROC)ou=(K< ztFq(6dG0r!xANiJ`w>I3{deukAjj`3FTyHsQa#L&BGq8oCjQqT-N#%_u$`eY$;Y+Q z@z#XL2J)vfS>X6oRgT5U{DeZlmYZ-e!4KKaI8)9_ZqeFRMjg>kVUmTY@@E4=@B$Ts zJs3PuO#bzPh~G6tM1V<|Okjb9+z&Ex_my_GrU0-#DrM~Qv)jIvs`8^L-&mVtoWZ&z zV})^63zujZF(*>+)(|+;D%SL}>9Dtl$#h6#*5yFHm5G>L@OkefHW~X-ili6#0Su|G z%Uvqn=>;R0=7m$S?}$)Z+CbA?tv6KZ;@44)D* zLwz?kFsHq^y5pR7V{-Y>@{Dj}y|wA^=i$R4Tk}x>{gI!XP@uvzRuv=PVPB(BB)m32 z26jh(Dq4(V!-XZ{FhX0ZpzWW`A@Tv$Z&mtx2=iW!UQInW47J-zI@?dmT^*;;__oZf z<1#qCvAqQcCpFeDbaWw%-^y1J2lw7!Rw?ili6wOU2NW?h%2Ux77!!2jOKf}KgP#bn02+MW1d(rTl)LVeOF8)rkIjI4 zZ|MpMPzEwnWg&-Q7a-0)I+bM^48`+4f14}&fr&7HQRd1+P`p^ucZcF$C{8#J@B5wWoF5-QAQzkL&d%)KGjs23p67-u?aTC*liSj1gVq`Z#~8uw z_jeCfnxAB8U%aiLpi7_R)6<^Y{Et}jVOB?&51+6AX>&NH1wd|}YVNv%7{#uwjX?kd z)fiSC^unzjCeF-08{_Wqe_wVZ7oLtNSN}F33d*B7}#$BdO;rj*HD7Wt#e63vs+ykkAokYq6Zc-*C;C zO_~jENohT3AYYqws>h^6o6!MI{J_Bm7hG5d^3@(z*&V%K`!wRGlGoJh*isvZD$%YwCTf z2k6j-CIsXJ`e0v!#hj-^Z4vK|*Vm&~i%5#EMGyj{Wpp!B`DoRFg@qZQ z0f*GW1LT@{BHmSwjAOMK zr3{rHP+*wl%US}dl}yD@*l}4g*vs#Z zMoa!kzb0D(h}e5U^08N=91hv<0L~dXNEDHTW7n8sAg7oHvnWV8_b=Bm3x&&{6ydR+|-xd*%lxXWX9J9B`x;W$C6?)d+S zJD?I9!1FQg0f@UA7~AA0*}G%BiMX8hQ2v#6fe%o`WEz6zt;#P(jw9NdNJq_1bc^829}`Eykv6*0!)+X2eCI zf<^Z+iGi34hkNa8z;>s$(L3z^ikc{=hLc?#_fqHtJ12-*F1MwzwqZBUCEMA_dWGaX|NK%CBnec{`mKuy@8+0vX98dQ-l=0xN;cp;$0*y9Zpa-?C`{$~NYEUK^QrObfNL6FKd>A{Aul7% z`(2bG1b7v`oG;k;+R-V}4#=ZEN!1xYH?@{rqEkrATKwxz{aYWtnSBA2`k^!f_p5%h z@Q6p<_U2D~pw#<{2BPkGhc#kHo;m*2HZZ+7`Ux4!%ES%zO%GR$z-Ph=kE@xST$&Jt;A0&efXl~)7#d4c@Y zx(e1bFngg)+0YfL5OU=%yf|shJ{qjv&4bw2n0*@upP=^FPB45mxKJWo{PZ@6YsGuY zrq6J^LuyV2d}CFcokmx3-VdoCe<~@16yMav5)rAvLG5s#I8UUe8TxeoE^m;FemLt> zscMfVG7F@Dx8P=7(qU5Tm17<6X^DMf^|&x8ZTVZ@&gi8w|t}aOdGlRHw5wGle2o|P<#o8@=mLE1xP`a0K#4a?1X|Mg9 z%WpG~(FA>|Ahv4o%jN48#@G_$D-q#j-}D$c5YDCZF$e}V5Lvtr<Yw4BC`pLq4rBvF$EGs=6gHnD#LmQPXLXeK>4%KNVCj1Dmi;Z}O;=|pdPjrv z?Q+Y;0cvdYw5$YU2zPo1#PwL?lkzIu-t%2{Jnvg%Wf0nc@Ib?lv#paxQyGN;Zf25) z4^~;D+ZUF)R&<2yMlqNAl@SAuzvLI(sp{s!&n5o7*>uW~^0ya_i$faZ+^srq_}Y5@ zl)D<*qp%!)C24i|c{>#5o6hB2kw`qkr~)|*N8fmu<)sSJvgBe+h;W;;-oGrC&J`pH z7)sZ1F6Hy27}V^%D^$SYc{QAvBS>=Ko1zh*7V}N>`8;dABEUHXGDZk*fN36AO?^on z(v3_)a_O)F0ws&v?74LCuRk83)W10Kj{Xr$jWvPY2 z>}jlXImk5luqfKj#Fx@YzutVP7q#Kq33&`GQG;{H&%W_bZ(>h9gxdwpM{cqDOob7z zcr9{+PhL;>SMZ0y-M*Wrr~dq^K(6au;q1Y3;l1+ig;yXsN&Y`pJUlBa2vCxW{9un& zvQH{9?8O3XravhER)Eh3q)Ay05H?EJB~ORCpRG>@;$D#3I&lH>E}f9mm6^f4*f}5-!La};;I>0Nebkb zHknRTZ}u>0!{%+JT!1&nf||KPPrkYii@iIa1sP+QGeG@naA5qBDL9ShBzc!#klNi! zADmGI=)EbJ!M`=cD0^5r+nGfm#&sv_k>dVq1BSK)L7p5Q%iqo)eaZ5oa}l{reX;zM zL*6=@{YYpOaFKHfo|uy8k9QW~-XG88UY+WQQBod#I^e`984gqU1&Y7^Ckj4BIM<06 z{nl=U#SXI4=h|=w#UezafXtx`!ysk-y8sz0t-+qy!u@dH%B=)7X50COlD|%Q)_BmT zhimES*zLEi6xYW*OyCVXvV7BKxHYCVE}Akp27)W`MhvS;!*|AMPRLlsQ>Xj=T21?p zmlG|2#j^R!n>Q9onUu?$8NQU2Nok=O!LchrK9KJJA_N(OR+>Ltjp{Vh|41UP+%PAC z$8PvK<_QI}i;2pv6Ox8P8OG8%QIpf1B=2s- zTv58(L8q(yn+<-3^Bgv~tq~p-@LZ2bkQ59;M4n)hyoWE0e3h>2JRn}z7mJuUIb9IR zbL*IV^;HRKD}W58Nn$>K5J;bU*AX}WL0Y9~lftqQZ;#YBlQ$!8;@anO{EySvgphR@)qWq`ntACla2V8(JHDwmzj*YZ&Jc>-Abh$w zM)nvJPG%4YW%_j$dLs{7!PE+RY6C>i3KK-oNr|ymv z@?`qW^^OZYT|La;il$mxsMn8jxA_|w;<$Jl`1ujwyAFQc@!bZ8eRjx`%n5w@q|1XU z!}(RaxzF7Bp-RT1MPNm=)gutyGf-sj))tid8HvIOiOcxRu`uSRw@*k>cPscW&oR|y zt3shZPpISa)M-Pqd1P#f}C9KbVDyiGM<3X6FyfNTFgaauixZF;3#c0;N-au2; zb(odU$@iV0m85IT$9eG^i|M%&u6Ry^)U-5kiXogmJt< zDbEq@SUdL;%AhC~v2hpq#hW13O7f$-ORl4&s_28PKi@cuH|&@nS{ZcpUR!qsiZ+i@ zi-3g|m43nrf`7LnxJ)Q^bKPzCnw575Kezg?cnf0_-%_;+p0>Z5znT0<&mHbPXldQ? z=w?vsllH0cMw%q=lZE;umA(h*BUt2m4<9h``;6I(tYv}(9-NJJkSklRcK}zg06X3V z+su@9?g6mqx;Zwna=u zYcQmE9*a^Glc%@S{@=xtE z2wSIA|7+~k2WKRNmChWWd(MU%rP>}a0^TccFGlyJ3oKBC1-0A&j68Nz-AaA$zQp!J zrDTFf2QdT-6wq6yA;D<;mu>RtU3*|_xKpq2@EsqB0o3ccv?Qkp+fv!UxSm_t$hxMP zX6+E6xzm*Aogf(8c#0RoyeY~1Q=`R~5!J)hyDt73O|ZnVCv}nHNU{fG4zhs^LW=Nj z2LPITTw46#K%m{Cn^=Z*ovW25?M4$$ip^r=>&HLO0R;Dk0&C_aB>VnGt`@X#a=a5{ zI@Q2(y%F8ohu8wQ)WK5Ix-BQ;;k%wyl47kMPtU2-hxkYVcv5Ey?UivEk}1E1EWte+H zr7o6vIr(mjdNd!o@TbUpuo@HO$7;a9N z0RdD@h9Y5OX1}3bm@Bs5IN;hO8Lp@tx;RS(>5-c1C1Z=`9a;U?#8Yn7^Hfs<`$@c= zi&#A#V*>)M#ixI125hVgYka4~D}0 znXv8&=K^8|3Up5!!`Ro{t3+OUH2JEt>r1oF26m$BWEIT+aJ1^pyFs1$#PhN|yaQAz zrq){#2a!9#C%^7?nc&VSWLrXC^%MNsAW!-n5gN#{jPyhklN^#f_(Kuftz@=ICu{Xz z)_UcB2Cqu$qMEso<(p*(>C7tmw#ZS3s;KPTfcLw%?@bj^K{);C0)z*_odl)pE8u@q z47;$3BlXF?UQrh+PExdc=7sO7FbS0Ke(*~1wzh!EM z_SyQ+89?HUb%*xr3wHM-(m07?Eqi!|?GuNJC?wGm9&kL*f9>gW+VF;+jgSjV8#V+| z#wYBd?}?3&E@a4Xe0Os5Bo^V?F1--&4x`C1Pf}HTP5gP8SXNpZ_ITJ=6V`r^^h5d= zKM-qbZYFG`wq%cuiXx4l#+bK2qVTCgW!8LAa?%=mF1OxQyVBkW5cl-XcP4brFkWtZ z2vxEwk_TekClPI&1tQi49p;{`AtuPM>Wt)B8m7aK}}|ts_OMtX|T-U zKrr&Z7Ib$}`QO6#!5UfMNY_fb#b%OC!OqC56r!%@u{4~0zuhXNV97kxLEt z#+J)X*cb7Hph0+hLaX=U(Ck<0+)~cLH5YmOlc)@(s%D~7vB#VX>WUm~l=~{Sugyfz zGlH8)wH2`c#=|Fmp!`_3ja?+OYTNcv=-+W`mp(_M@CNNK4EojvY2hpK$JOzka!6NJ z-?GC;vPs@e!tz2%bisS7WE?8AnmJST$mJ zN01oTiV8EBI^HtQ1g3erhA7C$lRaR#>v*tNi;Wq{=kIJ}^wc(tvB~KSTGk4t4FRg>$>SQtvd4L!^tkd;E@#o6$bi zjg{!^j|RJz{8fInBetJgDR7JH2bass(2&$yfCH#jwZ8V@V!b_1H293-=bnr3ZRf|I z_ZFrcUSfjxzh|=In_0o2cbB%dw~H+eBN?Vr{-7wwiwM#%>!UKvm{iOl=_geu}oW5uaJ(-Tw|x zgV9L9Vu5IZ0F{Qe2%o}!Rw`qjqS;yG7R(cw6WRDg;-fQQKHIkoo5A_au$+iFQvDq{ z^PcJ2VD-*b63W@ey&KUg9G45-E|@keWSv^^bh%rrEuMJ~rZJMA@)3u^+dg)Ds==m} zW!^ky8u2`b4_kj?!PWQ?`nWZKv+%3}bkBA+e`p8-I`wuq2=bY~TTN)-sXpp zW51zFbRAuwHJ!l&I&*AWq@7 zX(ySvBSbATWuI+XkDEhW-!p(wJK}+n0aQfq8NvGD%$_p~D0#ghO$7~GG3_5Eu2JH|pMejX!oqS#;C^J^j; zl#X!s(>QdOHf2t@i&e!pgfPvbGBoW$u~RSVUL>L$u|z4XQ|*Op$L^Z9o??vqR`ZnP z-YuVSLE74w*CkwD_?osdxOpXXisV74j|=F`SRLU|8KkG_*()bDAutytv=|nxBZed- z3Et?6O3Rq?gbud3?vJI&3BWF+`>ya+0k`* zv{>y_^;&7Q?4}8QEG|!=8&C<4N$Ncxi>j)j!d#BA)(vrz54|7e1*uML;k>tLZY-W?Q{ZK!=+HjZ|cq^ zJK+BeN=znDvR_!ukkZf%dH1K`Y+!>N9+d$3KH2BY0OHiH1fieR;b4s8Yse(85#sND ztjwI}$A}g(xl|$FvzP?q?^oaSw;L@@C(_(!dJ$t}LMxMvzydbxol z&aqpWxK9C@Ap&6BkKOHHcqIb(LEvv3Si%s_3fc`;6C4wo$c;WNm96k*DMMbXqqg+- zouz(Nu#8h>`1zmz_a!Q~SKde0)qf|l2fzVuJlT9FJbi*PM$zq&pos}xcjhP1ItQsq zcdExoS@~u=66(lSFg}Bf0xYV~O$i1D?VY^cIj-r#IJ5OKL}38#y)qkhqDAO3ia>N` z!b}GpNV+DxdJle6xd}c0J39lP=j{u*7ZD>pI5%(>BS5jy58Oc)OEv{PT;U2Bg*+|3 zz4LtqIK&a#8d^ATp9a^FHquQhvM+N}SKG?jm*=M`q1#gj_ek33V!X zvKcPyUG{gT43jBKfTO~Y&sztm`mdeNq)Vh3lO?U1a= z97PrItp0xS5fcL@_lgp@yu?J=S9SJ)2#KU*;-#0g^kS8bv_LbAEqwJjPayB5CL^|+ zo}n#W+fUrYX|n<{Z`?N+iwj)*FkOkG@|;syga>_?UynWSg6?xE5;iz5hBdDF$axa` zq6=2wP<*s^xYuAu>lIeuBQ5p{-ZDCF2;>gk-X`D2r5HXCTDS=mJca2=oUsFG_Rm5J zs^euk5lC{VzUdf@*r+CY_6L+hKMJ!4e>PvAhJ=d4_GNo*r8Su@s`+2bBy++|(21nd zkl$)Ne`@W_ID1eL01LTaCGKM@#*2t9nEIJ2CvZeUQItOjCK%ZRwxW-2J8 zE02jTLaDGbWDp7a=(;OY=S*;TpM!%YoeBaG`M*3P0Ea@kn_m1=%YJK=r>eC1@axYf zLI`J@5{k;H_0Kk_8TN%q8T{ZJ>ygDX2;#>Wpva!?;Lz$Uk1BPs zk)T$t<@Njpa*MFngwo6eFDiU4mU13-b}w%HBg##2kO`<(6y7aVz$`2;r^q~9QG4gC zL&&Uf8JF?B^ambAOerJzE!NCU)RLri<&(x+%)1{FDog6)xiJ$zh@>-Ctd$;|rBS8a zwm8i;v_v0v!S~u@MWv7c9%z658E*tL@{ui)<`)w^6~pM_fJL)UglJju>)SGS5iBE1HDijtU z6xh#V6SZHXf@t7mNmo4trDh+Ujqj5zS>j;x3fMl5x$I9kTi!qpNh{UnAi-z0{hQMh zT0FRHp}XiI9a<_v8hqui+eXuZ%Stn*0Q5r3g}NDmE~{XH7H!`pZH$%=Caw??Ivmg_ zd@s7X_gaw#h=gSm6+`_`k-m$ROwYm6iwh4VgRwM-O!m|iJO0xu`%hT&>GZqbypRQQ zoP+AmJm#)a?b)zykm!gY7&cJ<50X@NJfz->m%7RYcRZ=0h( z{c5T5b8D>znn?fCuJ;fDqQg(%?rwD zdM#A_RQ)mAk>9-_t(V$EUcwK;sYZNtDat7HgRK7g5sVtk}#qA1^Lk05X71!PQXo}3F zv%>((#HcoPi}QoqVtWI66?M^}i8xwtQi@5af|cRMsbJFG6P&54&)Q*EDp4tbp%s&~ z0@W1Xj1o{pu#_FeOJ(Ug1`qHA*5UBr-m}mYp@f_0k}k9^z{u_)Rqy?C!-OyZ$B&<{ zD8t&dauf_z(jE)e$kS4k`_@2?}rK-!LR=$x{gH`^Hj-gjLpJ?2wp~G8P$oD z{TDE4kxr|*is%#}J`5ZJBG%Pha|mN^$-Zd6_ZP-#Gg()sX8pI^kqWnlE19V2ms#V) z3cLl4^_rAf6&E+3g{aJN!WR*$H@0E@cM->=@BWZ0a(LOfT9o^tYwu5H#L|e9hcnqv zLa`fN2MXmvfC$99tr25&^(z;|{{w5v7Oe_pTrL-mZ7wgBY1Qq|KNkl0CN{%bWP$pg z%*E%N+IeR`E1yOTQ}X8ZjOM{K9NK?TyRLs^T}*^_z80gzqd;S!t@rY3+L`O@8!_|< zyK*5$vP|Lvh)AY_X-VR_ z+sJ@f&OaJ7eidRwp%Z!Ace=o)6lJ0;0Ny`2z@dP1i|SZ&R$1Q5rlX9drHswK;Lp^J z2dA;YfBq7lH|oSyKN@1p33t;}=s-*3&9aElWwsk%!eS|&+c{F(fMKFwO&#Xx@W=k* zbck?xtJ>H+#P`7&cQ02?;TdI6W{?pyZ99VSvqnJJjWJ<9l0~P)aH^r~6$%zYzWw6K zDb^c~aE@j=HwtmbRu+w8KNE(Jjb`tqWy3z_01p4~h^*RY(0$S(k@iFP;hS6bbg&{r zitXDoNxZLjIFP38^sITJaEYp}X;5ugN0kX;;ZzF=sq{((5Y~X2VEz9&D|q=dzyH|V zw{Ejcs!k~$@pklavSOL@5B_iKAeuEBBmR`NIBidsMSE&IETq!P8cIx{ot>TALyGl& zn>4de_kJFN3^;oZ4y2(P0f$Hd7b+jRjxI9iDl6?@W??<$+lW(P08v9rCrnZNG-}-4 zem6^tzFvo0Q-8XEuN1}1V1_!ecez>1TG?--|Mrur2>j}Vd=Q=+d%^&E?)W2a*MTlt zv=4q;R|_7}B@MB`$H@zQwHQ_MTu$(lmDlPa0Uw?& zimVDnH)4^kG^G+%$Dbu-eFVU>HFU?Qr2ITmIa3+JoE^WpcZQ`G0gDu+Cb_s2kXDW2 z5loG50MaYts#nt@wSAAsN#>g&SH+=l^L2iDLnA600J>f{nbt=Q&I3oJP+#l{gLi(d zv_9f2`+GB(51D_a-g(0QcqrzIFBX4CVZo?Fkcx^1C{8ibkOFJAlai7$L@UeShB~ZP z-BB#s`h%*@%6WZS&*5;zifqSV&9KiP09&}Dla+wQw(Hp-X_o&t;q{mDjoGikDK^tr zPD1zwa4f<;5BXYp@xNz>aoXSGG_AMk5Qin|ynsiD(4JzimEo65{vR5Qg;kcq{c_LN z#<_2jcKB`w%JQ%LuuVj%qQ6{r4cl)p^*X%Z5J+wiBJuC2soNPb4z;qEQAqkrTiH0E@KyddWW)eu) zz0=pf&&=dJ_pesna>IM|;*hQg5_!Mw73;;Q=Jryx_HDHBf>~L$$U^Ex^`9s_bFlVhH<`M#+LsJRFKP*Zu z#WbXpQhZ_?)dw)%qaU7wJRrdd{1O|GbcH<7&LVU42%jG`TyXMZ zo)A(*(76Va=xNXjlL>$mg-d=4^>Rlb!3_AeGQU3E?f($d@I)!LFDQ^QL`6vUjKv*X ztVV@WR-Aw|Nj*w>lOpDBWx6|(scs{i4xORI?C^16A>YQb_+zg@iP?Y(*i1)sL43#x zF_?Rgy*A?Cgk~kPi(JIEI$mNaIlW!b&@9KK1-@WECRhJTd+Qei+AI-JBwNDAL^hHL zw=E$vTFP%B&k#Fa^8<6-2PscTZ-%@oNT_->UJ8XIzPL0>j*bbqMKe?h3-Ho!0KEh+ zh$c8+N zkd4%;gE$`(P{6wtC)t9UI{IEl;1L?lm116qw4;aU>B&a^Q3M_fgIz)fH!ceotoA>` zq^g##f}sxXxWlDo?o)ihadS85GbUaVE42_V5m?JUb`0J?er(!kai9@BCmkawjyn|0 zxrhT{5s$FQUKph!L7C+1jONMFiuyeIvaaEjkzal3Dd=IAh--f(g0S^=aTV$JB0Ax~ zYvniqR!C9lX4Ye6#gzAM*tg2a;H>H(=lVjyhMp+B&9%y)`@;5d`CqU3zo<@~IwlM1 z=_N)DU>}~z@!>`!=eHJD%o#7jjjgyH39`dy$H2!R_wyEPQ;&U_W$Njp%9<=MT^a_E zIv-{VIM_UEsI|;|UAM=>K*_DnAi`67jaI)-WK?j&%ND8hE_~%72uDO&M`wJ2*v3mi& zz>0b-)eBD3(CHD=yyUI$pl~EGN5W4K^`i*nMD=fWH{PgIeE)h=U>kW8{JrMaHBJ%8W_s_bWRN~Ojql~3zm_Do zHT@Te)k(nP%nqYVq?M94F4MaAE`c2Qb@IvupSA;^T6nTn-Yb$?%s20&9SQ_4>jd}Y?^G?`KQRLYn zq3r7QZ!!3;|mBQ zqA8V_DVFu3j8e!Tq=)#?LqFkpN>?Oj&%ON%d!-_X*i+X!p2kQ(#*_Ja`?zE7+bFVJ zJ)H%!%d^e-JFgkW4nI7`j*+Z}G0YiL{}fOJdY^1I;Tl-pPV_U7&? zY9IUkKsW3rvu|4EOfuVmu?mos!<6r-l1T9E8GkPzBLlo+X;&;Yn0@c1l)9NDo@h;y zOfQqlpjZnrOr{weTSe&;js(QUponnp;_}>Yk+|K9)E-Od@$kkOY)cX==8WLfAsNQIqLIxS>h| z!C2l~H*Yqxu`rjidp3|DJs?2{F;b+(KGRdH+txZNi)?V8_WlS~hOK;%8;%w8w_HTR z3m$KDt2mwj%d)nY=+N5!vXV&P>=|vZpK}E5H)cd-4;0hduqdjg+j^t-Oryo>=`(_b z-N9xZ(?xzr)^-s%7s-Pb%J_v2-vHX*D_S7K5~a1Eke1?VcpU&MkelAeMX+r7Naez5 zx)PAkdv478k>!ny&RPG(!FB!mxsd$5wqyF-C(-s3gw!0mKjR z#M;e(%4xU{h#U#k{8a(4_^O(*K2}|}+`WLwyF?piz-mx~(4wnb?k%k1nTJ1eWMW#!kOv^YM8CJ|U}M0)7(;)#NNMFr8$IVaj`R+*q+4w% zzrHdF6q-BqFXIYJ%giEi*6of+4ysav2`_E|7;!jcguKOfSdZY||(OIR*O29?S&ZySpX5y5UJ#hJA zo~O9VWa?3_f04jE50aKhJ7wxYg5PZ9No=U($JF%hK9_qA)zH)*m`HFTZl^5%FdmeK zh%@U>VK-$jbepC1o<0nskpd@V^x@M!S8Z+ZjBVG+!|z%IWM1N)C$w#BztXQd#xDB2 zRIOZ4$3vR+h5a;&zW(#ZQ= zUm!Dxj(n5|rIJtOdww+P9}7@pp%K7K1wnl8c4TafzWo)ZIL_KwF4foA(uvH0=SQD0RxIzBRS8dU=nA@*<_)X5jKjv&j6~Q^ zZl6mQf4%FC@!!A6jMFrZa47I-n%!5V?*BH()QjBWn#|jBjTO6AY9JMHledv(r-4zT z;*+oiiK!lR`r^~li}4h~IyDqwcp!qF zfuC1Vd%~_!XoO#SO6J|^UW^q=k?8K?MC8JPGQ~F9gVrp%E+c5f51y|$T5fW%LxA)p z3_na#pix_=F2T((vmZK$r0M%8+R}@|L;a5{!eouqM$mXZ6^D$SCJb8|<$wK!dGieZ X?A@zU_9(Lq0)CX_)MYEB%|HGhwFu+7 literal 0 HcmV?d00001 diff --git a/addons_extensions/ftp_feed/static/description/banner_2.png b/addons_extensions/ftp_feed/static/description/banner_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a670f00906312b3f864c8c148b76af452ba371 GIT binary patch literal 43906 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 Dyumsv literal 0 HcmV?d00001 diff --git a/addons_extensions/ftp_feed/views/feed.xml b/addons_extensions/ftp_feed/views/feed.xml new file mode 100644 index 000000000..69f8514e4 --- /dev/null +++ b/addons_extensions/ftp_feed/views/feed.xml @@ -0,0 +1,156 @@ + + + + ftp.feed.form + ftp.feed + +
+ +
+

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+
+
+
+ +
+
+ + + ftp.feed.list + ftp.feed + + + + + + + + + + + + + ftp.feed.kanban + ftp.feed + + + + + + + + + + +
+
+
+ + + + +
+
+
+
+ +
+ + + + +
+ + +
+
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + + + + + + + + Social Feed + ftp.feed + kanban,list,form + {'default_user_id': uid} + +

+ Share updates with your team! +

+
+
+ + + + + \ No newline at end of file diff --git a/addons_extensions/hr_payroll/__manifest__.py b/addons_extensions/hr_payroll/__manifest__.py index ab74ceec4..839cd1ad0 100644 --- a/addons_extensions/hr_payroll/__manifest__.py +++ b/addons_extensions/hr_payroll/__manifest__.py @@ -66,6 +66,7 @@ 'web.assets_backend': [ 'hr_payroll/static/src/components/add_payslips/**', 'hr_payroll/static/src/views/add_payslips_hook.js', + 'hr_payroll/static/src/js/payslip_line_one2many.js' # 'hr_payroll/static/src/**/*', # ('remove', 'hr_payroll/static/src/js/hr_payroll_report_graph_view.js'), # ('remove', 'hr_payroll/static/src/js/hr_payroll_report_pivot_*'), diff --git a/addons_extensions/hr_payroll/models/wages_register.py b/addons_extensions/hr_payroll/models/wages_register.py new file mode 100644 index 000000000..40be490c1 --- /dev/null +++ b/addons_extensions/hr_payroll/models/wages_register.py @@ -0,0 +1,61 @@ +from datetime import timedelta, datetime, date +from dateutil.relativedelta import relativedelta +from odoo import api, fields, models, _ +from odoo.http import request +from odoo import http +import babel.dates + + + +class HrPayslip(models.Model): + _inherit = 'hr.payslip' + + @api.model + def get_wage_register_data(self, date): + if not date: + now = fields.Datetime.now() + date = babel.dates.format_datetime(now, "MMMM yyyy", locale='en') + sql = """ + SELECT + e.name AS employee, + job.name AS designation, + e.doj AS date_of_joining, + e.birthday AS date_of_birth, + to_char(p.date_from, 'Month YYYY') AS month_of_wages, + e.l10n_in_uan AS uan_no, + e.l10n_in_esic_number AS esic_no, + bank.acc_number AS bank_account_no, + + SUM(CASE WHEN pl.code = 'BASIC' THEN pl.total ELSE 0 END) AS basic, + SUM(CASE WHEN pl.code = 'HRA' THEN pl.total ELSE 0 END) AS hra, + SUM(CASE WHEN pl.code = 'SPA' THEN pl.total ELSE 0 END) AS other_allowance, + SUM(CASE WHEN pl.code = 'GROSS' THEN pl.total ELSE 0 END) AS gross_wages, + + SUM(CASE WHEN pl.code = 'ESICS' THEN pl.total ELSE 0 END) AS esi, + SUM(CASE WHEN pl.code = 'PF' THEN pl.total ELSE 0 END) AS pf, + SUM(CASE WHEN pl.code = 'PT' THEN pl.total ELSE 0 END) AS pt, + SUM(CASE WHEN pl.code = 'DED' THEN pl.total ELSE 0 END) AS total_deductions, + + SUM(CASE WHEN pl.code = 'LTA' THEN pl.total ELSE 0 END) AS lta, + p.net_wage AS net_amount_payable + +FROM hr_payslip p + JOIN hr_employee e ON p.employee_id = e.id + LEFT JOIN hr_job job ON e.job_id = job.id + LEFT JOIN hr_payslip_line pl ON pl.slip_id = p.id + LEFT JOIN hr_salary_rule_category cat_earn ON cat_earn.code = 'GROSS' + LEFT JOIN hr_salary_rule_category cat_deduct ON cat_deduct.code = 'DED' + LEFT JOIN res_partner_bank bank ON bank.id = e.bank_account_id + +GROUP BY + e.name, job.name, e.doj, e.birthday, + p.date_from, e.l10n_in_uan, e.l10n_in_esic_number, e.bank_account_id, p.net_wage, bank.acc_number +ORDER BY e.name; + """ + self.env.cr.execute(sql) + result = self.env.cr.dictfetchall() + data = [] + for i in result: + i['designation'] = i['designation']['en_US'] + data.append(i) + return data diff --git a/addons_extensions/hr_payroll/static/src/js/payslip_batch.js b/addons_extensions/hr_payroll/static/src/js/payslip_batch.js new file mode 100644 index 000000000..254516ca5 --- /dev/null +++ b/addons_extensions/hr_payroll/static/src/js/payslip_batch.js @@ -0,0 +1,215 @@ +/** @odoo-module **/ +import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; +import { Component, onMounted, useRef, useState, onWillStart } from "@odoo/owl"; +import { registry } from "@web/core/registry"; +import { useService } from "@web/core/utils/hooks"; +import { loadJS, loadCSS } from "@web/core/assets"; + +export class SaleTest extends Component { + static props = { + ...standardWidgetProps, + }; + static template = "SaleTest"; + setup() { + this.orm = useService("orm"); + this.gridRef = useRef("wageGrid"); + this.state = useState({ rows: [] }); + + onWillStart(async () => { + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"); + window.$ = window.jQuery = window.$ || window.jQuery; + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"); + await loadCSS("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/themes/base/jquery-ui.min.css"); + await loadJS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/pqgrid.min.js"); + await loadCSS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/pqgrid.min.css"); + await loadCSS("https://cdnjs.cloudflare.com/ajax/libs/pqGrid/3.5.1/themes/steelblue/pqgrid.min.css"); + await this.loadData(); + }); + + onMounted(() => { + if (this.gridRef.el) { + this.renderGrid(); + setTimeout(() => this.initializeDatePicker(), 200); + } else { + console.error("Grid element not found"); + } + }); + } + + renderGrid() { + const data = this.state.rows.length ? this.state.rows : [ + { + employee: "John Doe", designation: "Software Engineer", date_of_joining: "2020-01-10", + date_of_birth: "1990-04-15", month_of_wages: "January 2024", days_worked: 22, + uan_no: "100100100", esic_no: "ESIC12345", bank_account_no: "1234567890", + basic: 35000, hra: 15000, lta: 5000, other_allowance: 5000, + gross_wages: 60000, esi: 500, pf: 1800, pt: 200, total_deductions: 2500, net_amount_payable: 57500 + } + ]; + + $(this.gridRef.el).pqGrid({ + width: "100%", + height: 600, + editable: false, + showSummary: true, + filterModel: { + on: true, + mode: "AND", + header: true + }, + toolbar: { + items: [ + { + type: "button", + label: "GET", + icon: "fa fa-check", + listener: () => this.onFilterClick() + }, + { + type: "button", + label: "Export to Excel", + icon: "ui-icon-document", + listener: () => this.exportExcel() + }, + { + type: "button", + label: "Export to PDF", + icon: "ui-icon-print", + listener: () => this.exportPDF() + } + ] + }, + colModel: [ + { title: "Name of the Employee", dataIndx: "employee", width: 220, filter: {type: 'textbox', condition: 'begin', listeners: ['keyup']} }, + { title: "Designation / Category", dataIndx: "designation", width: 150, filter: {type: 'textbox', condition: 'begin', listeners: ['keyup']} }, + { title: "Date of Joining", dataIndx: "date_of_joining", width: 90 }, + { title: "Date of Birth", dataIndx: "date_of_birth", width: 90 }, + { title: "Month of Wages", dataIndx: "month_of_wages", width: 150 }, + { title: "No. of Days Worked", dataIndx: "days_worked", width: 90 }, + { title: "UAN No.", dataIndx: "uan_no", width: 150 }, + { title: "ESIC No.", dataIndx: "esic_no", width: 150 }, + { title: "Bank Account No.", dataIndx: "bank_account_no", width: 150, filter: {type: 'textbox', condition: 'begin', listeners: ['keyup']} }, + { title: "Basic", dataIndx: "basic", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "HRA", dataIndx: "hra", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "LTA", dataIndx: "lta", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "Other Allowance", dataIndx: "other_allowance", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "Gross Wages", dataIndx: "gross_wages", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "ESI", dataIndx: "esi", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "PF", dataIndx: "pf", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "PT", dataIndx: "pt", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "Total Deductions", dataIndx: "total_deductions", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" }, + { title: "Net Amount Payable", dataIndx: "net_amount_payable", width: 90, dataType: "float", summary: {type: "sum"}, format: "##,##0.00" } + ], + dataModel: { + data: data, + location: "local" + }, + groupModel: { + on: true, + dataIndx: ["month_of_wages"], + showSummary: true + } + }); + } + + initializeDatePicker() { + $("#fromDate").datepicker({ + changeMonth: true, + changeYear: true, + showButtonPanel: true, + dateFormat: 'MM yy', + onClose: function (dateText, inst) { + const month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); + const year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); + $(this).datepicker('setDate', new Date(year, month, 1)); + }, + beforeShow: function (input, inst) { + $(input).datepicker("widget").addClass("monthOnly"); + } + }); + + $("