otrs-somconnexio 0.7.2__py2.py3-none-any.whl → 0.8.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. otrs_somconnexio/otrs_models/fiber_dynamic_fields.py +0 -6
  2. otrs_somconnexio/otrs_models/mobile_dynamic_fields.py +0 -6
  3. otrs_somconnexio/otrs_models/provision_article.py +2 -5
  4. otrs_somconnexio/otrs_models/provision_dynamic_fields.py +6 -0
  5. otrs_somconnexio/otrs_models/provision_ticket.py +43 -10
  6. otrs_somconnexio/otrs_models/switchboard_header_data.py +4 -0
  7. otrs_somconnexio/otrs_models/switchboard_header_dynamic_fields.py +1 -1
  8. otrs_somconnexio/otrs_models/switchboard_header_ticket.py +61 -0
  9. otrs_somconnexio/otrs_models/switchboard_ticket.py +8 -0
  10. {otrs_somconnexio-0.7.2.dist-info → otrs_somconnexio-0.8.0.dist-info}/METADATA +3 -1
  11. {otrs_somconnexio-0.7.2.dist-info → otrs_somconnexio-0.8.0.dist-info}/RECORD +26 -26
  12. tests/otrs_models/test_adsl_dynamic_fields.py +1 -0
  13. tests/otrs_models/test_adsl_ticket.py +10 -9
  14. tests/otrs_models/test_fiber_dynamic_fields.py +2 -1
  15. tests/otrs_models/test_fiber_ticket.py +18 -8
  16. tests/otrs_models/test_mobile_ticket.py +14 -4
  17. tests/otrs_models/test_provision_article.py +9 -26
  18. tests/otrs_models/test_router_4G_dynamic_fields.py +17 -0
  19. tests/otrs_models/test_router_4G_ticket.py +19 -10
  20. tests/otrs_models/test_switchboard_dynamic_fields.py +8 -1
  21. tests/otrs_models/test_switchboard_header_data.py +2 -0
  22. tests/otrs_models/test_switchboard_header_dynamic_fields.py +1 -1
  23. tests/otrs_models/test_switchboard_header_ticket.py +85 -9
  24. tests/otrs_models/test_switchboard_ticket.py +36 -24
  25. {otrs_somconnexio-0.7.2.dist-info → otrs_somconnexio-0.8.0.dist-info}/WHEEL +0 -0
  26. {otrs_somconnexio-0.7.2.dist-info → otrs_somconnexio-0.8.0.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,6 @@ class FiberDynamicFields(InternetDynamicFields):
11
11
  return [
12
12
  self._df_previous_contract_pon(),
13
13
  self._df_previous_contract_fiber_speed(),
14
- self._activation_notes(),
15
14
  self._df_mobile_pack_contracts(),
16
15
  self._df_all_grouped_SIMS_recieved(),
17
16
  self._df_has_previous_owner_with_mobile_pack_contracts(),
@@ -19,11 +18,6 @@ class FiberDynamicFields(InternetDynamicFields):
19
18
  self._keep_landline_number(),
20
19
  ]
21
20
 
22
- def _activation_notes(self):
23
- return DynamicField(
24
- name="consideracionsActivacio2", value=self.service_data.activation_notes
25
- )
26
-
27
21
  def _df_previous_contract_pon(self):
28
22
  return DynamicField(
29
23
  name="ponAntic", value=self.service_data.previous_contract_pon
@@ -19,7 +19,6 @@ class MobileDynamicFields(ProvisionDynamicFields):
19
19
  self._sim_received(),
20
20
  self._sim_delivery_tracking_code(),
21
21
  self._send_sim_type(),
22
- self._activation_notes(),
23
22
  self._delivery_street(),
24
23
  self._delivery_zip_code(),
25
24
  self._delivery_city(),
@@ -54,11 +53,6 @@ class MobileDynamicFields(ProvisionDynamicFields):
54
53
  name="dniTitularAnterior", value=self.service_data.previous_owner_vat
55
54
  )
56
55
 
57
- def _activation_notes(self):
58
- return DynamicField(
59
- name="consideracionsActivacio", value=self.service_data.activation_notes
60
- )
61
-
62
56
  def _sim_received(self):
63
57
  sim_recieved = "1" if self.service_data.has_sim else "0"
64
58
  return DynamicField("SIMrebuda", sim_recieved)
@@ -1,12 +1,9 @@
1
1
  # coding: utf-8
2
2
  from otrs_somconnexio.otrs_models.abstract_article import AbstractArticle
3
- from otrs_somconnexio.services.get_ticket_title import GetTicketTitle
4
3
 
5
4
 
6
5
  class ProvisionArticle(AbstractArticle):
7
- def __init__(self, technology, order_id, service_type, notes=""):
8
- subject = GetTicketTitle(technology, order_id, service_type).build()
6
+ def __init__(self, subject, notes=""):
9
7
  self.subject = subject
10
- if notes:
11
- self.isVisibleForCustomer = "0"
8
+ self.isVisibleForCustomer = "0" if notes else "1"
12
9
  self.body = notes
@@ -32,6 +32,7 @@ class ProvisionDynamicFields:
32
32
  self._order_id(),
33
33
  self._confirmed_documentation(),
34
34
  self._notes(),
35
+ self._activation_notes(),
35
36
  ]
36
37
  dynamic_fields += self._build_specific_dynamic_fields()
37
38
 
@@ -122,3 +123,8 @@ class ProvisionDynamicFields:
122
123
  return DynamicField(
123
124
  name="consideracionsGenerals", value=self.service_data.notes
124
125
  )
126
+
127
+ def _activation_notes(self):
128
+ return DynamicField(
129
+ name="consideracionsActivacio", value=self.service_data.activation_notes
130
+ )
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
- from pyotrs.lib import Ticket
3
-
2
+ import base64
3
+ from pyotrs.lib import Attachment, Ticket
4
4
  from otrs_somconnexio.client import OTRSClient
5
5
  from otrs_somconnexio.otrs_models.provision_article import ProvisionArticle
6
6
  from otrs_somconnexio.services.get_ticket_title import GetTicketTitle
@@ -11,8 +11,12 @@ class ProvisionTicket:
11
11
  self.responsible_data = responsible_data
12
12
 
13
13
  def create(self):
14
+ new_ticket = self._build_ticket()
14
15
  self.otrs_ticket = OTRSClient().create_otrs_process_ticket(
15
- self._build_ticket(), self._build_article(), self._build_dynamic_fields()
16
+ new_ticket,
17
+ article=self._build_article(),
18
+ dynamic_fields=self._build_dynamic_fields(),
19
+ attachments=self._build_attachments(),
16
20
  )
17
21
 
18
22
  @property
@@ -24,11 +28,7 @@ class ProvisionTicket:
24
28
  return self.otrs_ticket.number
25
29
 
26
30
  def _build_ticket(self):
27
- title = GetTicketTitle(
28
- self.service_data.technology,
29
- self.service_data.order_id,
30
- self.service_type(),
31
- ).build()
31
+ title = self._ticket_title()
32
32
  return Ticket(
33
33
  {
34
34
  "Title": title,
@@ -44,13 +44,40 @@ class ProvisionTicket:
44
44
  }
45
45
  )
46
46
 
47
+ def _get_article_subject(self):
48
+ return self._ticket_title()
49
+
50
+ def _get_article_notes(self):
51
+ return self.service_data.notes
52
+
47
53
  def _build_article(self):
48
54
  provision_article = ProvisionArticle(
55
+ self._get_article_subject(),
56
+ self._get_article_notes(),
57
+ )
58
+ return provision_article.call()
59
+
60
+ def _ticket_title(self):
61
+ return GetTicketTitle(
49
62
  self.service_data.technology,
50
63
  self.service_data.order_id,
51
64
  self.service_type(),
52
- )
53
- return provision_article.call()
65
+ ).build()
66
+
67
+ def _build_attachments(self):
68
+ docs = self._files_to_attach()
69
+ if not docs:
70
+ return []
71
+ return [
72
+ Attachment.create_basic(
73
+ Content=base64.b64encode(bytes(doc["Content"], "utf-8")).decode(
74
+ "utf-8"
75
+ ),
76
+ Filename=doc["Filename"],
77
+ ContentType=doc.get("ContentType", "text/plain"),
78
+ )
79
+ for doc in docs
80
+ ]
54
81
 
55
82
  def _ticket_type(self):
56
83
  return self.otrs_configuration.type
@@ -90,3 +117,9 @@ class ProvisionTicket:
90
117
  return self.responsible_data.email
91
118
  else:
92
119
  return False
120
+
121
+ def _files_to_attach(self):
122
+ """Override to attach files to the ticket.
123
+ Format: [{"Filename": "file.txt", "Content": "file content", "ContentType": "text/plain"}, ...]
124
+ """
125
+ return []
@@ -8,6 +8,8 @@ class SwitchboardHeaderData:
8
8
  contact_phone,
9
9
  sales_team,
10
10
  technology,
11
+ lead_line_data,
12
+ agent_data,
11
13
  notes="",
12
14
  ):
13
15
  self.order_id = order_id
@@ -15,4 +17,6 @@ class SwitchboardHeaderData:
15
17
  self.contact_phone = contact_phone
16
18
  self.sales_team = sales_team
17
19
  self.technology = technology
20
+ self.lead_line_data = lead_line_data
21
+ self.agent_data = agent_data
18
22
  self.notes = notes
@@ -76,5 +76,5 @@ class SwitchboardHeaderDynamicFields:
76
76
 
77
77
  def _notes(self):
78
78
  return DynamicField(
79
- name="consideracionsActivacio3", value=self.service_data.notes
79
+ name="consideracionsActivacio", value=self.service_data.notes
80
80
  )
@@ -1,4 +1,6 @@
1
1
  # coding: utf-8
2
+ from tabulate import tabulate
3
+ from itertools import groupby
2
4
  from otrs_somconnexio.otrs_models.provision_ticket import ProvisionTicket
3
5
  from otrs_somconnexio.otrs_models.switchboard_header_dynamic_fields import (
4
6
  SwitchboardHeaderDynamicFields,
@@ -25,3 +27,62 @@ class SwitchboardHeaderTicket(ProvisionTicket):
25
27
  self._ticket_process_id(),
26
28
  self._ticket_activity_id(),
27
29
  ).all()
30
+
31
+ def _ticket_title(self):
32
+ return "Provisió centraleta virtual (CV) → Capçalera"
33
+
34
+ def _files_to_attach(self):
35
+ formatted_agent_data = self._format_agent_data()
36
+
37
+ attachments = []
38
+
39
+ if formatted_agent_data:
40
+ attachments.append(
41
+ {
42
+ "Filename": "importació_agents_operator_{}.txt".format(
43
+ self.service_data.order_id
44
+ ),
45
+ "Content": formatted_agent_data,
46
+ }
47
+ )
48
+
49
+ return attachments
50
+
51
+ def _get_article_notes(self):
52
+ return self._format_lead_line_data()
53
+
54
+ def _format_lead_line_data(self):
55
+ """Format lead line data for tsv table attachment."""
56
+ lead_line_data = self.service_data.lead_line_data
57
+ if not lead_line_data:
58
+ return ""
59
+
60
+ lead_table_data = list(zip(*lead_line_data.values()))
61
+ headers = lead_line_data.keys()
62
+ lead_lines_table = tabulate(lead_table_data, headers, tablefmt="csv")
63
+
64
+ return lead_lines_table
65
+
66
+ def _format_agent_data(self):
67
+ """Format agent data for operator import attachment.
68
+ Sorted by product, grouped by product.
69
+ """
70
+ agent_data = self.service_data.agent_data
71
+ if not agent_data:
72
+ return ""
73
+
74
+ sorted_agents = sorted(agent_data, key=lambda d: d["product"])
75
+
76
+ pin = "2424"
77
+ agents_info = []
78
+ for product, agents in groupby(sorted_agents, key=lambda ag: ag["product"]):
79
+ agents_info.append(f"{product}:")
80
+
81
+ for agent in agents:
82
+ agents_info.append(
83
+ f"{agent['extension']}\t{agent['agent_name']}\t{pin}\t{agent['agent_name']}\t{agent['agent_email']}" # noqa E501
84
+ )
85
+
86
+ agents_info.append("")
87
+
88
+ return "\n".join(agents_info)
@@ -25,3 +25,11 @@ class SwitchboardTicket(ProvisionTicket):
25
25
  self._ticket_process_id(),
26
26
  self._ticket_activity_id(),
27
27
  ).all()
28
+
29
+ def _ticket_title(self):
30
+ if self.service_data.landline:
31
+ return "Alta número de fix (CV)"
32
+ elif self.service_data.mobile_phone_number:
33
+ return "Alta mòbil agent (CV)"
34
+ else:
35
+ return "Provisió centraleta virtual (CV)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: otrs-somconnexio
3
- Version: 0.7.2
3
+ Version: 0.8.0
4
4
  Summary: Python package for Somconnexio data syncing in OTRS
5
5
  Home-page: https://gitlab.com/coopdevs/otrs_somconnexio
6
6
  Author: Coopdevs
@@ -14,6 +14,8 @@ Classifier: Programming Language :: Python :: 2.7
14
14
  Description-Content-Type: text/markdown
15
15
  Requires-Dist: pyotrs==0.12.7
16
16
  Requires-Dist: future==0.18.2
17
+ Requires-Dist: tabulate==0.9.0
18
+ Requires-Dist: more-itertools==10.0.0
17
19
 
18
20
  # Python 2.7/3.8 module to manage the SomConnexio's ERP integration with OTRS
19
21
 
@@ -11,17 +11,17 @@ otrs_somconnexio/otrs_models/coverage_ticket.py,sha256=np7dzWjpqZEdB8n6wpN4qOiOG
11
11
  otrs_somconnexio/otrs_models/customer_data.py,sha256=nWTot_N78UIdZ3D7BQ2LomRF65xWL_OakpdrYLq1V4I,563
12
12
  otrs_somconnexio/otrs_models/customer_user.py,sha256=9LRUxWQS4gxoBoyFwU_wLb9zXiTEbd0V6yU4F051KI8,913
13
13
  otrs_somconnexio/otrs_models/fiber_data.py,sha256=b8OVbAPBBUUzcQQP5HXRjzm7fvdqlM8keNlGsAF6t9c,576
14
- otrs_somconnexio/otrs_models/fiber_dynamic_fields.py,sha256=nJzi-vjWhRyWsvH85KxzQ8FjOHkRJFsikkpDLLXZHjA,2559
14
+ otrs_somconnexio/otrs_models/fiber_dynamic_fields.py,sha256=lkF6FP2JEDHo1kr2fb1uia1WPP0UpltYRzdSCpYODWA,2362
15
15
  otrs_somconnexio/otrs_models/fiber_ticket.py,sha256=dCJBaJqDQWQk3XBvqGSWnpMdgOiyu64dh3xFCOOh7C0,938
16
16
  otrs_somconnexio/otrs_models/internet_data.py,sha256=BUBZIxSMnccO6RE7Tvf6DtMEMQ1RVX2cYqC_K2BJYtQ,2746
17
17
  otrs_somconnexio/otrs_models/internet_dynamic_fields.py,sha256=rsYuGQ8dEyBAqIgyqNVA-76WgCb0y67c3e-Kx9F6MsQ,5018
18
18
  otrs_somconnexio/otrs_models/mobile_data.py,sha256=Zl5AlbrtfxT4i6z83sAth_dZcOn0yXFm1AeBMFkG48o,1931
19
- otrs_somconnexio/otrs_models/mobile_dynamic_fields.py,sha256=qvwWgHRwaktoVF0KP_dfBgRG2n2TKWORIlrW-MWEc-o,3759
19
+ otrs_somconnexio/otrs_models/mobile_dynamic_fields.py,sha256=cDTG310YUxtOlw8hjKTRrhOiZmC3I1nEvBncaHMhb3Q,3563
20
20
  otrs_somconnexio/otrs_models/mobile_ticket.py,sha256=aNtGteRzD-dOtPqqs3KoqggZaeLy_Za1KEBM5aHGCYI,1336
21
21
  otrs_somconnexio/otrs_models/providers.py,sha256=Jy5lm_gCuwy_BhpNE5JJ5-TrE8aFQpZvMiYZ-PTlgqs,181
22
- otrs_somconnexio/otrs_models/provision_article.py,sha256=jONH4lHzjg2jyx_mxjghw503oUT9VI9QwZrJ25HdOS0,469
23
- otrs_somconnexio/otrs_models/provision_dynamic_fields.py,sha256=gXlshwEl-bXzXGQFlJFZB9BIRKDxP8n479hi9ISusec,4151
24
- otrs_somconnexio/otrs_models/provision_ticket.py,sha256=hruT5PCiNZUM1SyxlTRTWzc6b2DpXkHJfws61R_CyFw,2735
22
+ otrs_somconnexio/otrs_models/provision_article.py,sha256=Zs7V9Y8Tag7B8Y_BnEWjIetMO3cSyu397TrItX1jxNI,291
23
+ otrs_somconnexio/otrs_models/provision_dynamic_fields.py,sha256=LdYbmj2RSiGpKzFt4Ws9gUrZdRWec9jVC0lsy2BK7j0,4347
24
+ otrs_somconnexio/otrs_models/provision_ticket.py,sha256=6Nz11-sG_0YARNqaxbJ0XQsZsXsw7XH3L_ENGIo-hFg,3746
25
25
  otrs_somconnexio/otrs_models/responsible_data.py,sha256=KCXkCNe_NLRpVLzeK8iNlbuH-tYag4YOL-MqnCFXn0g,104
26
26
  otrs_somconnexio/otrs_models/router_4G_data.py,sha256=EQIVxVstFswmEcOHzzV1ZyDYaadiU7lbunb5CJg6xAM,194
27
27
  otrs_somconnexio/otrs_models/router_4G_dynamic_fields.py,sha256=NVrfwD2Mj1TTzOC8NYna1XQYXEN6ffAfovlP9VAIHh4,403
@@ -29,10 +29,10 @@ otrs_somconnexio/otrs_models/router_4G_ticket.py,sha256=Z02DL-hgnqB_imVIB0nxZCU_
29
29
  otrs_somconnexio/otrs_models/service.py,sha256=EwxTSe6hPS33KbbPGNYzofhEhB4O4d71P9KkpOEjakA,2121
30
30
  otrs_somconnexio/otrs_models/switchboard_data.py,sha256=TQLv8Kfcz9TXJZY2yXUKD2nm1QVaMZyysYMttumH44k,1743
31
31
  otrs_somconnexio/otrs_models/switchboard_dynamic_fields.py,sha256=K1cRkn7WCxXCsvWLIblSCr30vTtynyCkDA_PVupnLDo,3149
32
- otrs_somconnexio/otrs_models/switchboard_header_data.py,sha256=8LwfLlcTAY9c9iJNOX2n8foOVuUGt7WyLA2XMpy5VuA,427
33
- otrs_somconnexio/otrs_models/switchboard_header_dynamic_fields.py,sha256=WsVBchlqlxNf8CHSpxwpmxP-PRSSyZ2DGDN1G8XzwuE,2499
34
- otrs_somconnexio/otrs_models/switchboard_header_ticket.py,sha256=nI0icSuhOPYEEI7gn0YEYJJT6H1TfCnl1W3gm3MCDww,982
35
- otrs_somconnexio/otrs_models/switchboard_ticket.py,sha256=O5xONkHBiRHIi6OYNHCl00-AXxRNl3hT1pmDqGoJsgg,944
32
+ otrs_somconnexio/otrs_models/switchboard_header_data.py,sha256=Q3upfUY-alMO26b4D2uKKo531PibcZsVCCCLc35DNjQ,553
33
+ otrs_somconnexio/otrs_models/switchboard_header_dynamic_fields.py,sha256=ODX1fa_KV6Rp_Jvnv_HMvE79VmfxX7Gs-GflMo3__54,2498
34
+ otrs_somconnexio/otrs_models/switchboard_header_ticket.py,sha256=b9YwV17Kgc_gaslCIzzpSN7RZTWVr3IMBlH62WZ1WmI,2909
35
+ otrs_somconnexio/otrs_models/switchboard_ticket.py,sha256=h1PtSnLLGlTWbE091qm2vXjia989JkpBnY0yzvn9OxA,1224
36
36
  otrs_somconnexio/otrs_models/telecom_company.py,sha256=yh8wIE7-AjWESdFsE479WWZ-3uFz_ljUBKF8GK44oow,3077
37
37
  otrs_somconnexio/otrs_models/ticket_factory.py,sha256=QL2u-51EuXy1aJWZxUZMo4JisDoKBAQM83GViXJAPx8,2215
38
38
  otrs_somconnexio/otrs_models/vf_provisioning_article.py,sha256=AZbtXePA-FA3ufHJsngaXzUL4npJgUqMqvrMSUmCd9o,599
@@ -122,29 +122,29 @@ tests/otrs_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
122
122
  tests/otrs_models/common_helper.py,sha256=WAd7aenHTfHvxjZMlwFfr32ajaF285Y75eifMjrAQeA,251
123
123
  tests/otrs_models/test_abstract_article.py,sha256=udzIihoP0h8Ien20JFz1jLm5Sv2b3wO6f2JZK6zRTKQ,861
124
124
  tests/otrs_models/test_adsl_data.py,sha256=_NGpe5mStNyKPhZ5xFVS62jMdMr5vkzp9SusHmFh4r4,1484
125
- tests/otrs_models/test_adsl_dynamic_fields.py,sha256=MI6ggXsm4nWQnCVfiIoAVdPJu0HjTbexg4sVA5gMJLo,19910
126
- tests/otrs_models/test_adsl_ticket.py,sha256=lw1BvezIPMJ0oMFgtqljdhdZlGTOkUIYS4Q740vJirM,4518
125
+ tests/otrs_models/test_adsl_dynamic_fields.py,sha256=KfR8RO2EoJC6YRauSBf1ktrS2cgLindyLOu3KTkI_W8,19946
126
+ tests/otrs_models/test_adsl_ticket.py,sha256=iebdC-HDzSZEj-m_hbEsyfjkhhNeHT6FrnET9iDswJc,4587
127
127
  tests/otrs_models/test_coverage_article.py,sha256=O_wm0l75m6sBWEcMdLOvBWDNSVXJ89IkL4IijIgiuPk,1519
128
128
  tests/otrs_models/test_coverage_ticket.py,sha256=0W4f28BMhtZDvPm71d7YPJuiVi9jUI6WJBbjh3xs0mg,1019
129
129
  tests/otrs_models/test_customer_user.py,sha256=9TDojrOsQBqd4kdC8SxvG5Ub18AXkJ_tsYuUeHALZnc,2227
130
130
  tests/otrs_models/test_fiber_data.py,sha256=rdFbcqzI49PV2m30vqnBOmZr2rn_MBqC0bJd0K0dcbI,1833
131
- tests/otrs_models/test_fiber_dynamic_fields.py,sha256=Rc8qUu_nTiV5Cfm7DxYn4ezO_2SRqQkGT7t6qRXARv4,27097
132
- tests/otrs_models/test_fiber_ticket.py,sha256=9CeW1x2lZRIF40sD6iPqTGtMlvnKMRvD_uPJx9c5KgU,6361
131
+ tests/otrs_models/test_fiber_dynamic_fields.py,sha256=taaR8fU8Gh0RppxfKrltDQDz4YnHaBvOOz5_qXhyWoc,27127
132
+ tests/otrs_models/test_fiber_ticket.py,sha256=DgbNN5oPJgMp-0o-QebzkZUOdWV4TcmFSd4t3umwxfk,6689
133
133
  tests/otrs_models/test_mobile_data.py,sha256=EBtwJL9kUaThhnKuqpUk6GFv0KS7RhyCF6dJNgr1-m8,1110
134
134
  tests/otrs_models/test_mobile_dynamic_fields.py,sha256=Xi8lj7PCJunwij-VQxqPYnafY2inEqeqQmQfSRFAmOM,19861
135
135
  tests/otrs_models/test_mobile_paused_ticket.py,sha256=T7Gyy7hoG994KHXkTWbJVQC_sC1sgZl4C1_sgpx3hwk,1418
136
- tests/otrs_models/test_mobile_ticket.py,sha256=hFWKdqUpfFOTKAitx9cUPdoIEQu_Hy_tAVOGMuQkgCc,4859
137
- tests/otrs_models/test_provision_article.py,sha256=SwTA96si0tundnu6lGCJGQcaOpnkRnKUYRKO9NcsflI,1773
136
+ tests/otrs_models/test_mobile_ticket.py,sha256=y6gqz7YY-Uo-p5xx5_TNA_-g-MJENpO2OvLofLTm6PA,5167
137
+ tests/otrs_models/test_provision_article.py,sha256=7M6fgw_CCV4ZydDapbnoCQYE0LrPyHlpqeBysp7aMYk,1188
138
138
  tests/otrs_models/test_router_4G_data.py,sha256=3zKZzWd21j8q4oXFG-Pl1Ugtkp4J0_RZx8HtHRzpfKM,1443
139
- tests/otrs_models/test_router_4G_dynamic_fields.py,sha256=hwQS4SxPX4OQfIxPMNEvWxJrUirxj3cIaxBsOxLjvqw,21007
140
- tests/otrs_models/test_router_4G_ticket.py,sha256=QdMHFOhjxsCa-cxwRIIZMOzPABa6dFTrp4nLdpQXfSk,4799
139
+ tests/otrs_models/test_router_4G_dynamic_fields.py,sha256=hjUgmZHmAa5MFpaqtcRVbvaIeTZH5Xzmw6U6xbTSZxM,21577
140
+ tests/otrs_models/test_router_4G_ticket.py,sha256=v5PRz3z9dK12_hmYtM7FAS3X681h7BdLumg4ag9x65I,5140
141
141
  tests/otrs_models/test_service.py,sha256=fLFyJ5wE8jszrD9sZlSOebjioR8dv8z2SeGZVcA3r5U,6833
142
142
  tests/otrs_models/test_switchboard_data.py,sha256=QlO_vupDFeavLFH1EIXVzRf4qIJ5AtuyvgCg_v4sXTE,1233
143
- tests/otrs_models/test_switchboard_dynamic_fields.py,sha256=E8vysY5tnHAwZRHjzdi_oz7p495pFDFnmJXizVKTXlc,5903
144
- tests/otrs_models/test_switchboard_header_data.py,sha256=kXkicBHpIaBgVSDDhEIqVgDEu1rpQG0TQLUGL0Jr_3s,534
145
- tests/otrs_models/test_switchboard_header_dynamic_fields.py,sha256=2xaVzEC9-6NZ9ZMIAOf1GPpfWRw8BG1sn7ZEo86NxuM,3558
146
- tests/otrs_models/test_switchboard_header_ticket.py,sha256=j2Wu-02LNgkEBpGoq1IP9sRtGlNkTlIsujZL5h1X7wU,4568
147
- tests/otrs_models/test_switchboard_ticket.py,sha256=Fwk78xENfMXmkK5x_L8JWLGxh5I64q8BWjX2iT45sTI,4890
143
+ tests/otrs_models/test_switchboard_dynamic_fields.py,sha256=JPPz5j0ArtS_RYaGQqkI7h7SupI6Vj7FfcpxnzLPYN0,6138
144
+ tests/otrs_models/test_switchboard_header_data.py,sha256=k9ZZ3fnEIIrbca0572PaGLrWm6snjr94grICot3rLcs,592
145
+ tests/otrs_models/test_switchboard_header_dynamic_fields.py,sha256=8jCN7AF3ciUHDU5olA9axJHrSvA8xrWaqtJ8cvPqXsk,3557
146
+ tests/otrs_models/test_switchboard_header_ticket.py,sha256=kxFXrjhBsYWHxAjlAJXXhIwslZ_JbDsStXN_YCu_NEs,7415
147
+ tests/otrs_models/test_switchboard_ticket.py,sha256=dQYHIyNEM_MPAzNsTljh-4qFaxyvy6HVYoHTMhnqJ64,5471
148
148
  tests/otrs_models/test_telecom_company.py,sha256=nC4uBleU2Lr3qHr5VDo-6kbcTVwKgguC85TcbhTOn1c,1450
149
149
  tests/otrs_models/test_ticket_factory.py,sha256=nvye2LK3vfYv3xRNqsBO9M0zYWRWAPWjEFgdDpY1whQ,4048
150
150
  tests/otrs_models/test_vf_provisioning_article.py,sha256=Yj8vtaowhxP12K_-FMcJNW-5re3yyCCfGLRHCPYgrVA,897
@@ -196,7 +196,7 @@ tests/services/test_update_ticket_with_provider_info.py,sha256=cZUg-hNV4BoMwafbp
196
196
  tests/user_management_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
197
197
  tests/user_management_client/test_client.py,sha256=088q9H1yf8Hii7zUF17KULqOO-JCxJLsR7vQ8lGHiqg,4410
198
198
  tests/user_management_client/test_user_management_response.py,sha256=HCCG7i2f6-ytrRpTzYZHODKCdW-X5GJn-BMVegd5FXg,1539
199
- otrs_somconnexio-0.7.2.dist-info/METADATA,sha256=oaqa6am51HTsAPuTTMc1-SxxRH_dVyDOUKhpi7ZJmpw,3458
200
- otrs_somconnexio-0.7.2.dist-info/WHEEL,sha256=fS9sRbCBHs7VFcwJLnLXN1MZRR0_TVTxvXKzOnaSFs8,110
201
- otrs_somconnexio-0.7.2.dist-info/top_level.txt,sha256=gvMaHGNwusWpSIy-PVyb0CKDIA4-4fXmEVER_2a-OnE,23
202
- otrs_somconnexio-0.7.2.dist-info/RECORD,,
199
+ otrs_somconnexio-0.8.0.dist-info/METADATA,sha256=8kmIb1rsU7THFSbI9ltja8v7HPAS9J7PLIgfQdCLpw0,3527
200
+ otrs_somconnexio-0.8.0.dist-info/WHEEL,sha256=fS9sRbCBHs7VFcwJLnLXN1MZRR0_TVTxvXKzOnaSFs8,110
201
+ otrs_somconnexio-0.8.0.dist-info/top_level.txt,sha256=gvMaHGNwusWpSIy-PVyb0CKDIA4-4fXmEVER_2a-OnE,23
202
+ otrs_somconnexio-0.8.0.dist-info/RECORD,,
@@ -41,6 +41,7 @@ class ADSLDynamicFieldsTestCase(unittest.TestCase):
41
41
  "previous_contract_address",
42
42
  "previous_contract_phone",
43
43
  "notes",
44
+ "activation_notes",
44
45
  "adsl_coverage",
45
46
  "mm_fiber_coverage",
46
47
  "asociatel_fiber_coverage",
@@ -9,11 +9,10 @@ from otrs_somconnexio.otrs_models.configurations.provision.adsl_ticket import (
9
9
 
10
10
 
11
11
  class ADSLTicketTestCase(unittest.TestCase):
12
-
13
12
  @patch("otrs_somconnexio.otrs_models.provision_ticket.Ticket")
14
13
  def test_build_ticket(self, MockTicket):
15
14
  customer_data = Mock(spec=["id"])
16
- service_data = Mock(spec=["order_id", "technology"])
15
+ service_data = Mock(spec=["order_id", "technology", "notes"])
17
16
  expected_ticket_arguments = {
18
17
  "Title": "Ticket#{} - Només ADSL".format(service_data.order_id),
19
18
  "Type": ADSLTicketConfiguration.type,
@@ -31,18 +30,19 @@ class ADSLTicketTestCase(unittest.TestCase):
31
30
  MockTicket.assert_called_with(expected_ticket_arguments)
32
31
 
33
32
  @patch("otrs_somconnexio.otrs_models.provision_ticket.ProvisionArticle")
34
- def test_build_article(self, MockInternetArticle):
33
+ def test_build_article(self, MockProvisionArticle):
35
34
  customer_data = Mock(spec=[])
36
- service_data = Mock(spec=["order_id", "technology"])
35
+ service_data = Mock(spec=["order_id", "technology", "notes"])
37
36
 
38
- mock_mobile_article = MockInternetArticle.return_value
37
+ mock_adsl_article = MockProvisionArticle.return_value
39
38
 
40
- ADSLTicket(service_data, customer_data, None)._build_article()
39
+ ticket = ADSLTicket(service_data, customer_data, None)
40
+ ticket._build_article()
41
41
 
42
- MockInternetArticle.assert_called_with(
43
- service_data.technology, service_data.order_id, "adsl"
42
+ MockProvisionArticle.assert_called_once_with(
43
+ ticket._ticket_title(), service_data.notes
44
44
  )
45
- mock_mobile_article.call.assert_called_once()
45
+ mock_adsl_article.call.assert_called_once()
46
46
 
47
47
  @patch("otrs_somconnexio.otrs_models.adsl_ticket.ADSLDynamicFields")
48
48
  def test_build_dynamic_fields(self, MockADSLDynamicFields):
@@ -97,6 +97,7 @@ class ADSLTicketTestCase(unittest.TestCase):
97
97
  "shipment_zip",
98
98
  "shipment_subdivision",
99
99
  "notes",
100
+ "activation_notes",
100
101
  "adsl_coverage",
101
102
  "mm_fiber_coverage",
102
103
  "asociatel_fiber_coverage",
@@ -652,7 +652,8 @@ class FiberDynamicFieldsTestCase(unittest.TestCase):
652
652
 
653
653
  dynamic_fields_dct = dynamic_fields_to_dct(dynamic_fields)
654
654
  self.assertEqual(
655
- dynamic_fields_dct["consideracionsActivacio2"], "text text text"
655
+ dynamic_fields_dct["consideracionsActivacio"],
656
+ self.service_data.activation_notes,
656
657
  )
657
658
 
658
659
  def test_mobile_pack_contracts_field(self):
@@ -15,7 +15,7 @@ class FiberTicketTestCase(unittest.TestCase):
15
15
  @patch("otrs_somconnexio.otrs_models.provision_ticket.Ticket")
16
16
  def test_build_ticket(self, MockTicket):
17
17
  customer_data = Mock(spec=["id"])
18
- service_data = Mock(spec=["order_id", "technology"])
18
+ service_data = Mock(spec=["order_id", "technology", "notes"])
19
19
 
20
20
  expected_ticket_arguments = {
21
21
  "Title": "Ticket#{} - Només fibra".format(service_data.order_id),
@@ -36,7 +36,7 @@ class FiberTicketTestCase(unittest.TestCase):
36
36
  @patch("otrs_somconnexio.otrs_models.provision_ticket.Ticket")
37
37
  def test_build_ticket_mixed(self, MockTicket):
38
38
  customer_data = Mock(spec=["id"])
39
- service_data = Mock(spec=["order_id", "technology"])
39
+ service_data = Mock(spec=["order_id", "technology", "notes"])
40
40
  service_data.technology = "Mixta"
41
41
  expected_ticket_arguments = {
42
42
  "Title": "Ticket#{} - Fibra mixta".format(service_data.order_id),
@@ -55,16 +55,17 @@ class FiberTicketTestCase(unittest.TestCase):
55
55
  MockTicket.assert_called_with(expected_ticket_arguments)
56
56
 
57
57
  @patch("otrs_somconnexio.otrs_models.provision_ticket.ProvisionArticle")
58
- def test_build_article(self, MockInternetArticle):
58
+ def test_build_article(self, MockProvisionArticle):
59
59
  customer_data = Mock(spec=[])
60
- service_data = Mock(spec=["order_id", "technology"])
60
+ service_data = Mock(spec=["order_id", "technology", "notes"])
61
61
 
62
- mock_mobile_article = MockInternetArticle.return_value
62
+ mock_mobile_article = MockProvisionArticle.return_value
63
63
 
64
- FiberTicket(service_data, customer_data, self.responsible_data)._build_article()
64
+ ticket = FiberTicket(service_data, customer_data, self.responsible_data)
65
+ ticket._build_article()
65
66
 
66
- MockInternetArticle.assert_called_with(
67
- service_data.technology, service_data.order_id, "fiber"
67
+ MockProvisionArticle.assert_called_once_with(
68
+ ticket._ticket_title(), service_data.notes
68
69
  )
69
70
  mock_mobile_article.call.assert_called_once()
70
71
 
@@ -162,3 +163,12 @@ class FiberTicketTestCase(unittest.TestCase):
162
163
  self.assertEqual(
163
164
  ticket.otrs_configuration.service, "Banda Ancha::Fibra::Provisió Fibra"
164
165
  )
166
+
167
+ def test_files_to_attach_no_attachments(self):
168
+ customer_data = Mock()
169
+ service_data = Mock()
170
+
171
+ ticket = FiberTicket(service_data, customer_data, self.responsible_data)
172
+ attachments = ticket._files_to_attach()
173
+
174
+ self.assertFalse(attachments)
@@ -38,17 +38,18 @@ class MobileTicketTestCase(unittest.TestCase):
38
38
 
39
39
  @patch("otrs_somconnexio.otrs_models.provision_ticket.ProvisionArticle")
40
40
  def test_build_article(self, MockProvisionArticle):
41
- mobile_data = Mock(spec=["order_id", "technology"])
41
+ mobile_data = Mock(spec=["order_id", "technology", "notes"])
42
42
  mobile_data.order_id = 123
43
43
 
44
44
  customer_data = Mock(spec=["order_id"])
45
45
 
46
46
  mock_mobile_article = MockProvisionArticle.return_value
47
47
 
48
- MobileTicket(mobile_data, customer_data, self.responsible_data)._build_article()
48
+ ticket = MobileTicket(mobile_data, customer_data, self.responsible_data)
49
+ ticket._build_article()
49
50
 
50
- MockProvisionArticle.assert_called_with(
51
- mobile_data.technology, mobile_data.order_id, "mobile"
51
+ MockProvisionArticle.assert_called_once_with(
52
+ ticket._ticket_title(), mobile_data.notes
52
53
  )
53
54
  mock_mobile_article.call.assert_called_once()
54
55
 
@@ -138,3 +139,12 @@ class MobileTicketTestCase(unittest.TestCase):
138
139
 
139
140
  self.assertEqual(ticket.id, 123)
140
141
  self.assertEqual(ticket.number, "#123")
142
+
143
+ def test_files_to_attach_no_attachments(self):
144
+ customer_data = Mock()
145
+ service_data = Mock()
146
+
147
+ ticket = MobileTicket(service_data, customer_data, self.responsible_data)
148
+ attachments = ticket._files_to_attach()
149
+
150
+ self.assertFalse(attachments)
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
  import unittest
3
- from mock import Mock, patch
3
+ from mock import patch
4
4
 
5
5
  from otrs_somconnexio.otrs_models.provision_article import ProvisionArticle
6
6
 
@@ -8,42 +8,25 @@ from otrs_somconnexio.otrs_models.provision_article import ProvisionArticle
8
8
  class ProvisionArticleTestCase(unittest.TestCase):
9
9
  @patch("otrs_somconnexio.otrs_models.abstract_article.Article")
10
10
  def test_call_with_notes(self, MockArticle):
11
-
11
+ subject = "test subject"
12
+ notes = "test notes"
12
13
  expected_article_arguments = {
13
- "Subject": "Ticket#b - Només ADSL",
14
- "Body": "c",
14
+ "Subject": subject,
15
+ "Body": notes,
15
16
  "ContentType": "text/plain; charset=utf8",
16
17
  "IsVisibleForCustomer": "0",
17
18
  }
18
- ProvisionArticle(
19
- service_type="adsl", technology="a", order_id="b", notes="c"
20
- ).call()
19
+ ProvisionArticle(subject=subject, notes=notes).call()
21
20
  MockArticle.assert_called_once_with(expected_article_arguments)
22
21
 
23
22
  @patch("otrs_somconnexio.otrs_models.abstract_article.Article")
24
23
  def test_call_without_notes(self, MockArticle):
25
-
24
+ subject = "test subject"
26
25
  expected_article_arguments = {
27
- "Subject": "Ticket#b - Només fibra",
26
+ "Subject": subject,
28
27
  "Body": "",
29
28
  "ContentType": "text/plain; charset=utf8",
30
29
  "IsVisibleForCustomer": "1",
31
30
  }
32
- ProvisionArticle(
33
- service_type="fiber", technology="a", order_id="b", notes=""
34
- ).call()
35
- MockArticle.assert_called_once_with(expected_article_arguments)
36
-
37
- @patch("otrs_somconnexio.otrs_models.abstract_article.Article")
38
- def test_call_mixed(self, MockArticle):
39
-
40
- expected_article_arguments = {
41
- "Subject": "Ticket#b - Mòbil mixta",
42
- "Body": "c",
43
- "ContentType": "text/plain; charset=utf8",
44
- "IsVisibleForCustomer": "0",
45
- }
46
- ProvisionArticle(
47
- service_type="mobile", technology="Mixta", order_id="b", notes="c"
48
- ).call()
31
+ ProvisionArticle(subject=subject, notes="").call()
49
32
  MockArticle.assert_called_once_with(expected_article_arguments)
@@ -40,6 +40,7 @@ class Router4GDynamicFieldsTestCase(unittest.TestCase):
40
40
  "previous_owner_name",
41
41
  "previous_owner_surname",
42
42
  "notes",
43
+ "activation_notes",
43
44
  "adsl_coverage",
44
45
  "mm_fiber_coverage",
45
46
  "asociatel_fiber_coverage",
@@ -400,6 +401,22 @@ class Router4GDynamicFieldsTestCase(unittest.TestCase):
400
401
  dynamic_fields_dct = dynamic_fields_to_dct(dynamic_fields)
401
402
  self.assertEqual(dynamic_fields_dct["provinciaEnviament"], "Subdivision")
402
403
 
404
+ def test_activation_notes_field(self):
405
+ self.service_data.activation_notes = "text text text"
406
+
407
+ dynamic_fields = Router4GDynamicFields(
408
+ self.service_data,
409
+ self.customer_data,
410
+ self.router_4G_otrs_process_id,
411
+ self.router_4G_otrs_activity_id,
412
+ ).all()
413
+
414
+ dynamic_fields_dct = dynamic_fields_to_dct(dynamic_fields)
415
+ self.assertEqual(
416
+ dynamic_fields_dct["consideracionsActivacio"],
417
+ self.service_data.activation_notes,
418
+ )
419
+
403
420
  def test_owner_vat_field(self):
404
421
  self.service_data.previous_owner_vat = "12345M"
405
422
 
@@ -15,7 +15,7 @@ class Router4GTicketTestCase(unittest.TestCase):
15
15
  @patch("otrs_somconnexio.otrs_models.provision_ticket.Ticket")
16
16
  def test_build_ticket(self, MockTicket):
17
17
  customer_data = Mock(spec=["id"])
18
- service_data = Mock(spec=["order_id", "technology"])
18
+ service_data = Mock(spec=["order_id", "technology", "notes"])
19
19
 
20
20
  expected_ticket_arguments = {
21
21
  "Title": "Ticket#{} - Només 4G".format(service_data.order_id),
@@ -36,20 +36,19 @@ class Router4GTicketTestCase(unittest.TestCase):
36
36
  MockTicket.assert_called_with(expected_ticket_arguments)
37
37
 
38
38
  @patch("otrs_somconnexio.otrs_models.provision_ticket.ProvisionArticle")
39
- def test_build_article(self, MockInternetArticle):
39
+ def test_build_article(self, MockProvisionArticle):
40
40
  customer_data = Mock(spec=[])
41
- service_data = Mock(spec=["order_id", "technology"])
41
+ service_data = Mock(spec=["order_id", "technology", "notes"])
42
42
 
43
- mock_internet_article = MockInternetArticle.return_value
43
+ mock_provision_article = MockProvisionArticle.return_value
44
44
 
45
- Router4GTicket(
46
- service_data, customer_data, self.responsible_data
47
- )._build_article()
45
+ ticket = Router4GTicket(service_data, customer_data, self.responsible_data)
46
+ ticket._build_article()
48
47
 
49
- MockInternetArticle.assert_called_with(
50
- service_data.technology, service_data.order_id, "4G"
48
+ MockProvisionArticle.assert_called_once_with(
49
+ ticket._ticket_title(), service_data.notes
51
50
  )
52
- mock_internet_article.call.assert_called_once()
51
+ mock_provision_article.call.assert_called_once()
53
52
 
54
53
  @patch("otrs_somconnexio.otrs_models.router_4G_ticket.Router4GDynamicFields")
55
54
  def test_build_dynamic_fields(self, MockRouter4GDynamicFields):
@@ -106,6 +105,7 @@ class Router4GTicketTestCase(unittest.TestCase):
106
105
  "shipment_zip",
107
106
  "shipment_subdivision",
108
107
  "notes",
108
+ "activation_notes",
109
109
  "adsl_coverage",
110
110
  "mm_fiber_coverage",
111
111
  "asociatel_fiber_coverage",
@@ -132,3 +132,12 @@ class Router4GTicketTestCase(unittest.TestCase):
132
132
 
133
133
  self.assertEqual(ticket.id, 123)
134
134
  self.assertEqual(ticket.number, "#123")
135
+
136
+ def test_files_to_attach_no_attachments(self):
137
+ customer_data = Mock()
138
+ service_data = Mock()
139
+
140
+ ticket = Router4GTicket(service_data, customer_data, self.responsible_data)
141
+ attachments = ticket._files_to_attach()
142
+
143
+ self.assertFalse(attachments)
@@ -45,7 +45,8 @@ class SwitchboardDynamicFieldsTestCase(unittest.TestCase):
45
45
  shipment_subdivision=faker.state(),
46
46
  additional_products="A,B,C",
47
47
  confirmed_documentation=faker.boolean(),
48
- notes=faker.word(),
48
+ notes=faker.text(),
49
+ activation_notes=faker.text(),
49
50
  )
50
51
 
51
52
  self.switchboard_otrs_process_id = faker.uuid4()
@@ -188,3 +189,9 @@ class SwitchboardDynamicFieldsTestCase(unittest.TestCase):
188
189
  self.dynamic_fields_dct["consideracionsGenerals"],
189
190
  self.service_data.notes,
190
191
  )
192
+
193
+ def test_activation_notes_field(self):
194
+ self.assertEqual(
195
+ self.dynamic_fields_dct["consideracionsActivacio"],
196
+ self.service_data.activation_notes,
197
+ )
@@ -10,6 +10,8 @@ class SwitchboardHeaderDataTestCase(unittest.TestCase):
10
10
  order_id=123,
11
11
  contact_phone="666666661",
12
12
  email="test@test.com",
13
+ agent_data=[],
14
+ lead_line_data={},
13
15
  sales_team="residential",
14
16
  technology="switchboard",
15
17
  notes="Notes",
@@ -114,6 +114,6 @@ class SwitchboardHeaderDynamicFieldsTestCase(unittest.TestCase):
114
114
 
115
115
  def test_notes_field(self):
116
116
  self.assertEqual(
117
- self.dynamic_fields_dct["consideracionsActivacio3"],
117
+ self.dynamic_fields_dct["consideracionsActivacio"],
118
118
  self.service_data.notes,
119
119
  )
@@ -21,9 +21,7 @@ class SwitchboardHeaderTicketTestCase(unittest.TestCase):
21
21
  customer_data = Mock(spec=["id"])
22
22
 
23
23
  expected_ticket_arguments = {
24
- "Title": "Ticket#{} - Només Centraleta Virtual Capçalera".format(
25
- service_data.order_id
26
- ),
24
+ "Title": "Provisió centraleta virtual (CV) Capçalera",
27
25
  "Type": SwitchboardTicketConfiguration.type,
28
26
  "QueueID": SwitchboardTicketConfiguration.queue_id,
29
27
  "State": SwitchboardTicketConfiguration.state,
@@ -42,20 +40,21 @@ class SwitchboardHeaderTicketTestCase(unittest.TestCase):
42
40
 
43
41
  @patch("otrs_somconnexio.otrs_models.provision_ticket.ProvisionArticle")
44
42
  def test_build_article(self, MockProvisionArticle):
45
- service_data = Mock(spec=["order_id", "technology"])
43
+ service_data = Mock(spec=["order_id", "technology", "lead_line_data"])
46
44
  service_data.order_id = 123
45
+ service_data.lead_line_data = {}
47
46
  customer_data = Mock(spec=["order_id"])
48
47
 
49
48
  mock_article = MockProvisionArticle.return_value
50
49
 
51
- SwitchboardHeaderTicket(
50
+ ticket = SwitchboardHeaderTicket(
52
51
  service_data, customer_data, self.responsible_data
53
- )._build_article()
52
+ )
53
+ ticket._build_article()
54
54
 
55
55
  MockProvisionArticle.assert_called_with(
56
- service_data.technology,
57
- service_data.order_id,
58
- "switchboard_header",
56
+ ticket._ticket_title(),
57
+ ticket._format_lead_line_data(),
59
58
  )
60
59
  mock_article.call.assert_called_once()
61
60
 
@@ -92,6 +91,8 @@ class SwitchboardHeaderTicketTestCase(unittest.TestCase):
92
91
  "previous_owner_name",
93
92
  "previous_owner_surname",
94
93
  "sales_team",
94
+ "agent_data",
95
+ "lead_line_data",
95
96
  "type",
96
97
  "notes",
97
98
  ]
@@ -110,6 +111,8 @@ class SwitchboardHeaderTicketTestCase(unittest.TestCase):
110
111
  "language",
111
112
  ]
112
113
  )
114
+ service_data.agent_data = []
115
+ service_data.lead_line_data = {}
113
116
 
114
117
  mock_otrs_client = Mock(spec=["create_otrs_process_ticket"])
115
118
  mock_otrs_client.create_otrs_process_ticket.return_value = Mock(
@@ -127,3 +130,76 @@ class SwitchboardHeaderTicketTestCase(unittest.TestCase):
127
130
  mock_otrs_client.create_otrs_process_ticket.assert_called_once()
128
131
  self.assertEqual(ticket.id, 123)
129
132
  self.assertEqual(ticket.number, "#123")
133
+
134
+ def test_files_to_attach(self):
135
+ service_data = Mock(spec=["order_id", "agent_data"])
136
+ customer_data = Mock()
137
+ service_data.order_id = 123
138
+ service_data.agent_data = [
139
+ {
140
+ "product": "product1",
141
+ "extension": "ext1",
142
+ "agent_name": "agent1",
143
+ "agent_email": "agent1@test.com",
144
+ },
145
+ {
146
+ "product": "product2",
147
+ "extension": "ext2",
148
+ "agent_name": "agent2",
149
+ "agent_email": "agent2@test.com",
150
+ },
151
+ {
152
+ "product": "product3",
153
+ "extension": "ext3",
154
+ "agent_name": "agent3",
155
+ "agent_email": "agent3@test.com",
156
+ },
157
+ ]
158
+
159
+ sb_header_ticket = SwitchboardHeaderTicket(
160
+ service_data, customer_data, self.responsible_data
161
+ )
162
+ files = sb_header_ticket._files_to_attach()
163
+
164
+ self.assertEqual(len(files), 1)
165
+ agent_data_file = files[0]
166
+ self.assertEqual(
167
+ agent_data_file["Filename"],
168
+ "importació_agents_operator_{}.txt".format(service_data.order_id),
169
+ )
170
+ self.assertIn("product1:\n", agent_data_file["Content"])
171
+ self.assertIn(
172
+ "ext1\tagent1\t2424\tagent1\tagent1@test.com\n", agent_data_file["Content"]
173
+ )
174
+ self.assertIn("product2:\n", agent_data_file["Content"])
175
+ self.assertIn(
176
+ "ext2\tagent2\t2424\tagent2\tagent2@test.com\n", agent_data_file["Content"]
177
+ )
178
+ self.assertIn("product3:\n", agent_data_file["Content"])
179
+ self.assertIn(
180
+ "ext3\tagent3\t2424\tagent3\tagent3@test.com\n", agent_data_file["Content"]
181
+ )
182
+
183
+ def test_format_lead_line_data(self):
184
+ service_data = Mock(spec=["order_id", "lead_line_data"])
185
+ customer_data = Mock()
186
+ service_data.order_id = 123
187
+ service_data.lead_line_data = {
188
+ "Prod": ["product1", "product2", "product3"],
189
+ "Ext": ["ext1", "ext2", "ext3"],
190
+ "Nom": ["agent1", "agent2", "agent3"],
191
+ "Telf": ["111", "222", "333"],
192
+ "Tipus": ["tipus1", "tipus2", "tipus3"],
193
+ }
194
+
195
+ sb_header_ticket = SwitchboardHeaderTicket(
196
+ service_data, customer_data, self.responsible_data
197
+ )
198
+ lead_line_table = sb_header_ticket._format_lead_line_data()
199
+
200
+ for header in service_data.lead_line_data.keys():
201
+ self.assertIn(header, lead_line_table)
202
+ self.assertEqual(
203
+ lead_line_table.count("\n"),
204
+ len(service_data.lead_line_data["Prod"]) + 1,
205
+ ) # headers + number of rows
@@ -11,63 +11,75 @@ from otrs_somconnexio.otrs_models.configurations.provision.switchboard_ticket im
11
11
  class SwitchboardTicketTestCase(unittest.TestCase):
12
12
  def setUp(self):
13
13
  self.responsible_data = Mock(spec=["email"])
14
+ self.service_data = Mock(
15
+ spec=["order_id", "technology", "landline", "mobile_phone_number", "notes"]
16
+ )
17
+ self.service_data.order_id = 123
18
+ self.customer_data = Mock(spec=["id"])
14
19
 
15
20
  @patch("otrs_somconnexio.otrs_models.provision_ticket.Ticket")
16
21
  def test_build_ticket(self, MockTicket):
17
- service_data = Mock(spec=["order_id", "notes", "technology"])
18
- service_data.order_id = 123
19
- customer_data = Mock(spec=["id"])
22
+ self.service_data.landline = False
23
+ self.service_data.mobile_phone_number = False
20
24
 
21
25
  expected_ticket_arguments = {
22
- "Title": "Ticket#{} - Només Centraleta Virtual".format(
23
- service_data.order_id
24
- ),
26
+ "Title": "Provisió centraleta virtual (CV)",
25
27
  "Type": SwitchboardTicketConfiguration.type,
26
28
  "QueueID": SwitchboardTicketConfiguration.queue_id,
27
29
  "State": SwitchboardTicketConfiguration.state,
28
30
  "SLA": "No pendent resposta",
29
31
  "Service": "Centraleta Virtual",
30
32
  "Priority": SwitchboardTicketConfiguration.priority,
31
- "CustomerUser": customer_data.id,
32
- "CustomerID": customer_data.id,
33
+ "CustomerUser": self.customer_data.id,
34
+ "CustomerID": self.customer_data.id,
33
35
  "Responsible": self.responsible_data.email,
34
36
  }
35
37
 
36
38
  SwitchboardTicket(
37
- service_data, customer_data, self.responsible_data
39
+ self.service_data, self.customer_data, self.responsible_data
38
40
  )._build_ticket()
39
41
  MockTicket.assert_called_with(expected_ticket_arguments)
40
42
 
43
+ def test_title_with_landline(self):
44
+ self.service_data.landline = "999999999"
45
+ ticket = SwitchboardTicket(
46
+ self.service_data, self.customer_data, self.responsible_data
47
+ )
48
+ self.assertEqual(ticket._ticket_title(), "Alta número de fix (CV)")
49
+
50
+ def test_title_with_mobile_phone_number(self):
51
+ self.service_data.landline = None
52
+ self.service_data.mobile_phone_number = "699999999"
53
+ ticket = SwitchboardTicket(
54
+ self.service_data, self.customer_data, self.responsible_data
55
+ )
56
+ self.assertEqual(ticket._ticket_title(), "Alta mòbil agent (CV)")
57
+
41
58
  @patch("otrs_somconnexio.otrs_models.provision_ticket.ProvisionArticle")
42
59
  def test_build_article(self, MockProvisionArticle):
43
- service_data = Mock(spec=["order_id", "technology"])
44
- service_data.order_id = 123
45
- customer_data = Mock(spec=["order_id"])
46
-
47
60
  mock_article = MockProvisionArticle.return_value
48
61
 
49
- SwitchboardTicket(
50
- service_data, customer_data, self.responsible_data
51
- )._build_article()
62
+ ticket = SwitchboardTicket(
63
+ self.service_data, self.customer_data, self.responsible_data
64
+ )
65
+ ticket._build_article()
66
+
52
67
  MockProvisionArticle.assert_called_with(
53
- service_data.technology,
54
- service_data.order_id,
55
- "switchboard",
68
+ ticket._ticket_title(),
69
+ self.service_data.notes,
56
70
  )
57
71
  mock_article.call.assert_called_once()
58
72
 
59
73
  @patch("otrs_somconnexio.otrs_models.switchboard_ticket.SwitchboardDynamicFields")
60
74
  def test_build_dynamic_fields(self, MockSwitchboardDynamicFields):
61
- service_data = Mock()
62
- customer_data = Mock()
63
75
  mock_dyn_fields = MockSwitchboardDynamicFields.return_value
64
76
 
65
77
  SwitchboardTicket(
66
- service_data, customer_data, self.responsible_data
78
+ self.service_data, self.customer_data, self.responsible_data
67
79
  )._build_dynamic_fields()
68
80
  MockSwitchboardDynamicFields.assert_called_with(
69
- service_data,
70
- customer_data,
81
+ self.service_data,
82
+ self.customer_data,
71
83
  SwitchboardTicketConfiguration.process_id,
72
84
  SwitchboardTicketConfiguration.activity_id,
73
85
  )