|
3 | 3 | # Copyright 2018-2019 Onestein (<https://www.onestein.eu>) |
4 | 4 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). |
5 | 5 |
|
6 | | -import logging |
7 | 6 | import re |
8 | 7 | from collections import namedtuple |
9 | 8 | from datetime import datetime, time |
|
16 | 15 | from odoo.exceptions import UserError, ValidationError |
17 | 16 | from odoo.fields import Domain |
18 | 17 |
|
19 | | -_logger = logging.getLogger(__name__) |
20 | | - |
21 | 18 | empty_name = "/" |
22 | 19 |
|
23 | 20 |
|
@@ -841,96 +838,3 @@ def _track_subtype(self, init_values): |
841 | 838 | elif "state" in init_values and record.state == "done": |
842 | 839 | return self.env.ref("hr_timesheet_sheet.mt_timesheet_approved") |
843 | 840 | return super()._track_subtype(init_values) |
844 | | - |
845 | | - |
846 | | -class AbstractSheetLine(models.AbstractModel): |
847 | | - _name = "hr_timesheet.sheet.line.abstract" |
848 | | - _description = "Abstract Timesheet Sheet Line" |
849 | | - |
850 | | - sheet_id = fields.Many2one(comodel_name="hr_timesheet.sheet", ondelete="cascade") |
851 | | - date = fields.Date() |
852 | | - project_id = fields.Many2one(comodel_name="project.project", string="Project") |
853 | | - task_id = fields.Many2one(comodel_name="project.task", string="Task") |
854 | | - unit_amount = fields.Float(string="Quantity", default=0.0) |
855 | | - company_id = fields.Many2one(comodel_name="res.company", string="Company") |
856 | | - employee_id = fields.Many2one(comodel_name="hr.employee", string="Employee") |
857 | | - |
858 | | - def get_unique_id(self): |
859 | | - """Hook for extensions""" |
860 | | - self.ensure_one() |
861 | | - return {"project_id": self.project_id, "task_id": self.task_id} |
862 | | - |
863 | | - |
864 | | -class SheetLine(models.TransientModel): |
865 | | - _name = "hr_timesheet.sheet.line" |
866 | | - _inherit = "hr_timesheet.sheet.line.abstract" |
867 | | - _description = "Timesheet Sheet Line" |
868 | | - |
869 | | - value_x = fields.Char(string="Date Name") |
870 | | - value_y = fields.Char(string="Project Name") |
871 | | - new_line_id = fields.Integer(default=0) |
872 | | - |
873 | | - @api.onchange("unit_amount") |
874 | | - def onchange_unit_amount(self): |
875 | | - """This method is called when filling a cell of the matrix.""" |
876 | | - self.ensure_one() |
877 | | - sheet = self._get_sheet() |
878 | | - if not sheet: |
879 | | - return { |
880 | | - "warning": { |
881 | | - "title": self.env._("Warning"), |
882 | | - "message": self.env._("Save the Timesheet Sheet first."), |
883 | | - } |
884 | | - } |
885 | | - sheet.add_new_line(self) |
886 | | - |
887 | | - @api.model |
888 | | - def _get_sheet(self): |
889 | | - sheet = (self._origin or self).sheet_id |
890 | | - if not sheet: |
891 | | - model = self.env.context.get("params", {}).get("model", "") |
892 | | - obj_id = self.env.context.get("params", {}).get("id") |
893 | | - if model == "hr_timesheet.sheet" and isinstance(obj_id, int): |
894 | | - sheet = self.env["hr_timesheet.sheet"].browse(obj_id) |
895 | | - return sheet |
896 | | - |
897 | | - |
898 | | -class SheetNewAnalyticLine(models.TransientModel): |
899 | | - _name = "hr_timesheet.sheet.new.analytic.line" |
900 | | - _inherit = "hr_timesheet.sheet.line.abstract" |
901 | | - _description = "Timesheet Sheet New Analytic Line" |
902 | | - |
903 | | - @api.model |
904 | | - def _is_similar_analytic_line(self, aal): |
905 | | - """Hook for extensions""" |
906 | | - return ( |
907 | | - aal.date == self.date |
908 | | - and aal.project_id.id == self.project_id.id |
909 | | - and aal.task_id.id == self.task_id.id |
910 | | - ) |
911 | | - |
912 | | - @api.model |
913 | | - def _update_analytic_lines(self): |
914 | | - sheet = self.sheet_id |
915 | | - timesheets = sheet.timesheet_ids.filtered( |
916 | | - lambda aal: self._is_similar_analytic_line(aal) |
917 | | - ) |
918 | | - new_ts = timesheets.filtered(lambda t: t.name == empty_name) |
919 | | - amount = sum(t.unit_amount for t in timesheets) |
920 | | - diff_amount = self.unit_amount - amount |
921 | | - if len(new_ts) > 1: |
922 | | - new_ts = new_ts.merge_timesheets() |
923 | | - sheet._sheet_write("timesheet_ids", sheet.timesheet_ids.exists()) |
924 | | - if not diff_amount: |
925 | | - return |
926 | | - if new_ts: |
927 | | - unit_amount = new_ts.unit_amount + diff_amount |
928 | | - if unit_amount: |
929 | | - new_ts.write({"unit_amount": unit_amount}) |
930 | | - else: |
931 | | - new_ts.unlink() |
932 | | - sheet._sheet_write("timesheet_ids", sheet.timesheet_ids.exists()) |
933 | | - else: |
934 | | - new_ts_values = sheet._prepare_new_line(self) |
935 | | - new_ts_values.update({"name": empty_name, "unit_amount": diff_amount}) |
936 | | - self.env["account.analytic.line"]._sheet_create(new_ts_values) |
0 commit comments