|
1 | 1 | # Copyright 2016-2018 Ildar Nasyrov <https://it-projects.info/team/iledarn> |
2 | | -# Copyright 2016-2020 Ivan Yelizariev <https://it-projects.info/team/yelizariev> |
| 2 | +# Copyright 2016-2018,2020 Ivan Yelizariev <https://it-projects.info/team/yelizariev> |
3 | 3 | # Copyright 2020 Eugene Molotov <https://it-projects.info/team/em230418> |
4 | 4 | # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). |
5 | 5 |
|
@@ -39,69 +39,36 @@ def _filter_protected_attachments(self): |
39 | 39 |
|
40 | 40 | @api.model_create_multi |
41 | 41 | def create(self, vals_list): |
42 | | - record_tuple_set = set() |
| 42 | + url_fields = self.env.context.get("ir_attachment_url_fields") |
| 43 | + if url_fields: |
| 44 | + url_fields = url_fields.split(",") |
| 45 | + self._set_where_to_store(vals_list) |
43 | 46 | for values in vals_list: |
44 | | - # --- |
45 | | - # em230418: handling ir_attachment_url_fields context |
46 | 47 | if ( |
47 | | - self.env.context.get("ir_attachment_url_fields") |
| 48 | + url_fields |
48 | 49 | and values.get("type") != "url" |
49 | 50 | and not values.get("url") |
50 | 51 | and values.get("res_model") |
51 | 52 | and values.get("res_field") |
52 | 53 | and values.get("datas") |
53 | 54 | ): |
54 | 55 | full_field_name = values["res_model"] + "." + values["res_field"] |
55 | | - if full_field_name in self.env.context.get( |
56 | | - "ir_attachment_url_fields" |
57 | | - ).split(","): |
| 56 | + if full_field_name in url_fields: |
58 | 57 | values["url"] = values["datas"] |
59 | 58 | values["type"] = "url" |
60 | 59 | del values["datas"] |
61 | | - # --- |
62 | | - |
63 | | - self._set_where_to_store(vals_list) |
64 | | - |
65 | | - # everything else is based on |
66 | | - # https://github.com/odoo/odoo/blob/fa852ba1c5707b71469c410063f338eef261ab2b/odoo/addons/base/models/ir_attachment.py#L506-L524 |
67 | | - |
68 | | - # remove computed field depending of datas |
69 | | - for field in ("file_size", "checksum"): |
70 | | - values.pop(field, False) |
71 | 60 | bucket = values.pop("_bucket", None) |
72 | | - values = self._check_contents(values) |
73 | | - if "datas" in values: |
74 | | - # =============== |
75 | | - # if bucket is not available, attachment is saved as usual |
| 61 | + if ( |
| 62 | + bucket |
| 63 | + and values.get("datas") |
| 64 | + and values.get("res_model") not in ["ir.ui.view", "ir.ui.menu"] |
| 65 | + ): |
| 66 | + values = self._check_contents(values) |
76 | 67 | data = values.pop("datas") |
77 | 68 | mimetype = values.pop("mimetype") |
78 | | - if ( |
79 | | - bucket |
80 | | - and values.get("res_model") not in ["ir.ui.view", "ir.ui.menu"] |
81 | | - and self._storage() != "db" |
82 | | - and data |
83 | | - ): |
84 | | - values.update( |
85 | | - self._get_datas_related_values_with_bucket( |
86 | | - bucket, data, mimetype |
87 | | - ) |
88 | | - ) |
89 | | - else: |
90 | | - values.update( |
91 | | - self._get_datas_related_values( |
92 | | - base64.b64decode(data or b""), mimetype |
93 | | - ) |
94 | | - ) |
95 | | - # end |
96 | | - # =============== |
97 | | - # 'check()' only uses res_model and res_id from values, and make an exists. |
98 | | - # We can group the values by model, res_id to make only one query when |
99 | | - # creating multiple attachments on a single record. |
100 | | - record_tuple = (values.get("res_model"), values.get("res_id")) |
101 | | - record_tuple_set.add(record_tuple) |
102 | | - for record_tuple in record_tuple_set: |
103 | | - (res_model, res_id) = record_tuple |
104 | | - self.check("create", values={"res_model": res_model, "res_id": res_id}) |
| 69 | + values.update( |
| 70 | + self._get_datas_related_values_with_bucket(bucket, data, mimetype) |
| 71 | + ) |
105 | 72 | return super(IrAttachment, self).create(vals_list) |
106 | 73 |
|
107 | 74 | def _get_datas_related_values_with_bucket( |
|
0 commit comments