Commit 95c49dab008deaecc376dae7f278e9cfce80428f
Committed by
GitHub
Merge pull request #88 from ProzorroUKR/milestones_final
Milestones final
Showing
28 changed files
with
302 additions
and
6 deletions
op_robot_tests/tests_files/base_keywords.robot
100644 → 100755
| ... | ... | @@ -9,10 +9,12 @@ Resource resource.robot |
| 9 | 9 | Можливість оголосити тендер |
| 10 | 10 | ${NUMBER_OF_LOTS}= Convert To Integer ${NUMBER_OF_LOTS} |
| 11 | 11 | ${NUMBER_OF_ITEMS}= Convert To Integer ${NUMBER_OF_ITEMS} |
| 12 | + ${NUMBER_OF_MILESTONES}= Convert To Integer ${NUMBER_OF_MILESTONES} | |
| 12 | 13 | ${tender_parameters}= Create Dictionary |
| 13 | 14 | ... mode=${MODE} |
| 14 | 15 | ... number_of_items=${NUMBER_OF_ITEMS} |
| 15 | 16 | ... number_of_lots=${NUMBER_OF_LOTS} |
| 17 | + ... number_of_milestones=${NUMBER_OF_MILESTONES} | |
| 16 | 18 | ... tender_meat=${${TENDER_MEAT}} |
| 17 | 19 | ... lot_meat=${${LOT_MEAT}} |
| 18 | 20 | ... item_meat=${${ITEM_MEAT}} |
| ... | ... | @@ -401,6 +403,20 @@ Resource resource.robot |
| 401 | 403 | \ Звірити відображення поля ${field} ${item_index} предмету для користувача ${username} |
| 402 | 404 | |
| 403 | 405 | |
| 406 | +Звірити відображення поля ${field} усіх умов оплати для усіх користувачів | |
| 407 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} ${provider2} | |
| 408 | + \ Звірити відображення поля ${field} усіх умов оплати для користувача ${username} | |
| 409 | + | |
| 410 | + | |
| 411 | +Звірити відображення поля ${field} усіх умов оплати для користувача ${username} | |
| 412 | + :FOR ${milestone_index} IN RANGE ${NUMBER_OF_MILESTONES} | |
| 413 | + \ Звірити поле тендера із значенням | |
| 414 | + \ ... ${username} | |
| 415 | + \ ... ${TENDER['TENDER_UAID']} | |
| 416 | + \ ... ${USERS.users['${tender_owner}'].initial_data.data['milestones'][${milestone_index}].${field}} | |
| 417 | + \ ... ${field} object_type=milestones object_index=${milestone_index} | |
| 418 | + | |
| 419 | + | |
| 404 | 420 | Звірити відображення ${field} усіх предметів плану для усіх користувачів |
| 405 | 421 | :FOR ${username} IN ${viewer} ${tender_owner} |
| 406 | 422 | \ Звірити відображення ${field} усіх предметів плану для користувача ${username} | ... | ... |
op_robot_tests/tests_files/initial_data.py
100644 → 100755
| ... | ... | @@ -200,6 +200,19 @@ def test_tender_data(params, |
| 200 | 200 | for i in range(params['number_of_items']): |
| 201 | 201 | new_item = test_item_data(cpv_group) |
| 202 | 202 | data['items'].append(new_item) |
| 203 | + milestones = params.get('number_of_milestones') | |
| 204 | + if milestones: | |
| 205 | + data['milestones'] = [] | |
| 206 | + percentage_data = percentage_generation(milestones) | |
| 207 | + for percentage in percentage_data: | |
| 208 | + milestone_element = test_milestone_data() | |
| 209 | + milestone_element['sequenceNumber'] = len(data['milestones']) | |
| 210 | + milestone_element['percentage'] = percentage | |
| 211 | + if milestone_element['title'] == 'anotherEvent': | |
| 212 | + milestone_element['description'] = fake.sentence(nb_words=40, variable_nb_words=True) | |
| 213 | + if params.get('number_of_lots'): | |
| 214 | + milestone_element['relatedLot'] = lot_id | |
| 215 | + data["milestones"].append(milestone_element) | |
| 203 | 216 | if params.get('tender_meat'): |
| 204 | 217 | new_feature = test_feature_data() |
| 205 | 218 | new_feature.featureOf = "tenderer" |
| ... | ... | @@ -800,6 +813,7 @@ def test_tender_data_esco(params, submissionMethodDetails): |
| 800 | 813 | percentage_list = [] |
| 801 | 814 | del data["value"] |
| 802 | 815 | del data["minimalStep"] |
| 816 | + del data["milestones"] | |
| 803 | 817 | for index in range(params['number_of_lots']): |
| 804 | 818 | data['lots'][index]['fundingKind'] = data['fundingKind'] |
| 805 | 819 | if index == 0: |
| ... | ... | @@ -822,4 +836,24 @@ def test_tender_data_esco(params, submissionMethodDetails): |
| 822 | 836 | data['yearlyPaymentsPercentageRange'] = min(percentage_list) |
| 823 | 837 | for index in range(params['number_of_items']): |
| 824 | 838 | del data['items'][index]['deliveryDate'] |
| 825 | - return data | |
| \ No newline at end of file | ||
| 839 | + return data | |
| 840 | + | |
| 841 | + | |
| 842 | +def test_milestone_data(): | |
| 843 | + return munchify({ | |
| 844 | + "code": random.choice(["prepayment", "postpayment"]), | |
| 845 | + "title": fake.milestone_title(), | |
| 846 | + "duration": { | |
| 847 | + "type": random.choice(["working", "banking", "calendar"]), | |
| 848 | + "days": random.randint(1, 364) | |
| 849 | + }, | |
| 850 | + "type": "financing" | |
| 851 | + }) | |
| 852 | + | |
| 853 | + | |
| 854 | +def percentage_generation(number_of_milestones): | |
| 855 | + # input: number_of_milestones 1, 2, 3, ... | |
| 856 | + # output: list of percentage numbers | |
| 857 | + percentage_data = [random.randint(1, round(100 / number_of_milestones)) for _ in range(number_of_milestones - 1)] | |
| 858 | + percentage_data.append(100 - sum(percentage_data)) | |
| 859 | + return percentage_data | |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -533,8 +533,8 @@ Log differences between dicts |
| 533 | 533 | |
| 534 | 534 | |
| 535 | 535 | Звірити поле тендера із значенням |
| 536 | - [Arguments] ${username} ${tender_uaid} ${left} ${field} ${object_id}=${Empty} | |
| 537 | - ${right}= Отримати дані із тендера ${username} ${tender_uaid} ${field} ${object_id} | |
| 536 | + [Arguments] ${username} ${tender_uaid} ${left} ${field} ${object_id}=${Empty} ${object_type}=${Empty} ${object_index}=${Empty} | |
| 537 | + ${right}= Отримати дані із тендера ${username} ${tender_uaid} ${field} ${object_id} ${object_type} ${object_index} | |
| 538 | 538 | Порівняти об'єкти ${left} ${right} |
| 539 | 539 | |
| 540 | 540 | |
| ... | ... | @@ -686,8 +686,9 @@ Log differences between dicts |
| 686 | 686 | |
| 687 | 687 | |
| 688 | 688 | Отримати дані із тендера |
| 689 | - [Arguments] ${username} ${tender_uaid} ${field_name} ${object_id}=${Empty} | |
| 689 | + [Arguments] ${username} ${tender_uaid} ${field_name} ${object_id}=${Empty} ${object_type}=${Empty} ${object_index}=${Empty} | |
| 690 | 690 | ${field}= Run Keyword If '${object_id}' Отримати шлях до поля об’єкта ${username} ${field_name} ${object_id} |
| 691 | + ... ELSE IF '${object_type}' and '${object_index}' Set Variable ${object_type}[${object_index}].${field_name} | |
| 691 | 692 | ... ELSE Set Variable ${field_name} |
| 692 | 693 | ${status} ${field_value}= Run keyword and ignore error |
| 693 | 694 | ... get_from_object | ... | ... |
| ... | ... | @@ -10,6 +10,7 @@ ${MODE} negotiation.quick |
| 10 | 10 | |
| 11 | 11 | ${NUMBER_OF_ITEMS} ${2} |
| 12 | 12 | ${NUMBER_OF_LOTS} ${0} |
| 13 | +${NUMBER_OF_MILESTONES} ${3} | |
| 13 | 14 | ${TENDER_MEAT} ${False} |
| 14 | 15 | ${LOT_MEAT} ${False} |
| 15 | 16 | ${ITEM_MEAT} ${False} |
| ... | ... | @@ -58,6 +59,60 @@ ${MOZ_INTEGRATION} ${False} |
| 58 | 59 | ... level1 |
| 59 | 60 | Можливість знайти тендер по ідентифікатору для користувача ${viewer} |
| 60 | 61 | |
| 62 | + | |
| 63 | +Відображення типу оплати | |
| 64 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 65 | + ... viewer | |
| 66 | + ... ${USERS.users['${viewer}'].broker} | |
| 67 | + ... tender_view_milestone level2 | |
| 68 | + ... non-critical | |
| 69 | + Звірити відображення поля code усіх умов оплати для користувача ${viewer} | |
| 70 | + | |
| 71 | + | |
| 72 | +Відображення події яка ініціює оплату | |
| 73 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 74 | + ... viewer | |
| 75 | + ... ${USERS.users['${viewer}'].broker} | |
| 76 | + ... tender_view_milestone level2 | |
| 77 | + ... non-critical | |
| 78 | + Звірити відображення поля title усіх умов оплати для користувача ${viewer} | |
| 79 | + | |
| 80 | + | |
| 81 | +Відображення розміру оплати | |
| 82 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 83 | + ... viewer | |
| 84 | + ... ${USERS.users['${viewer}'].broker} | |
| 85 | + ... tender_view_milestone level2 | |
| 86 | + ... non-critical | |
| 87 | + Звірити відображення поля percentage усіх умов оплати для користувача ${viewer} | |
| 88 | + | |
| 89 | + | |
| 90 | +Відображення к-ті днів періоду оплати | |
| 91 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 92 | + ... viewer | |
| 93 | + ... ${USERS.users['${viewer}'].broker} | |
| 94 | + ... tender_view_milestone level2 | |
| 95 | + ... non-critical | |
| 96 | + Звірити відображення поля duration.days усіх умов оплати для користувача ${viewer} | |
| 97 | + | |
| 98 | + | |
| 99 | +Відображення типу днів періоду оплати | |
| 100 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 101 | + ... viewer | |
| 102 | + ... ${USERS.users['${viewer}'].broker} | |
| 103 | + ... tender_view_milestone level2 | |
| 104 | + ... non-critical | |
| 105 | + Звірити відображення поля duration.type усіх умов оплати для користувача ${viewer} | |
| 106 | + | |
| 107 | + | |
| 108 | +Відображення виду предмету закупівлі тендера | |
| 109 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 110 | + ... viewer | |
| 111 | + ... ${USERS.users['${viewer}'].broker} | |
| 112 | + ... tender_view level2 | |
| 113 | + ... non-critical | |
| 114 | + Звірити відображення поля mainProcurementCategory тендера для користувача ${viewer} | |
| 115 | + | |
| 61 | 116 | ############################################################################################## |
| 62 | 117 | # MAIN DATA |
| 63 | 118 | ############################################################################################## | ... | ... |
| ... | ... | @@ -10,6 +10,7 @@ ${MODE} negotiation |
| 10 | 10 | |
| 11 | 11 | ${NUMBER_OF_ITEMS} ${2} |
| 12 | 12 | ${NUMBER_OF_LOTS} ${0} |
| 13 | +${NUMBER_OF_MILESTONES} ${3} | |
| 13 | 14 | ${TENDER_MEAT} ${False} |
| 14 | 15 | ${LOT_MEAT} ${False} |
| 15 | 16 | ${ITEM_MEAT} ${False} |
| ... | ... | @@ -152,6 +153,61 @@ ${MOZ_INTEGRATION} ${False} |
| 152 | 153 | ... critical |
| 153 | 154 | Звірити відображення поля cause тендера для користувача ${viewer} |
| 154 | 155 | |
| 156 | + | |
| 157 | +Відображення типу оплати | |
| 158 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 159 | + ... viewer | |
| 160 | + ... ${USERS.users['${viewer}'].broker} | |
| 161 | + ... tender_view_milestone level2 | |
| 162 | + ... non-critical | |
| 163 | + Звірити відображення поля code усіх умов оплати для користувача ${viewer} | |
| 164 | + | |
| 165 | + | |
| 166 | +Відображення події яка ініціює оплату | |
| 167 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 168 | + ... viewer | |
| 169 | + ... ${USERS.users['${viewer}'].broker} | |
| 170 | + ... tender_view_milestone level2 | |
| 171 | + ... non-critical | |
| 172 | + Звірити відображення поля title усіх умов оплати для користувача ${viewer} | |
| 173 | + | |
| 174 | + | |
| 175 | +Відображення розміру оплати | |
| 176 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 177 | + ... viewer | |
| 178 | + ... ${USERS.users['${viewer}'].broker} | |
| 179 | + ... tender_view_milestone level2 | |
| 180 | + ... non-critical | |
| 181 | + Звірити відображення поля percentage усіх умов оплати для користувача ${viewer} | |
| 182 | + | |
| 183 | + | |
| 184 | +Відображення к-ті днів періоду оплати | |
| 185 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 186 | + ... viewer | |
| 187 | + ... ${USERS.users['${viewer}'].broker} | |
| 188 | + ... tender_view_milestone level2 | |
| 189 | + ... non-critical | |
| 190 | + Звірити відображення поля duration.days усіх умов оплати для користувача ${viewer} | |
| 191 | + | |
| 192 | + | |
| 193 | +Відображення типу днів періоду оплати | |
| 194 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 195 | + ... viewer | |
| 196 | + ... ${USERS.users['${viewer}'].broker} | |
| 197 | + ... tender_view_milestone level2 | |
| 198 | + ... non-critical | |
| 199 | + Звірити відображення поля duration.type усіх умов оплати для користувача ${viewer} | |
| 200 | + | |
| 201 | + | |
| 202 | +Відображення виду предмету закупівлі тендера | |
| 203 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 204 | + ... viewer | |
| 205 | + ... ${USERS.users['${viewer}'].broker} | |
| 206 | + ... tender_view level2 | |
| 207 | + ... non-critical | |
| 208 | + Звірити відображення поля mainProcurementCategory тендера для користувача ${viewer} | |
| 209 | + | |
| 210 | + | |
| 155 | 211 | ############################################################################################## |
| 156 | 212 | # MAIN DATA.VALUE |
| 157 | 213 | ############################################################################################## | ... | ... |
op_robot_tests/tests_files/op_faker/op_faker.py
100644 → 100755
| ... | ... | @@ -29,6 +29,7 @@ class OP_Provider(BaseProvider): |
| 29 | 29 | moz_cpvs = _fake_data.moz_cpvs |
| 30 | 30 | items_base_data = _fake_data.items_base_data |
| 31 | 31 | rationale_types = _fake_data.rationale_types |
| 32 | + title_of_milestones = _fake_data.title_of_milestones | |
| 32 | 33 | |
| 33 | 34 | @classmethod |
| 34 | 35 | def randomize_nb_elements(self, number=10, le=60, ge=140): |
| ... | ... | @@ -181,4 +182,8 @@ class OP_Provider(BaseProvider): |
| 181 | 182 | |
| 182 | 183 | @classmethod |
| 183 | 184 | def rationaleTypes(self, amount=3): |
| 184 | - return random.sample(self.rationale_types, amount) | |
| \ No newline at end of file | ||
| 185 | + return random.sample(self.rationale_types, amount) | |
| 186 | + | |
| 187 | + @classmethod | |
| 188 | + def milestone_title(self): | |
| 189 | + return self.random_element(self.title_of_milestones) | |
| \ No newline at end of file | ... | ... |
op_robot_tests/tests_files/op_faker/op_faker_data.json
100644 → 100755
| ... | ... | @@ -8117,5 +8117,15 @@ |
| 8117 | 8117 | "taxRate", |
| 8118 | 8118 | "thirdParty", |
| 8119 | 8119 | "fiscalYearExtension" |
| 8120 | + ], | |
| 8121 | + "title_of_milestones": [ | |
| 8122 | + "executionOfWorks", | |
| 8123 | + "deliveryOfGoods", | |
| 8124 | + "submittingServices", | |
| 8125 | + "signingTheContract", | |
| 8126 | + "submissionDateOfApplications", | |
| 8127 | + "dateOfInvoicing", | |
| 8128 | + "endDateOfTheReportingPeriod", | |
| 8129 | + "anotherEvent" | |
| 8120 | 8130 | ] |
| 8121 | 8131 | } | ... | ... |
op_robot_tests/tests_files/openProcedure.robot
100644 → 100755
| ... | ... | @@ -12,6 +12,7 @@ ${DIALOGUE_TYPE} EU |
| 12 | 12 | |
| 13 | 13 | ${NUMBER_OF_ITEMS} ${1} |
| 14 | 14 | ${NUMBER_OF_LOTS} ${1} |
| 15 | +${NUMBER_OF_MILESTONES} ${3} | |
| 15 | 16 | ${TENDER_MEAT} ${True} |
| 16 | 17 | ${LOT_MEAT} ${True} |
| 17 | 18 | ${ITEM_MEAT} ${True} |
| ... | ... | @@ -60,6 +61,51 @@ ${MOZ_INTEGRATION} ${False} |
| 60 | 61 | Звірити відображення поля description тендера для користувача ${viewer} |
| 61 | 62 | |
| 62 | 63 | |
| 64 | +Відображення типу оплати | |
| 65 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 66 | + ... viewer | |
| 67 | + ... ${USERS.users['${viewer}'].broker} | |
| 68 | + ... tender_view_milestone level2 | |
| 69 | + ... non-critical | |
| 70 | + Звірити відображення поля code усіх умов оплати для усіх користувачів | |
| 71 | + | |
| 72 | + | |
| 73 | +Відображення події яка ініціює оплату | |
| 74 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 75 | + ... viewer | |
| 76 | + ... ${USERS.users['${viewer}'].broker} | |
| 77 | + ... tender_view_milestone level2 | |
| 78 | + ... non-critical | |
| 79 | + Звірити відображення поля title усіх умов оплати для усіх користувачів | |
| 80 | + | |
| 81 | + | |
| 82 | +Відображення розміру оплати | |
| 83 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 84 | + ... viewer | |
| 85 | + ... ${USERS.users['${viewer}'].broker} | |
| 86 | + ... tender_view_milestone level2 | |
| 87 | + ... non-critical | |
| 88 | + Звірити відображення поля percentage усіх умов оплати для усіх користувачів | |
| 89 | + | |
| 90 | + | |
| 91 | +Відображення к-ті днів періоду оплати | |
| 92 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 93 | + ... viewer | |
| 94 | + ... ${USERS.users['${viewer}'].broker} | |
| 95 | + ... tender_view_milestone level2 | |
| 96 | + ... non-critical | |
| 97 | + Звірити відображення поля duration.days усіх умов оплати для усіх користувачів | |
| 98 | + | |
| 99 | + | |
| 100 | +Відображення типу днів періоду оплати | |
| 101 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 102 | + ... viewer | |
| 103 | + ... ${USERS.users['${viewer}'].broker} | |
| 104 | + ... tender_view_milestone level2 | |
| 105 | + ... non-critical | |
| 106 | + Звірити відображення поля duration.type усіх умов оплати для усіх користувачів | |
| 107 | + | |
| 108 | + | |
| 63 | 109 | Відображення виду предмету закупівлі тендера |
| 64 | 110 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера |
| 65 | 111 | ... viewer | ... | ... |
| ... | ... | @@ -10,6 +10,7 @@ ${MODE} reporting |
| 10 | 10 | |
| 11 | 11 | ${NUMBER_OF_ITEMS} ${2} |
| 12 | 12 | ${NUMBER_OF_LOTS} ${0} |
| 13 | +${NUMBER_OF_MILESTONES} ${3} | |
| 13 | 14 | ${TENDER_MEAT} ${False} |
| 14 | 15 | ${LOT_MEAT} ${False} |
| 15 | 16 | ${ITEM_MEAT} ${False} |
| ... | ... | @@ -74,6 +75,60 @@ ${MOZ_INTEGRATION} ${False} |
| 74 | 75 | ... critical |
| 75 | 76 | Можливість знайти тендер по ідентифікатору для користувача ${viewer} |
| 76 | 77 | |
| 78 | + | |
| 79 | +Відображення типу оплати | |
| 80 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 81 | + ... viewer | |
| 82 | + ... ${USERS.users['${viewer}'].broker} | |
| 83 | + ... tender_view_milestone level2 | |
| 84 | + ... non-critical | |
| 85 | + Звірити відображення поля code усіх умов оплати для користувача ${viewer} | |
| 86 | + | |
| 87 | + | |
| 88 | +Відображення події яка ініціює оплату | |
| 89 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 90 | + ... viewer | |
| 91 | + ... ${USERS.users['${viewer}'].broker} | |
| 92 | + ... tender_view_milestone level2 | |
| 93 | + ... non-critical | |
| 94 | + Звірити відображення поля title усіх умов оплати для користувача ${viewer} | |
| 95 | + | |
| 96 | + | |
| 97 | +Відображення розміру оплати | |
| 98 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 99 | + ... viewer | |
| 100 | + ... ${USERS.users['${viewer}'].broker} | |
| 101 | + ... tender_view_milestone level2 | |
| 102 | + ... non-critical | |
| 103 | + Звірити відображення поля percentage усіх умов оплати для користувача ${viewer} | |
| 104 | + | |
| 105 | + | |
| 106 | +Відображення к-ті днів періоду оплати | |
| 107 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 108 | + ... viewer | |
| 109 | + ... ${USERS.users['${viewer}'].broker} | |
| 110 | + ... tender_view_milestone level2 | |
| 111 | + ... non-critical | |
| 112 | + Звірити відображення поля duration.days усіх умов оплати для користувача ${viewer} | |
| 113 | + | |
| 114 | + | |
| 115 | +Відображення типу днів періоду оплати | |
| 116 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 117 | + ... viewer | |
| 118 | + ... ${USERS.users['${viewer}'].broker} | |
| 119 | + ... tender_view_milestone level2 | |
| 120 | + ... non-critical | |
| 121 | + Звірити відображення поля duration.type усіх умов оплати для користувача ${viewer} | |
| 122 | + | |
| 123 | + | |
| 124 | +Відображення виду предмету закупівлі тендера | |
| 125 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
| 126 | + ... viewer | |
| 127 | + ... ${USERS.users['${viewer}'].broker} | |
| 128 | + ... tender_view level2 | |
| 129 | + ... non-critical | |
| 130 | + Звірити відображення поля mainProcurementCategory тендера для користувача ${viewer} | |
| 131 | + | |
| 77 | 132 | ############################################################################################## |
| 78 | 133 | # CONTRACTS |
| 79 | 134 | ############################################################################################## | ... | ... |
Please
register
or
login
to post a comment