Showing
3 changed files
with
172 additions
and
61 deletions
... | ... | @@ -3,7 +3,6 @@ Library Selenium2Screenshots |
3 | 3 | Library String |
4 | 4 | Library DateTime |
5 | 5 | |
6 | - | |
7 | 6 | *** Variables *** |
8 | 7 | ${locator.tenderId} jquery=h3 |
9 | 8 | ${locator.title} jquery=tender-subject-info>div.row:contains("Назва закупівлі:")>:eq(1)> |
... | ... | @@ -114,7 +113,7 @@ ${locator.enquiryPeriod.endDate} jquery=tender-procedure-info>div.row:contai |
114 | 113 | get tender UAid |
115 | 114 | ${tender_UAid}= Get Text xpath=//div[contains(@class, "panel-heading")] |
116 | 115 | ${tender_UAid}= Get Substring ${tender_UAid} 7 27 |
117 | - [return] ${tender_UAid} | |
116 | + | |
118 | 117 | |
119 | 118 | Oтримати internal id по UAid |
120 | 119 | [Arguments] @{ARGUMENTS} |
... | ... | @@ -332,3 +331,115 @@ Oтримати internal id по UAid |
332 | 331 | Click Element xpath=//div[div/pre[1]]/div[1] |
333 | 332 | Input text xpath=//div[textarea]/textarea ${answer} |
334 | 333 | Click Element xpath=//div[textarea]/span/button[1] |
334 | + | |
335 | +Багатопредметний тендер | |
336 | + [Arguments] @{ARGUMENTS} | |
337 | + [Documentation] | |
338 | + ... ${ARGUMENTS[0]} == username | |
339 | + ... ${ARGUMENTS[1]} == tender_data | |
340 | + | |
341 | + ${items}= Get From Dictionary ${ARGUMENTS[1].data} items | |
342 | + ${title}= Get From Dictionary ${ARGUMENTS[1].data} title | |
343 | + ${description}= Get From Dictionary ${ARGUMENTS[1].data} description | |
344 | + ${budget}= Get From Dictionary ${ARGUMENTS[1].data.value} amount | |
345 | + ${step_rate}= Get From Dictionary ${ARGUMENTS[1].data.minimalStep} amount | |
346 | + ${items_description}= Get From Dictionary ${ARGUMENTS[1].data} description | |
347 | + ${quantity}= Get From Dictionary ${items[0]} quantity | |
348 | + ${cpv}= Get From Dictionary ${items[0].classification} id | |
349 | + ${dkpp_desc0}= Get From Dictionary ${items[0].additionalClassifications[0]} description | |
350 | + ${dkpp_id0}= Get From Dictionary ${items[0].additionalClassifications[0]} id | |
351 | + ${dkpp_desc1}= Get From Dictionary ${items[1].additionalClassifications[0]} description | |
352 | + ${dkpp_id1}= Get From Dictionary ${items[1].additionalClassifications[0]} id | |
353 | + ${dkpp_desc2}= Get From Dictionary ${items[2].additionalClassifications[0]} description | |
354 | + ${dkpp_id2}= Get From Dictionary ${items[2].additionalClassifications[0]} id | |
355 | + ${dkpp_desc3}= Get From Dictionary ${items[3].additionalClassifications[0]} description | |
356 | + ${dkpp_id3}= Get From Dictionary ${items[3].additionalClassifications[0]} id | |
357 | + ${unit}= Get From Dictionary ${items[0].unit} name | |
358 | + ${start_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} startDate | |
359 | + ${start_date}= convert_date_to_etender_format ${start_date} | |
360 | + ${start_time}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} startDate | |
361 | + ${start_time}= convert_time_to_etender_format ${start_time} | |
362 | + ${end_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} endDate | |
363 | + ${end_date}= convert_date_to_etender_format ${end_date} | |
364 | + ${end_time}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} endDate | |
365 | + ${end_time}= convert_time_to_etender_format ${end_time} | |
366 | + ${enquiry_end_date}= Get From Dictionary ${ARGUMENTS[1].data.enquiryPeriod} endDate | |
367 | + ${enquiry_end_date}= convert_date_to_etender_format ${enquiry_end_date} | |
368 | + ${enquiry_end_time}= Get From Dictionary ${ARGUMENTS[1].data.enquiryPeriod} endDate | |
369 | + ${enquiry_end_time}= convert_time_to_etender_format ${enquiry_end_time} | |
370 | + | |
371 | + Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
372 | + Maximize Browser Window | |
373 | + Wait Until Page Contains Мої закупівлі 100 | |
374 | + Click Element xpath=//a[contains(@class, 'ng-binding')][./text()='Мої закупівлі'] | |
375 | + Wait Until Page Contains Element xpath=//a[contains(@class, 'btn btn-info')] | |
376 | + Click Element xpath=//a[contains(@class, 'btn btn-info')] | |
377 | + Wait Until Page Contains Element id=title | |
378 | + Input text id=title ${title} | |
379 | + Input text id=description ${description} | |
380 | + Input text id=value ${budget} | |
381 | + Click Element xpath=//div[contains(@class, 'form-group col-sm-6')]//input[@type='checkbox'] | |
382 | + Input text id=minimalStep ${step_rate} | |
383 | + Input text id=itemsDescription ${items_description} | |
384 | + Input text id=itemsQuantity ${quantity} | |
385 | + Click Element xpath=//select[@name="itemsUnit"]/option[@value='kilogram'] | |
386 | + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//input[@name='enqPEndDate'] ${enquiry_end_date} | |
387 | + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//div[contains(@class, 'col-sm-2')]//input[@ng-model='data.enquiryPeriod.endDate'] ${enquiry_end_time} | |
388 | + | |
389 | + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//input[@name='startDate'] ${start_date} | |
390 | + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//div[contains(@class, 'col-sm-2')]//input[@ng-model='data.tenderPeriod.startDate'] ${start_time} | |
391 | + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//input[@name='endDate'] ${end_date} | |
392 | + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//div[contains(@class, 'col-sm-2')]//input[@ng-model='data.tenderPeriod.endDate'] ${end_time} | |
393 | + | |
394 | + Click Element xpath=//div[contains(@class, 'col-sm-2')]//input[@data-target='#classification'] | |
395 | + Wait Until Page Contains Оберіть класифікатор CPV 100 | |
396 | + Input text xpath=//div[contains(@class, 'modal-content')]//input[@ng-model='searchstring'] ${cpv} | |
397 | + Wait Until Page Contains Картонки 100 | |
398 | + Click Element xpath=//table[contains(@class, 'table table-hover table-striped table-bordered ng-table-rowselected ng-scope ng-table')]//tr[1]//td[1] | |
399 | + Wait Until Page Contains 44617100-9 Картонки 100 | |
400 | + Click Element xpath=//div[contains(@class, 'modal-content')]//button[@ng-click='choose()'] | |
401 | + | |
402 | + Wait Until Page Contains Element xpath=//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'] | |
403 | + Click Element xpath=//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'] | |
404 | + Wait Until Page Contains Класифікатор ДКПП 100 | |
405 | + Input text xpath=//div[contains(@class, 'modal fade ng-scope in')]//input[@ng-model='searchstring'] ${dkpp_desc0} | |
406 | + Wait Until Page Contains ${dkpp_id0} 100 | |
407 | + Click Element xpath=//table[contains(@class, 'table table-hover table-striped table-bordered ng-table-rowselected ng-scope ng-table')]//tr[2]//td[1] | |
408 | + Wait Until Page Contains 17.29.12-00.00 "Блоки, плити та пластини фільтрувальні, з паперової маси" 100 | |
409 | + Click Element xpath=//div[contains(@class, 'modal fade ng-scope in')]//button[@ng-click='choose()'] | |
410 | + | |
411 | + Wait Until Page Contains Element xpath=.//*[@id='myform']/tender-form/div/button | |
412 | + Click Element xpath=.//*[@id='myform']/tender-form/div/button | |
413 | + Wait Until Page Contains Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[2] | |
414 | + Click Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[2] | |
415 | + Wait Until Page Contains Класифікатор ДКПП 100 | |
416 | + Input text xpath=//div[contains(@class, 'modal fade ng-scope in')]//input[@ng-model='searchstring'] ${dkpp_desc1} | |
417 | + Wait Until Page Contains ${dkpp_id1} 100 | |
418 | + Click Element xpath=//table[contains(@class, 'table table-hover table-striped table-bordered ng-table-rowselected ng-scope ng-table')]//tr[3]//td[1] | |
419 | + Wait Until Page Contains 17.21.99-00.00 "Роботи субпідрядні як частина виробництва гофрованих паперу й картону, паперової та картонної тари" 100 | |
420 | + Click Element xpath=//div[contains(@class, 'modal fade ng-scope in')]//button[@ng-click='choose()'] | |
421 | + | |
422 | + Wait Until Page Contains Element xpath=.//*[@id='myform']/tender-form/div/button | |
423 | + Click Element xpath=.//*[@id='myform']/tender-form/div/button | |
424 | + Wait Until Page Contains Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[3] | |
425 | + Click Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[3] | |
426 | + Wait Until Page Contains Класифікатор ДКПП 100 | |
427 | + Input text xpath=//div[contains(@class, 'modal fade ng-scope in')]//input[@ng-model='searchstring'] ${dkpp_desc2} | |
428 | + Wait Until Page Contains ${dkpp_id2} 100 | |
429 | + Click Element xpath=.//*[@id='addClassification']/div/div/div[2]/table/tbody/tr/td[2] | |
430 | + Wait Until Page Contains 17.22.12-40.00 "Вата; вироби з вати, інші" 100 | |
431 | + Click Element xpath=//div[contains(@class, 'modal fade ng-scope in')]//button[@ng-click='choose()'] | |
432 | + | |
433 | + Wait Until Page Contains Element xpath=.//*[@id='myform']/tender-form/div/button | |
434 | + Click Element xpath=.//*[@id='myform']/tender-form/div/button | |
435 | + Wait Until Page Contains Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[4] | |
436 | + Click Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[4] | |
437 | + Wait Until Page Contains Класифікатор ДКПП 100 | |
438 | + Input text xpath=//div[contains(@class, 'modal fade ng-scope in')]//input[@ng-model='searchstring'] ${dkpp_desc3} | |
439 | + Wait Until Page Contains ${dkpp_id3} 100 | |
440 | + Click Element xpath=.//*[@id='addClassification']/div/div/div[2]/table/tbody/tr/td[2] | |
441 | + Wait Until Page Contains 17.22.12-50.00 "Одяг і речі до одягу з паперової маси, паперу, целюлозної вати чи полотна з целюлозного волокна (крім носових хусточок, наголовних уборів)" 100 | |
442 | + Click Element xpath=//div[contains(@class, 'modal fade ng-scope in')]//button[@ng-click='choose()'] | |
443 | + | |
444 | + Wait Until Page Contains Element xpath=//div[contains(@class, 'form-actions')]//button[@type='submit'] | |
445 | + Click Element xpath=//div[contains(@class, 'form-actions')]//button[@type='submit'] | ... | ... |
... | ... | @@ -179,41 +179,41 @@ def prom_test_tender_data(): |
179 | 179 | def test_tender_data_multiple_lots(period_interval=2): |
180 | 180 | now = datetime.now() |
181 | 181 | return { |
182 | - "title": fake.catch_phrase(), | |
183 | - "mode": "test", | |
184 | - "submissionMethodDetails": "quick", | |
185 | - "description": u"Тестовий тендер", | |
186 | - "description_en": "Test tender", | |
187 | - "description_ru": "Тестовый тендер", | |
188 | - "procuringEntity": { | |
189 | - "name": fake.company(), | |
190 | - "name_ru": fake_ru.company(), | |
191 | - "name_en": fake_en.company(), | |
192 | - "identifier": { | |
193 | - "scheme": u"UA-EDR", | |
194 | - "id": u"0000{}".format(fake.pyint()), | |
195 | - "uri": fake.image_url(width=None, height=None) | |
196 | - }, | |
197 | - "address": { | |
198 | - "countryName": u"Україна", | |
199 | - "postalCode": fake.postalcode(), | |
200 | - "region": u"м. Київ", | |
201 | - "locality": u"м. Київ", | |
202 | - "streetAddress": fake.street_address() | |
203 | - }, | |
204 | - "contactPoint": { | |
205 | - "name": fake.name(), | |
206 | - "telephone": fake.phone_number() | |
207 | - } | |
208 | - }, | |
209 | - "value": { | |
210 | - "amount": 50000.99, | |
211 | - "currency": u"UAH" | |
212 | - }, | |
213 | - "minimalStep": { | |
214 | - "amount": 100.1, | |
215 | - "currency": u"UAH" | |
216 | - }, | |
182 | + "title": fake.catch_phrase(), | |
183 | + "mode": "test", | |
184 | + "submissionMethodDetails": "quick", | |
185 | + "description": u"Тестовий тендер", | |
186 | + "description_en": "Test tender", | |
187 | + "description_ru": "Тестовый тендер", | |
188 | + "procuringEntity": { | |
189 | + "name": fake.company(), | |
190 | + "name_ru": fake_ru.company(), | |
191 | + "name_en": fake_en.company(), | |
192 | + "identifier": { | |
193 | + "scheme": u"UA-EDR", | |
194 | + "id": u"0000{}".format(fake.pyint()), | |
195 | + "uri": fake.image_url(width=None, height=None) | |
196 | + }, | |
197 | + "address": { | |
198 | + "countryName": u"Україна", | |
199 | + "postalCode": fake.postalcode(), | |
200 | + "region": u"м. Київ", | |
201 | + "locality": u"м. Київ", | |
202 | + "streetAddress": fake.street_address() | |
203 | + }, | |
204 | + "contactPoint": { | |
205 | + "name": fake.name(), | |
206 | + "telephone": fake.phone_number() | |
207 | + } | |
208 | + }, | |
209 | + "value": { | |
210 | + "amount": 50000, | |
211 | + "currency": u"UAH" | |
212 | + }, | |
213 | + "minimalStep": { | |
214 | + "amount": 100, | |
215 | + "currency": u"UAH" | |
216 | + }, | |
217 | 217 | "items": [ |
218 | 218 | { |
219 | 219 | "description": fake.catch_phrase(), |
... | ... | @@ -353,8 +353,8 @@ def test_tender_data_multiple_lots(period_interval=2): |
353 | 353 | } |
354 | 354 | ], |
355 | 355 | "enquiryPeriod": { |
356 | - "startDate": (now).isoformat(), | |
357 | - "endDate": (now + timedelta(minutes=1)).isoformat() | |
356 | + "startDate": (now + timedelta(minutes=2)).isoformat(), | |
357 | + "endDate": (now + timedelta(minutes=3)).isoformat() | |
358 | 358 | }, |
359 | 359 | "tenderPeriod": { |
360 | 360 | "startDate": (now + timedelta(minutes=2)).isoformat(), | ... | ... |
... | ... | @@ -25,9 +25,9 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] |
25 | 25 | |
26 | 26 | Можливість оголосити багатопредметний тендер |
27 | 27 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
28 | - ${ids}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA} | |
29 | - ${TENDER_ID}= Get From List ${ids} 0 | |
30 | - ${INTERNAL_TENDER_ID}= Get From List ${ids} 1 | |
28 | + ${ids}= Викликати для учасника ${tender_owner} Багатопредметний тендер ${INITIAL_TENDER_DATA} | |
29 | + ${TENDER_ID}= Get From List ${ids} 0 | |
30 | + ${INTERNAL_TENDER_ID}= Get From List ${ids} 1 | |
31 | 31 | Set Global Variable ${INTERNAL_TENDER_ID} |
32 | 32 | Set Global Variable ${TENDER_ID} |
33 | 33 | ${LAST_MODIFICATION_DATE}= Get Current Date |
... | ... | @@ -36,12 +36,12 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] |
36 | 36 | Отримати багатопредметний тендер по ідентифікатору |
37 | 37 | [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору |
38 | 38 | Дочекатись синхронізації з майданчиком ${viewer} |
39 | - Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER_ID} ${INTERNAL_TENDER_ID} | |
40 | - | |
39 | + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER_ID} ${INTERNAL_TENDER_ID} | |
40 | + | |
41 | 41 | Відображення опису позицій закупівлі багатопредметного тендера |
42 | 42 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
43 | 43 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} description |
44 | - | |
44 | + | |
45 | 45 | Відображення дати доставки позицій закупівлі багатопредметного тендера |
46 | 46 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
47 | 47 | Звірити дату предметів закупівлі багатопредметного тендера ${viewer} deliveryDate.endDate |
... | ... | @@ -49,11 +49,11 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] |
49 | 49 | Відображення координат широти доставки позицій закупівлі багатопредметного тендера |
50 | 50 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
51 | 51 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryLocation.latitude |
52 | - | |
52 | + | |
53 | 53 | Відображення координат довготи доставки позицій закупівлі багатопредметного тендера |
54 | 54 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
55 | 55 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryLocation.longitude |
56 | - | |
56 | + | |
57 | 57 | Відображення назви нас. пункту доставки позицій закупівлі багатопредметного тендера |
58 | 58 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
59 | 59 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.countryName |
... | ... | @@ -61,53 +61,53 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] |
61 | 61 | Відображення пошт коду доставки позицій закупівлі багатопредметного тендера |
62 | 62 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
63 | 63 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.postalCode |
64 | - | |
64 | + | |
65 | 65 | Відображення регіону доставки позицій закупівлі багатопредметного тендера |
66 | 66 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
67 | 67 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.region |
68 | - | |
68 | + | |
69 | 69 | Відображення locality адреси доставки позицій закупівлі багатопредметного тендера |
70 | 70 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
71 | 71 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.locality |
72 | - | |
72 | + | |
73 | 73 | Відображення вулиці доставки позицій закупівлі багатопредметного тендера |
74 | 74 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
75 | 75 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.streetAddress |
76 | - | |
76 | + | |
77 | 77 | Відображення схеми класифікації позицій закупівлі багатопредметного тендера |
78 | 78 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
79 | 79 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.scheme |
80 | - | |
80 | + | |
81 | 81 | Відображення ідентифйікатора класифікації позицій закупівлі багатопредметного тендера |
82 | 82 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
83 | 83 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.id |
84 | - | |
84 | + | |
85 | 85 | Відображення опису класифікації позицій закупівлі багатопредметного тендера |
86 | 86 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
87 | 87 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.description |
88 | - | |
88 | + | |
89 | 89 | Відображення схеми додаткової класифікації позицій закупівлі багатопредметного тендера |
90 | 90 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
91 | 91 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.scheme |
92 | - | |
92 | + | |
93 | 93 | Відображення ідентифікатора додаткової класифікації позицій закупівлі багатопредметного тендера |
94 | 94 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
95 | 95 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.id |
96 | - | |
96 | + | |
97 | 97 | Відображення опису додаткової класифікації позицій закупівлі багатопредметного тендера |
98 | 98 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
99 | 99 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.description |
100 | - | |
100 | + | |
101 | 101 | Відображення назви одиниці позицій закупівлі багатопредметного тендера |
102 | 102 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
103 | 103 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} unit.name |
104 | - | |
104 | + | |
105 | 105 | Відображення коду одиниці позицій закупівлі багатопредметного тендера |
106 | 106 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
107 | 107 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} unit.code |
108 | - | |
108 | + | |
109 | 109 | Відображення кількості позицій закупівлі багатопредметного тендера |
110 | 110 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера |
111 | 111 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} quantity |
112 | - | |
113 | - | |
112 | + | |
113 | + | ... | ... |
Please
register
or
login
to post a comment