Commit 005d844e204e29fcce80db143ceb9fa5bdc4deea

Authored by kosaniak
Committed by GitHub
2 parents 017a5ac8 aded6f4e

Merge pull request #536 from OrysiaDrabych/contracts2

Contract management procedure
... ... @@ -473,6 +473,71 @@ Resource resource.robot
473 473 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1}
474 474 \ Remove From List ${USERS.users['${username}'].tender_data.data['features']} ${feature_index}
475 475
  476 +
  477 +Звірити відображення поля ${field} зміни до договору для користувача ${username}
  478 + Звірити поле зміни до договору ${username} ${CONTRACT_UAID}
  479 + ... ${USERS.users['${tender_owner}'].change_data}
  480 + ... ${field}
  481 +
  482 +
  483 +Звірити відображення поля ${field} договору із ${left} для користувача ${username}
  484 + ${right}= Run As ${username} Отримати інформацію із договору ${CONTRACT_UAID} ${field}
  485 + Порівняти об'єкти ${left} ${right}
  486 +
  487 +
  488 +Звірити відображення поля ${field} документа ${doc_id} до договору з ${left} для користувача ${username}
  489 + ${right}= Run As ${username} Отримати інформацію із документа до договору ${CONTRACT_UAID} ${doc_id} ${field}
  490 + Порівняти об'єкти ${left} ${right}
  491 +
  492 +
  493 +Звірити відображення вмісту документа ${doc_id} до договору з ${left} для користувача ${username}
  494 + ${file_name}= Run As ${username} Отримати документ до договору ${CONTRACT_UAID} ${doc_id}
  495 + ${right}= Get File ${OUTPUT_DIR}${/}${file_name}
  496 + Порівняти об'єкти ${left} ${right}
  497 +
  498 +
  499 +Звірити відображення причин зміни договору
  500 + ${rationale_types_from_broker}= Run as ${viewer} Отримати інформацію із договору ${CONTRACT_UAID} changes[0].rationaleTypes
  501 + ${rationale_types_from_robot}= Get variable value ${USERS.users['${tender_owner}'].change_data.data.rationaleTypes}
  502 + Log ${rationale_types_from_broker}
  503 + Log ${rationale_types_from_robot}
  504 + ${result}= compare_rationale_types ${rationale_types_from_broker} ${rationale_types_from_robot}
  505 + Run keyword if ${result} == ${False} Fail Rationale types are not equal
  506 +
  507 +
  508 +Додати документацію до зміни договору
  509 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  510 + ${doc_id}= get_id_from_string ${file_name}
  511 + ${doc}= Create Dictionary
  512 + ... id=${doc_id}
  513 + ... name=${file_name}
  514 + ... content=${file_content}
  515 + Set to dictionary ${USERS.users['${tender_owner}']} change_doc=${doc}
  516 + Run As ${tender_owner} Додати документацію до зміни в договорі ${CONTRACT_UAID} ${file_path}
  517 + Remove File ${file_path}
  518 +
  519 +
  520 +Додати документацію до договору
  521 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  522 + ${doc_id}= get_id_from_string ${file_name}
  523 + ${doc}= Create Dictionary
  524 + ... id=${doc_id}
  525 + ... name=${file_name}
  526 + ... content=${file_content}
  527 + Set to dictionary ${USERS.users['${tender_owner}']} contract_doc=${doc}
  528 + Run As ${tender_owner} Завантажити документацію до договору ${CONTRACT_UAID} ${file_path}
  529 + Remove File ${file_path}
  530 +
  531 +
  532 +Вказати дійсно оплачену суму
  533 + ${amount}= Get variable value ${USERS.users['${tender_owner}'].contract_data.data.value.amount}
  534 + ${amountPaid}= Create Dictionary amount=${amount} valueAddedTaxIncluded=${True} currency=UAH
  535 + ${data}= Create Dictionary amountPaid=${amountPaid}
  536 + ${data}= Create Dictionary data=${data}
  537 + Set to dictionary ${USERS.users['${tender_owner}']} terminating_data=${data}
  538 + Run As ${tender_owner} Внести зміни в договір ${CONTRACT_UAID} ${data}
  539 +
  540 +
476 541 ##############################################################################################
477 542 # QUESTIONS
478 543 ##############################################################################################
... ...
... ... @@ -56,6 +56,13 @@ Library openprocurement_client.utils
56 56 Log ${EDR_VERSION}
57 57 ${edr_wrapper}= prepare_edr_wrapper ${EDR_HOST_URL} ${EDR_VERSION} ${USERS.users['${username}'].auth_edr[0]} ${USERS.users['${username}'].auth_edr[1]}
58 58 Set To Dictionary ${USERS.users['${username}']} edr_client=${edr_wrapper}
  59 + #Variables for contracting_management module
  60 + ${contract_api_wrapper}= prepare_contract_api_wrapper ${USERS.users['${username}'].api_key} ${api_host_url} ${api_version} ${ds_api_wraper}
  61 + Set To Dictionary ${USERS.users['${username}']} contracting_client=${contract_api_wrapper}
  62 + Set To Dictionary ${USERS.users['${username}']} contract_access_token=${EMPTY}
  63 + ${contracts_id_map}= Create Dictionary
  64 + Set To Dictionary ${USERS.users['${username}']} contracts_id_map=${contracts_id_map}
  65 + Log Variables
59 66
60 67
61 68 Завантажити документ
... ... @@ -1272,3 +1279,159 @@ Library openprocurement_client.utils
1272 1279 Log ${data}
1273 1280 ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${data}
1274 1281 Log ${reply}
  1282 + [Return] ${reply}
  1283 +
  1284 +##############################################################################
  1285 +# CONTRACT MANAGEMENT
  1286 +##############################################################################
  1287 +
  1288 +Отримати internal id по UAid для договору
  1289 + [Arguments] ${username} ${contract_uaid}
  1290 + Log ${contract_uaid}
  1291 + Log ${USERS.users['${username}'].contracts_id_map}
  1292 + ${status}= Run Keyword And Return Status Dictionary Should Contain Key ${USERS.users['${username}'].contracts_id_map} ${contract_uaid}
  1293 + Run Keyword and Return If ${status} Get From Dictionary ${USERS.users['${username}'].contracts_id_map} ${contract_uaid}
  1294 + Call Method ${USERS.users['${username}'].contracting_client} get_contracts
  1295 + ${contract_id}= Wait Until Keyword Succeeds 15x 10 sec get_contract_id_by_uaid ${contract_uaid} ${USERS.users['${username}'].contracting_client}
  1296 + Set To Dictionary ${USERS.users['${username}'].contracts_id_map} ${contract_uaid} ${contract_id}
  1297 + [Return] ${contract_id}
  1298 +
  1299 +
  1300 +Оновити сторінку з договором
  1301 + [Arguments] ${username} ${contract_uaid}
  1302 + openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1303 +
  1304 +
  1305 +Пошук договору по ідентифікатору
  1306 + [Arguments] ${username} ${contract_uaid}
  1307 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1308 + ${contract}= Call Method ${USERS.users['${username}'].contracting_client} get_contract ${internalid}
  1309 + ${contract}= munch_dict arg=${contract}
  1310 + Set To Dictionary ${USERS.users['${username}']} contract_data=${contract}
  1311 + Log ${contract}
  1312 + [return] ${contract}
  1313 +
  1314 +
  1315 +Отримати доступ до договору
  1316 + [Arguments] ${username} ${contract_uaid}
  1317 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1318 + ${contract}= Call Method ${USERS.users['${username}'].contracting_client} retrieve_contract_credentials ${internalid} ${USERS.users['${username}'].access_token}
  1319 + ${contract}= munch_dict arg=${contract}
  1320 + Set To Dictionary ${USERS.users['${username}']} contract_data=${contract}
  1321 + Set To Dictionary ${USERS.users['${username}']} contract_access_token=${contract.access.token}
  1322 + Log ${contract}
  1323 + [return] ${contract}
  1324 +
  1325 +
  1326 +Внести зміну в договір
  1327 + [Arguments] ${username} ${contract_uaid} ${change_data}
  1328 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1329 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} create_change ${internalid} ${USERS.users['${username}'].contract_access_token} ${change_data}
  1330 + # we need this to have change id in `Додати документацію до зміни в договорі` and `Застосувати зміну` keywords
  1331 + ${empty_list}= Create List
  1332 + ${changes}= Get variable value ${USERS.users['${username}'].changes} ${empty_list}
  1333 + Append to list ${changes} ${reply}
  1334 + Set to dictionary ${USERS.users['${username}']} changes=${changes}
  1335 + Log ${change_data}
  1336 + Log ${reply}
  1337 +
  1338 +
  1339 +Додати документацію до зміни в договорі
  1340 + [Arguments] ${username} ${contract_uaid} ${document}
  1341 + ${contract}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1342 + ${contract}= set_access_key ${contract} ${USERS.users['${username}'].contract_access_token}
  1343 + ${reply_doc_create}= Call Method ${USERS.users['${username}'].contracting_client} upload_document ${document} ${contract}
  1344 + ${change_document}= test_change_document_data ${reply_doc_create} ${USERS.users['${username}'].changes[0].data.id}
  1345 + ${reply_doc_patch}= Call Method ${USERS.users['${username}'].contracting_client} patch_document ${contract} ${change_document}
  1346 + Log ${reply_doc_create}
  1347 + Log ${reply_doc_patch}
  1348 +
  1349 +
  1350 +Редагувати поле договору
  1351 + [Arguments] ${username} ${contract_uaid} ${fieldname} ${fieldvalue}
  1352 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1353 + ${contract}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1354 + Set_To_Object ${contract.data} ${fieldname} ${fieldvalue}
  1355 + Log ${contract}
  1356 + ${contract}= Call Method ${USERS.users['${username}'].contracting_client} patch_contract ${internalid} ${USERS.users['${username}'].contract_access_token} ${contract}
  1357 + Log ${contract}
  1358 +
  1359 +
  1360 +Редагувати зміну
  1361 + [Arguments] ${username} ${contract_uaid} ${fieldname} ${fieldvalue}
  1362 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1363 + ${data}= Create Dictionary ${fieldname}=${fieldvalue}
  1364 + ${data}= Create Dictionary data=${data}
  1365 + ${changes}= Get variable value ${USERS.users['${username}'].changes}
  1366 + ${change}= munchify ${changes[-1]}
  1367 + Log ${change}
  1368 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_change ${internalid} ${USERS.users['${username}'].changes[-1].data.id} ${USERS.users['${username}'].contract_access_token} ${data}
  1369 + Log ${data}
  1370 + Log ${reply}
  1371 +
  1372 +
  1373 +Застосувати зміну
  1374 + [Arguments] ${username} ${contract_uaid} ${dateSigned}
  1375 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1376 + ${data}= Create Dictionary status=active dateSigned=${dateSigned}
  1377 + ${data}= Create Dictionary data=${data}
  1378 + ${changes}= Get variable value ${USERS.users['${username}'].changes}
  1379 + ${change}= munchify ${changes[-1]}
  1380 + Log ${change}
  1381 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_change ${internalid} ${USERS.users['${username}'].changes[-1].data.id} ${USERS.users['${username}'].contract_access_token} ${data}
  1382 + Log ${data}
  1383 + Log ${reply}
  1384 +
  1385 +
  1386 +Завантажити документацію до договору
  1387 + [Arguments] ${username} ${contract_uaid} ${document}
  1388 + ${contract}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1389 + ${contract}= set_access_key ${contract} ${USERS.users['${username}'].contract_access_token}
  1390 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} upload_document ${document} ${contract}
  1391 + Log ${reply}
  1392 +
  1393 +
  1394 +Внести зміни в договір
  1395 + [Arguments] ${username} ${contract_uaid} ${data}
  1396 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1397 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_contract ${internalid} ${USERS.users['${username}'].contract_access_token} ${data}
  1398 + Log ${reply}
  1399 +
  1400 +
  1401 +Завершити договір
  1402 + [Arguments] ${username} ${contract_uaid}
  1403 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1404 + ${data}= Create Dictionary status=terminated
  1405 + ${data}= Create Dictionary data=${data}
  1406 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_contract ${internalid} ${USERS.users['${username}'].contract_access_token} ${data}
  1407 +
  1408 +
  1409 +Отримати інформацію із договору
  1410 + [Arguments] ${username} ${contract_uaid} ${field_name}
  1411 + openprocurement_client.Пошук договору по ідентифікатору
  1412 + ... ${username}
  1413 + ... ${contract_uaid}
  1414 +
  1415 + ${status} ${field_value}= Run keyword and ignore error
  1416 + ... Get from object
  1417 + ... ${USERS.users['${username}'].contract_data.data}
  1418 + ... ${field_name}
  1419 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  1420 +
  1421 + Fail Field not found: ${field_name}
  1422 +
  1423 +
  1424 +Отримати інформацію із документа до договору
  1425 + [Arguments] ${username} ${contract_uaid} ${doc_id} ${field_name}
  1426 + ${tender}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1427 + ${document}= get_document_by_id ${tender.data} ${doc_id}
  1428 + Log ${document}
  1429 + [Return] ${document['${field_name}']}
  1430 +
  1431 +
  1432 +Отримати документ до договору
  1433 + [Arguments] ${username} ${contract_uaid} ${doc_id}
  1434 + ${tender}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1435 + ${document}= get_document_by_id ${tender.data} ${doc_id}
  1436 + ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title}
  1437 + [return] ${filename}
... ...
... ... @@ -2,6 +2,7 @@ from openprocurement_client.client import Client, EDRClient
2 2 from openprocurement_client.document_service_client \
3 3 import DocumentServiceClient
4 4 from openprocurement_client.plan import PlansClient
  5 +from openprocurement_client.contract import ContractingClient
5 6 from openprocurement_client.exceptions import IdNotFound
6 7 from restkit.errors import RequestFailed, BadStatusLine, ResourceError
7 8 from retrying import retry
... ... @@ -43,6 +44,16 @@ def prepare_ds_api_wrapper(ds_host_url, auth_ds):
43 44 return StableDsClient(ds_host_url, auth_ds)
44 45
45 46
  47 +class ContractingStableClient(ContractingClient):
  48 + @retry(stop_max_attempt_number=100, wait_random_min=500, wait_random_max=4000, retry_on_exception=retry_if_request_failed)
  49 + def request(self, *args, **kwargs):
  50 + return super(ContractingStableClient, self).request(*args, **kwargs)
  51 +
  52 +
  53 +def prepare_contract_api_wrapper(key, host_url, api_version, ds_client=None):
  54 + return ContractingStableClient(key, host_url, api_version, ds_client=ds_client)
  55 +
  56 +
46 57 class StableEDRClient(EDRClient):
47 58 @retry(stop_max_attempt_number=100, wait_random_min=500,
48 59 wait_random_max=4000, retry_on_exception=retry_if_request_failed)
... ...
  1 +*** Settings ***
  2 +Resource base_keywords.robot
  3 +Suite Setup Test Suite Setup
  4 +Suite Teardown Test Suite Teardown
  5 +
  6 +*** Variables ***
  7 +@{used_roles} tender_owner viewer
  8 +
  9 +
  10 +*** Test Cases ***
  11 +Можливість знайти закупівлю по ідентифікатору
  12 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера
  13 + ... ${USERS.users['${tender_owner}'].broker}: Пошук тендера
  14 + ... viewer tender_owner
  15 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  16 + ... find_tender
  17 + Завантажити дані про тендер
  18 + :FOR ${username} in @{used_roles}
  19 + \ Run As ${${username}} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  20 + ${CONTRACT_UAID}= Get variable value ${USERS.users['${tender_owner}'].tender_data.data.contracts[1].contractID}
  21 + Set Suite Variable ${CONTRACT_UAID}
  22 +
  23 +
  24 +Можливість знайти договір по ідентифікатору
  25 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук договору
  26 + ... ${USERS.users['${tender_owner}'].broker}: Пошук договору
  27 + ... viewer tender_owner
  28 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  29 + ... find_contract
  30 + :FOR ${username} IN @{used_roles}
  31 + \ Run As ${${username}} Пошук договору по ідентифікатору ${CONTRACT_UAID}
  32 +
  33 +
  34 +Можливість отримати доступ до договору
  35 + [Tags] ${USERS.users['${tender_owner}'].broker}: Отримання прав доступу до договору
  36 + ... tender_owner
  37 + ... ${USERS.users['${tender_owner}'].broker}
  38 + ... access_contract
  39 + Run As ${tender_owner} Отримати доступ до договору ${CONTRACT_UAID}
  40 +
  41 +
  42 +Можливість внести зміну до умов договору
  43 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  44 + ... tender_owner
  45 + ... ${USERS.users['${tender_owner}'].broker}
  46 + ... submit_change
  47 + [Teardown] Оновити LAST_MODIFICATION_DATE
  48 + ${change_data}= Підготувати дані про зміну до договору ${tender_owner}
  49 + Run As ${tender_owner} Внести зміну в договір ${CONTRACT_UAID} ${change_data}
  50 +
  51 +
  52 +Відображення опису причини зміни договору
  53 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  54 + ... tender_owner
  55 + ... ${USERS.users['${viewer}'].broker}
  56 + ... view_change
  57 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  58 + Звірити відображення поля rationale зміни до договору для користувача ${viewer}
  59 +
  60 +
  61 +Відображення причин зміни договору
  62 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  63 + ... tender_owner
  64 + ... ${USERS.users['${viewer}'].broker}
  65 + ... view_change
  66 + Звірити відображення причин зміни договору
  67 +
  68 +
  69 +Відображення опису причини зміни договору англійською мовою
  70 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  71 + ... tender_owner
  72 + ... ${USERS.users['${viewer}'].broker}
  73 + ... view_change
  74 + Звірити відображення поля rationale_en зміни до договору для користувача ${viewer}
  75 +
  76 +
  77 +Відображення опису причини зміни договору російською мовою
  78 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  79 + ... tender_owner
  80 + ... ${USERS.users['${viewer}'].broker}
  81 + ... view_change
  82 + Звірити відображення поля rationale_ru зміни до договору для користувача ${viewer}
  83 +
  84 +
  85 +Відображення непідтвердженого статусу зміни договору
  86 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  87 + ... tender_owner
  88 + ... ${USERS.users['${viewer}'].broker}
  89 + ... view_change
  90 + Звірити поле зміни до договору із значенням
  91 + ... ${viewer}
  92 + ... ${CONTRACT_UAID}
  93 + ... pending
  94 + ... status
  95 +
  96 +
  97 +Можливість додати документацію до зміни договору
  98 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  99 + ... tender_owner
  100 + ... ${USERS.users['${tender_owner}'].broker}
  101 + ... upload_change_document
  102 + [Teardown] Оновити LAST_MODIFICATION_DATE
  103 + Додати документацію до зміни договору
  104 +
  105 +
  106 +Відображення заголовку документації до зміни договору
  107 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  108 + ... viewer
  109 + ... ${USERS.users['${viewer}'].broker}
  110 + ... upload_change_document
  111 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  112 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['change_doc']['id']} до договору з ${USERS.users['${tender_owner}']['change_doc']['name']} для користувача ${viewer}
  113 +
  114 +
  115 +Відображення належності документа до зміни договору
  116 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  117 + ... viewer
  118 + ... ${USERS.users['${viewer}'].broker}
  119 + ... view_change_documentOf
  120 + Звірити відображення поля documentOf документа ${USERS.users['${tender_owner}']['change_doc']['id']} до договору з change для користувача ${viewer}
  121 +
  122 +
  123 +Відображення вмісту документації до зміни договору
  124 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  125 + ... viewer
  126 + ... ${USERS.users['${viewer}'].broker}
  127 + ... upload_change_document
  128 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['change_doc']['id']} до договору з ${USERS.users['${tender_owner}']['change_doc']['content']} для користувача ${viewer}
  129 +
  130 +
  131 +Можливість редагувати опис договору
  132 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  133 + ... tender_owner
  134 + ... ${USERS.users['${tender_owner}'].broker}
  135 + ... modify_contract
  136 + [Teardown] Оновити LAST_MODIFICATION_DATE
  137 + ${description}= create_fake_sentence
  138 + Set to dictionary ${USERS.users['${tender_owner}']} new_description=${description}
  139 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} description ${description}
  140 +
  141 +
  142 +Можливість редагувати опис причини зміни договору
  143 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування зміни
  144 + ... tender_owner
  145 + ... ${USERS.users['${tender_owner}'].broker}
  146 + ... modify_change
  147 + [Teardown] Оновити LAST_MODIFICATION_DATE
  148 + ${new_rationale}= create_fake_sentence
  149 + Set to dictionary ${USERS.users['${tender_owner}']} new_rationale=${new_rationale}
  150 + Run As ${tender_owner} Редагувати зміну ${CONTRACT_UAID} rationale ${new_rationale}
  151 +
  152 +
  153 +Можливість редагувати назву договору
  154 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  155 + ... tender_owner
  156 + ... ${USERS.users['${tender_owner}'].broker}
  157 + ... modify_contract
  158 + [Teardown] Оновити LAST_MODIFICATION_DATE
  159 + ${title}= create_fake_title
  160 + Set to dictionary ${USERS.users['${tender_owner}']} new_title=${title}
  161 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} title ${title}
  162 +
  163 +
  164 +Можливість редагувати вартість договору
  165 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  166 + ... tender_owner
  167 + ... ${USERS.users['${tender_owner}'].broker}
  168 + ... modify_contract
  169 + [Teardown] Оновити LAST_MODIFICATION_DATE
  170 + ${value.amount}= create_fake_value_amount
  171 + Set to dictionary ${USERS.users['${tender_owner}']} new_amount=${value.amount}
  172 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} value.amount ${value.amount}
  173 +
  174 +
  175 +Можливість редагувати дату завершення дії договору
  176 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  177 + ... tender_owner
  178 + ... ${USERS.users['${tender_owner}'].broker}
  179 + ... modify_contract
  180 + [Teardown] Оновити LAST_MODIFICATION_DATE
  181 + ${endDate}= create_fake_date
  182 + Set to dictionary ${USERS.users['${tender_owner}']} new_endDate=${endDate}
  183 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} period.endDate ${endDate}
  184 +
  185 +
  186 +Можливість редагувати дату початку дії договору
  187 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  188 + ... tender_owner
  189 + ... ${USERS.users['${tender_owner}'].broker}
  190 + ... modify_contract
  191 + [Teardown] Оновити LAST_MODIFICATION_DATE
  192 + ${startDate}= create_fake_date
  193 + ${period.startDate}= add_minutes_to_date ${startDate} -20
  194 + Set to dictionary ${USERS.users['${tender_owner}']} new_startDate=${period.startDate}
  195 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} period.startDate ${period.startDate}
  196 +
  197 +
  198 +Можливість застосувати зміну договору
  199 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  200 + ... tender_owner
  201 + ... ${USERS.users['${tender_owner}'].broker}
  202 + ... apply_change
  203 + [Teardown] Оновити LAST_MODIFICATION_DATE
  204 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  205 + ${dateSigned}= create_fake_date
  206 + Run As ${tender_owner} Застосувати зміну ${CONTRACT_UAID} ${dateSigned}
  207 + Set to dictionary ${USERS.users['${tender_owner}'].change_data.data} status=active
  208 +
  209 +
  210 +Відображення відредагованого опису договору
  211 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  212 + ... viewer
  213 + ... ${USERS.users['${viewer}'].broker}
  214 + ... modify_contract
  215 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  216 + Звірити поле договору із значенням
  217 + ... ${viewer}
  218 + ... ${CONTRACT_UAID}
  219 + ... ${USERS.users['${tender_owner}'].new_description}
  220 + ... description
  221 +
  222 +
  223 +Відображення відредагованого опису причини зміни договору
  224 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування зміни договору
  225 + ... viewer
  226 + ... ${USERS.users['${viewer}'].broker}
  227 + ... modify_change
  228 + Remove From Dictionary ${USERS.users['${viewer}'].contract_data.data.changes[0]} rationale
  229 + Звірити поле договору із значенням
  230 + ... ${viewer}
  231 + ... ${CONTRACT_UAID}
  232 + ... ${USERS.users['${tender_owner}'].new_rationale}
  233 + ... changes[0].rationale
  234 +
  235 +
  236 +Відображення відредагованої назви договору
  237 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  238 + ... viewer
  239 + ... ${USERS.users['${viewer}'].broker}
  240 + ... modify_contract
  241 + Звірити поле договору із значенням
  242 + ... ${viewer}
  243 + ... ${CONTRACT_UAID}
  244 + ... ${USERS.users['${tender_owner}'].new_title}
  245 + ... title
  246 +
  247 +
  248 +Відображення відредагованої вартості договору
  249 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  250 + ... viewer
  251 + ... ${USERS.users['${viewer}'].broker}
  252 + ... modify_contract
  253 + Звірити поле договору із значенням
  254 + ... ${viewer}
  255 + ... ${CONTRACT_UAID}
  256 + ... ${USERS.users['${tender_owner}'].new_amount}
  257 + ... value.amount
  258 +
  259 +
  260 +Відображення відредагованої дати початку дії договору
  261 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  262 + ... viewer
  263 + ... ${USERS.users['${viewer}'].broker}
  264 + ... modify_contract
  265 + Звірити поле договору із значенням
  266 + ... ${viewer}
  267 + ... ${CONTRACT_UAID}
  268 + ... ${USERS.users['${tender_owner}'].new_startDate}
  269 + ... period.startDate
  270 +
  271 +
  272 +Відображення відредагованої дати завершення дії договору
  273 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  274 + ... viewer
  275 + ... ${USERS.users['${viewer}'].broker}
  276 + ... modify_contract
  277 + Звірити поле договору із значенням
  278 + ... ${viewer}
  279 + ... ${CONTRACT_UAID}
  280 + ... ${USERS.users['${tender_owner}'].new_endDate}
  281 + ... period.endDate
  282 +
  283 +
  284 +Відображення підтвердженого статусу зміни договору
  285 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  286 + ... tender_owner
  287 + ... ${USERS.users['${viewer}'].broker}
  288 + ... apply_change
  289 + Звірити поле зміни до договору із значенням
  290 + ... ${viewer}
  291 + ... ${CONTRACT_UAID}
  292 + ... active
  293 + ... status
  294 +
  295 +
  296 +Неможливість додати документ до зміни договору після застосування зміни
  297 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  298 + ... tender_owner
  299 + ... ${USERS.users['${tender_owner}'].broker}
  300 + ... upload_change_document
  301 + [Teardown] Оновити LAST_MODIFICATION_DATE
  302 + Run keyword and expect error * Додати документацію до зміни договору
  303 +
  304 +
  305 +Неможливість редагувати опис причини зміни договору після застосування зміни
  306 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування зміни договору
  307 + ... tender_owner
  308 + ... ${USERS.users['${tender_owner}'].broker}
  309 + ... modify_change
  310 + [Teardown] Оновити LAST_MODIFICATION_DATE
  311 + ${new_rationale}= create_fake_sentence
  312 + Run keyword and expect error * Run As ${tender_owner} Редагувати зміну ${CONTRACT_UAID} rationale ${new_rationale}
  313 +
  314 +
  315 +Можливість завантажити документацію до договору
  316 + [Tags] ${USERS.users['${tender_owner}'].broker}: Додання документації до договору
  317 + ... tender_owner
  318 + ... ${USERS.users['${tender_owner}'].broker}
  319 + ... add_contract_doc
  320 + [Teardown] Оновити LAST_MODIFICATION_DATE
  321 + Додати документацію до договору
  322 +
  323 +
  324 +Відображення заголовку документації до договору
  325 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  326 + ... viewer
  327 + ... ${USERS.users['${viewer}'].broker}
  328 + ... add_contract_doc
  329 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  330 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['contract_doc']['id']} до договору з ${USERS.users['${tender_owner}']['contract_doc']['name']} для користувача ${viewer}
  331 +
  332 +
  333 +Відображення вмісту документації до договору
  334 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  335 + ... viewer
  336 + ... ${USERS.users['${viewer}'].broker}
  337 + ... add_contract_doc
  338 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['contract_doc']['id']} до договору з ${USERS.users['${tender_owner}']['contract_doc']['content']} для користувача ${viewer}
  339 +
  340 +
  341 +Відображення належності документа до договору
  342 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  343 + ... viewer
  344 + ... ${USERS.users['${viewer}'].broker}
  345 + ... add_contract_doc
  346 + Звірити відображення поля documentOf документа ${USERS.users['${tender_owner}']['contract_doc']['id']} до договору з contract для користувача ${viewer}
  347 +
  348 +
  349 +Можливість вказати причини розірвання договору
  350 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  351 + ... tender_owner
  352 + ... ${USERS.users['${tender_owner}'].broker}
  353 + ... termination_reasons
  354 + [Teardown] Оновити LAST_MODIFICATION_DATE
  355 + ${terminationDetails}= create_fake_sentence
  356 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} terminationDetails ${terminationDetails}
  357 +
  358 +
  359 +Можливість редагувати причини розірвання договору
  360 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  361 + ... tender_owner
  362 + ... ${USERS.users['${tender_owner}'].broker}
  363 + ... termination_reasons
  364 + [Teardown] Оновити LAST_MODIFICATION_DATE
  365 + ${terminationDetails}= create_fake_sentence
  366 + Set to dictionary ${USERS.users['${tender_owner}']} new_termination_details=${terminationDetails}
  367 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} terminationDetails ${terminationDetails}
  368 +
  369 +
  370 +Відображення відредагованих причин розірвання договору
  371 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  372 + ... viewer
  373 + ... ${USERS.users['${viewer}'].broker}
  374 + ... termination_reasons
  375 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  376 + Звірити поле договору із значенням
  377 + ... ${viewer}
  378 + ... ${CONTRACT_UAID}
  379 + ... ${USERS.users['${tender_owner}'].new_termination_details}
  380 + ... terminationDetails
  381 +
  382 +
  383 +Можливість вказати дійсно оплачену суму
  384 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  385 + ... tender_owner
  386 + ... ${USERS.users['${tender_owner}'].broker}
  387 + ... amount_paid
  388 + [Teardown] Оновити LAST_MODIFICATION_DATE
  389 + Вказати дійсно оплачену суму
  390 +
  391 +
  392 +Можливість редагувати обсяг дійсно оплаченої суми
  393 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  394 + ... tender_owner
  395 + ... ${USERS.users['${tender_owner}'].broker}
  396 + ... amount_paid
  397 + [Teardown] Оновити LAST_MODIFICATION_DATE
  398 + ${amountPaid.amount}= create_fake_value_amount
  399 + Set to dictionary ${USERS.users['${tender_owner}']} new_amountPaid_amount=${amountPaid.amount}
  400 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} amountPaid.amount ${amountPaid.amount}
  401 +
  402 +
  403 +Відображення відредагованого обсягу дійсно оплаченої суми
  404 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  405 + ... viewer
  406 + ... ${USERS.users['${viewer}'].broker}
  407 + ... amount_paid
  408 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  409 + Звірити поле договору із значенням
  410 + ... ${viewer}
  411 + ... ${CONTRACT_UAID}
  412 + ... ${USERS.users['${tender_owner}'].new_amountPaid_amount}
  413 + ... amountPaid.amount
  414 +
  415 +
  416 +Відображення врахованого ПДВ в дійсно оплачену суму в договорі
  417 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних договору
  418 + ... tender_owner
  419 + ... ${USERS.users['${viewer}'].broker}
  420 + ... amount_paid
  421 + Звірити відображення поля amountPaid.valueAddedTaxIncluded договору із ${USERS.users['${tender_owner}']['terminating_data'].data.amountPaid.valueAddedTaxIncluded} для користувача ${tender_owner}
  422 +
  423 +
  424 +Відображення валюти дійсно оплаченої суми в договорі
  425 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних договору
  426 + ... tender_owner
  427 + ... ${USERS.users['${viewer}'].broker}
  428 + ... amount_paid
  429 + Звірити відображення поля amountPaid.currency договору із ${USERS.users['${tender_owner}']['terminating_data'].data.amountPaid.currency} для користувача ${tender_owner}
  430 +
  431 +
  432 +Можливість завершити договір
  433 + [Tags] ${USERS.users['${tender_owner}'].broker}: Завершення договору
  434 + ... tender_owner
  435 + ... ${USERS.users['${tender_owner}'].broker}
  436 + ... contract_termination
  437 + [Teardown] Оновити LAST_MODIFICATION_DATE
  438 + Run As ${tender_owner} Завершити договір ${CONTRACT_UAID}
  439 +
  440 +
  441 +Звірити статус завершеного договору
  442 + [Tags] ${USERS.users['${viewer}'].broker}: Завершення договору
  443 + ... viewer
  444 + ... ${USERS.users['${viewer}'].broker}
  445 + ... contract_termination
  446 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  447 + Remove From Dictionary ${USERS.users['${viewer}'].contract_data.data} status
  448 + Звірити поле договору із значенням
  449 + ... ${viewer}
  450 + ... ${CONTRACT_UAID}
  451 + ... terminated
  452 + ... status
  453 +
  454 +
  455 +Неможливість редагувати догововір після його завершення
  456 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  457 + ... tender_owner
  458 + ... ${USERS.users['${tender_owner}'].broker}
  459 + ... modify_contract
  460 + [Teardown] Оновити LAST_MODIFICATION_DATE
  461 + Run keyword and expect error * Додати документацію до договору
... ...
... ... @@ -32,6 +32,10 @@ def create_fake_amount(award_amount):
32 32 return round(random.uniform(1, award_amount), 2)
33 33
34 34
  35 +def create_fake_title():
  36 + return u"[ТЕСТУВАННЯ] {}".format(fake.title())
  37 +
  38 +
35 39 def create_fake_date():
36 40 return get_now().isoformat()
37 41
... ... @@ -436,6 +440,10 @@ def test_lot_document_data(document, lot_id):
436 440 document.data.update({"documentOf": "lot", "relatedItem": lot_id})
437 441 return munchify(document)
438 442
  443 +def test_change_document_data(document, change_id):
  444 + document.data.update({"documentOf": "change", "relatedItem": change_id})
  445 + return munchify(document)
  446 +
439 447
440 448 def test_tender_data_openua(params, submissionMethodDetails):
441 449 # We should not provide any values for `enquiryPeriod` when creating
... ... @@ -482,3 +490,17 @@ def test_tender_data_competitive_dialogue(params, submissionMethodDetails):
482 490 data['procuringEntity']['identifier']['legalName_en'] = fake_en.sentence(nb_words=10, variable_nb_words=True)
483 491 data['procuringEntity']['kind'] = 'general'
484 492 return data
  493 +
  494 +
  495 +def test_change_data():
  496 + return munchify(
  497 + {
  498 + "data":
  499 + {
  500 + "rationale": fake.description(),
  501 + "rationale_en": fake_en.sentence(nb_words=10, variable_nb_words=True),
  502 + "rationale_ru": fake_ru.sentence(nb_words=10, variable_nb_words=True),
  503 + "rationaleTypes": fake.rationaleTypes(amount=3),
  504 + "status": "pending"
  505 + }
  506 + })
... ...
... ... @@ -310,6 +310,14 @@ Get Broker Property By Username
310 310 [Return] ${cancellation_data}
311 311
312 312
  313 +Підготувати дані про зміну до договору
  314 + [Arguments] ${username}
  315 + ${change_data}= test_change_data
  316 + Set To Dictionary ${USERS.users['${username}']} change_data=${change_data}
  317 + Log ${change_data}
  318 + [Return] ${change_data}
  319 +
  320 +
313 321 Адаптувати дані для оголошення тендера
314 322 [Arguments] ${tender_data}
315 323 # munchify is used to make deep copy of ${tender_data}
... ... @@ -453,6 +461,31 @@ Log differences between dicts
453 461 Порівняти об'єкти ${left} ${right}
454 462
455 463
  464 +Звірити поле договору
  465 + [Arguments] ${username} ${contract_uaid} ${cotract_data} ${field}
  466 + ${left}= get_from_object ${contract_data.data} ${field}
  467 + Звірити поле договору із значенням ${username} ${contract_uaid} ${left} ${field}
  468 +
  469 +
  470 +Звірити поле договору із значенням
  471 + [Arguments] ${username} ${contract_uaid} ${left} ${field}
  472 + ${right}= Отримати дані із договору ${username} ${contract_uaid} ${field}
  473 + Порівняти об'єкти ${left} ${right}
  474 +
  475 +
  476 +Звірити поле зміни до договору
  477 + [Arguments] ${username} ${contract_uaid} ${change_data} ${field}
  478 + ${left}= get_from_object ${change_data.data} ${field}
  479 + Звірити поле зміни до договору із значенням ${username} ${contract_uaid} ${left} ${field}
  480 +
  481 +
  482 +Звірити поле зміни до договору із значенням
  483 + [Arguments] ${username} ${contract_uaid} ${left} ${field}
  484 + ${field}= Evaluate "{}{}".format('changes[0].', '${field}')
  485 + ${right}= Отримати дані із договору ${username} ${contract_uaid} ${field}
  486 + Порівняти об'єкти ${left} ${right}
  487 +
  488 +
456 489 Порівняти об'єкти
457 490 [Arguments] ${left} ${right}
458 491 Log ${left}
... ... @@ -581,6 +614,24 @@ Log differences between dicts
581 614 [return] ${field_value}
582 615
583 616
  617 +Отримати дані із договору
  618 + [Arguments] ${username} ${contract_uaid} ${field}
  619 + ${status} ${field_value}= Run keyword and ignore error
  620 + ... get_from_object
  621 + ... ${USERS.users['${username}'].contract_data.data}
  622 + ... ${field}
  623 + # If field in cache, return its value
  624 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  625 + # Else call broker to find field
  626 + ${field_value}= Run As ${username} Отримати інформацію із договору ${contract_uaid} ${field}
  627 + # And caching its value before return
  628 + Set_To_Object ${USERS.users['${username}'].contract_data.data} ${field} ${field_value}
  629 + ${data}= munch_dict arg=${USERS.users['${username}'].contract_data.data}
  630 + Set To Dictionary ${USERS.users['${username}'].contract_data} data=${data}
  631 + Log ${USERS.users['${username}'].contract_data.data}
  632 + [return] ${field_value}
  633 +
  634 +
584 635 Отримати шлях до поля об’єкта
585 636 [Arguments] ${username} ${field_name} ${object_id}
586 637 ${object_type}= get_object_type_by_id ${object_id}
... ...
1 1 # -*- coding: utf-8 -*-
2 2 from faker.providers import BaseProvider
  3 +from faker.generator import random
3 4 from copy import deepcopy
4 5 from munch import Munch
5 6 from json import load
... ... @@ -17,13 +18,14 @@ def load_data_from_file(file_name):
17 18
18 19
19 20 class OP_Provider(BaseProvider):
20   - __fake_data = load_data_from_file("op_faker_data.json")
21   - word_list = __fake_data.words
22   - procuringEntities = __fake_data.procuringEntities
23   - addresses = __fake_data.addresses
24   - classifications = __fake_data.classifications
25   - cpvs = __fake_data.cpvs
26   - items_base_data = __fake_data.items_base_data
  21 + _fake_data = load_data_from_file("op_faker_data.json")
  22 + word_list = _fake_data.words
  23 + procuringEntities = _fake_data.procuringEntities
  24 + addresses = _fake_data.addresses
  25 + classifications = _fake_data.classifications
  26 + cpvs = _fake_data.cpvs
  27 + items_base_data = _fake_data.items_base_data
  28 + rationale_types = _fake_data.rationale_types
27 29
28 30 @classmethod
29 31 def randomize_nb_elements(self, number=10, le=60, ge=140):
... ... @@ -149,4 +151,8 @@ class OP_Provider(BaseProvider):
149 151 "description_ru": item_base_data["description_ru"],
150 152 "description_en": item_base_data["description_en"]
151 153 })
152   - return deepcopy(item)
\ No newline at end of file
  154 + return deepcopy(item)
  155 +
  156 + @classmethod
  157 + def rationaleTypes(self, amount=3):
  158 + return random.sample(self.rationale_types, amount)
\ No newline at end of file
... ...
... ... @@ -8033,5 +8033,15 @@
8033 8033 "name": "набір"
8034 8034 }
8035 8035 }
  8036 + ],
  8037 + "rationale_types": [
  8038 + "volumeCuts",
  8039 + "itemPriceVariation",
  8040 + "qualityImprovement",
  8041 + "durationExtension",
  8042 + "priceReduction",
  8043 + "taxRate",
  8044 + "thirdParty",
  8045 + "fiscalYearExtension"
8036 8046 ]
8037 8047 }
... ...
... ... @@ -260,4 +260,4 @@ ${award_index} ${0}
260 260 ... tender_owner
261 261 ... ${USERS.users['${tender_owner}'].broker}
262 262 ... qualification_approve_second_award level1
263   - Run As ${tender_owner} Підтвердити постачальника ${TENDER['TENDER_UAID']} -1
  263 + Run As ${tender_owner} Підтвердити постачальника ${TENDER['TENDER_UAID']} 1
... ...
... ... @@ -20,12 +20,12 @@ from .initial_data import (
20 20 create_fake_doc,
21 21 create_fake_sentence,
22 22 create_fake_amount,
23   - create_fake_value_amount,
24 23 create_fake_date,
25 24 fake,
26 25 field_with_id,
27 26 test_bid_data,
28 27 test_bid_value,
  28 + test_change_data,
29 29 test_claim_answer_data,
30 30 test_claim_data,
31 31 test_complaint_data,
... ... @@ -46,6 +46,9 @@ from .initial_data import (
46 46 test_tender_data_openeu,
47 47 test_tender_data_openua,
48 48 test_tender_data_planning,
  49 + create_fake_title,
  50 + create_fake_value_amount,
  51 + test_change_document_data,
49 52 )
50 53 from barbecue import chef
51 54 from restkit import request
... ... @@ -557,5 +560,11 @@ def generate_test_bid_data_second_stage(tender_data, index='0'):
557 560 bid.data.parameters.append(parameter)
558 561 return bid
559 562
  563 +
560 564 def convert_amount_string_to_float(amount_string):
561 565 return float(amount_string.replace(' ', '').replace(',', '.'))
  566 +
  567 +
  568 +def compare_rationale_types(type1, type2):
  569 + return set(type1) == set(type2)
  570 +
... ...
... ... @@ -81,7 +81,19 @@
81 81 -i qualification_add_doc_to_second_award
82 82 -i qualification_approve_second_award
83 83
84   --i contract_sign
85 84 -i contract_view
86 85 -i modify_contract
87   --i add_doc_to_contract
\ No newline at end of file
  86 +-i add_doc_to_contract
  87 +-i contract_sign
  88 +
  89 +-i find_contract
  90 +-i access_contract
  91 +-i submit_change
  92 +-i view_change
  93 +-i upload_change_document
  94 +-i modify_change
  95 +-i apply_change
  96 +-i add_contract_doc
  97 +-i termination_reasons
  98 +-i amount_paid
  99 +-i contract_termination
\ No newline at end of file
... ...
... ... @@ -103,4 +103,19 @@
103 103 -i qualification_add_doc_to_second_award
104 104 -i qualification_approve_second_award
105 105
106   --i contract_sign
\ No newline at end of file
  106 +-i contract_view
  107 +-i modify_contract
  108 +-i add_doc_to_contract
  109 +-i contract_sign
  110 +
  111 +-i find_contract
  112 +-i access_contract
  113 +-i submit_change
  114 +-i view_change
  115 +-i upload_change_document
  116 +-i modify_change
  117 +-i apply_change
  118 +-i add_contract_doc
  119 +-i termination_reasons
  120 +-i amount_paid
  121 +-i contract_termination
\ No newline at end of file
... ...
... ... @@ -79,4 +79,19 @@
79 79 -i qualification_add_doc_to_second_award
80 80 -i qualification_approve_second_award
81 81
82   --i contract_sign
\ No newline at end of file
  82 +-i contract_view
  83 +-i modify_contract
  84 +-i add_doc_to_contract
  85 +-i contract_sign
  86 +
  87 +-i find_contract
  88 +-i access_contract
  89 +-i submit_change
  90 +-i view_change
  91 +-i upload_change_document
  92 +-i modify_change
  93 +-i apply_change
  94 +-i add_contract_doc
  95 +-i termination_reasons
  96 +-i amount_paid
  97 +-i contract_termination
\ No newline at end of file
... ...
Please register or login to post a comment