Commit fbace12a451b62c6893b3effc1acefaacbc92b8c

Authored by ivanka12
Committed by GitHub
2 parents 947222be 65a6285c

Merge pull request #1003 from ivanka12/agreement

Agreement
  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 +*** Test Cases ***
  10 +Можливість знайти закупівлю по ідентифікатору
  11 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера
  12 + ... viewer tender_owner
  13 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  14 + ... find_tender
  15 + ... critical
  16 + Завантажити дані про тендер
  17 + :FOR ${username} IN ${viewer} ${tender_owner}
  18 + \ Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  19 +
  20 +
  21 +Відображення ідентифікатора угоди
  22 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера
  23 + ... viewer tender_owner
  24 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  25 + ... tender_view
  26 + ... critical
  27 + :FOR ${username} IN ${viewer} ${tender_owner}
  28 + \ Отримати дані із поля agreements[0].agreementID тендера для користувача ${username}
  29 + ${AGREEMENT_UAID}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data.agreements[0].agreementID}
  30 + Set Suite Variable ${AGREEMENT_UAID}
  31 +
  32 +
  33 +Можливість знайти угоду по ідентифікатору
  34 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук угоди
  35 + ... viewer tender_owner
  36 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  37 + ... find_agreement
  38 + ... critical
  39 + :FOR ${username} IN ${viewer} ${tender_owner}
  40 + \ Run As ${username} Пошук угоди по ідентифікатору ${AGREEMENT_UAID}
  41 +
  42 +
  43 +Відображення ідентифікатора контракту в угоді
  44 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  45 + ... viewer tender_owner
  46 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  47 + ... agreement_view
  48 + ... critical
  49 + :FOR ${username} IN ${viewer} ${tender_owner}
  50 + \ Отримати дані із угоди ${username} ${AGREEMENT_UAID} contracts[0].id
  51 +
  52 +
  53 +Відображення ідентифікатора предмету в угоді
  54 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  55 + ... viewer tender_owner
  56 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  57 + ... agreement_view
  58 + ... critical
  59 + :FOR ${username} IN ${viewer} ${tender_owner}
  60 + \ Отримати дані із угоди ${username} ${AGREEMENT_UAID} items[0].id
  61 +
  62 +
  63 +Можливість отримати доступ до угоди
  64 + [Tags] ${USERS.users['${tender_owner}'].broker}: Отримання прав доступу до угоди
  65 + ... tender_owner
  66 + ... ${USERS.users['${tender_owner}'].broker}
  67 + ... find_agreement
  68 + ... critical
  69 + Run As ${tender_owner} Отримати доступ до угоди ${AGREEMENT_UAID}
  70 +
  71 +
  72 +Можливість завантажити документацію в угоду
  73 + [Tags] ${USERS.users['${tender_owner}'].broker}: Завантаження документації в угоду
  74 + ... tender_owner
  75 + ... ${USERS.users['${tender_owner}'].broker}
  76 + ... add_agreement_doc
  77 + ... non-critical
  78 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  79 + [Teardown] Оновити LAST_MODIFICATION_DATE
  80 + Можливість завантажити документ для рамкової угоди користувачем ${tender_owner}
  81 +
  82 +
  83 +Можливість внести зміну до угоди taxRate
  84 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  85 + ... tender_owner
  86 + ... ${USERS.users['${tender_owner}'].broker}
  87 + ... submit_change
  88 + ... critical
  89 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  90 + [Teardown] Оновити LAST_MODIFICATION_DATE
  91 + ${change_data}= Підготувати дані про зміну до угоди ${tender_owner} taxRate
  92 + Run As ${tender_owner} Внести зміну в угоду ${AGREEMENT_UAID} ${change_data}
  93 +
  94 +
  95 +Відображення типу зміни taxRate
  96 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  97 + ... viewer
  98 + ... ${USERS.users['${viewer}'].broker}
  99 + ... change_view
  100 + ... non-critical
  101 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  102 + Звірити поле угоди із значенням
  103 + ... ${viewer}
  104 + ... ${AGREEMENT_UAID}
  105 + ... ${USERS.users['${tender_owner}'].change_data.data.rationaleType}
  106 + ... changes[0].rationaleType
  107 +
  108 +
  109 +Відображення обгрунтування зміни taxRate
  110 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  111 + ... viewer
  112 + ... ${USERS.users['${viewer}'].broker}
  113 + ... change_view
  114 + ... non-critical
  115 + Звірити поле угоди із значенням
  116 + ... ${viewer}
  117 + ... ${AGREEMENT_UAID}
  118 + ... ${USERS.users['${tender_owner}'].change_data.data.rationale}
  119 + ... changes[0].rationale
  120 +
  121 +
  122 +Можливість оновити властивості угоди для внесених змін taxRate
  123 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  124 + ... tender_owner
  125 + ... ${USERS.users['${tender_owner}'].broker}
  126 + ... modification
  127 + ... critical
  128 + [Teardown] Оновити LAST_MODIFICATION_DATE
  129 + ${change_data}= Підготувати дані для оновлення властивості угоди ${tender_owner} addend ${0.9}
  130 + Run As ${tender_owner} Оновити властивості угоди ${AGREEMENT_UAID} ${change_data}
  131 +
  132 +
  133 +Відображення ідентифікатора предмету у властивостях taxRate
  134 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  135 + ... viewer
  136 + ... ${USERS.users['${viewer}'].broker}
  137 + ... modification_view
  138 + ... non-critical
  139 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  140 + Звірити поле угоди із значенням
  141 + ... ${viewer}
  142 + ... ${AGREEMENT_UAID}
  143 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['itemId']}
  144 + ... changes[0].modifications[0].itemId
  145 +
  146 +
  147 +Відображення addend у властивостях taxRate
  148 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  149 + ... viewer
  150 + ... ${USERS.users['${viewer}'].broker}
  151 + ... modification_view
  152 + ... non-critical
  153 + Звірити поле угоди із значенням
  154 + ... ${viewer}
  155 + ... ${AGREEMENT_UAID}
  156 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['addend']}
  157 + ... changes[0].modifications[0].addend
  158 +
  159 +
  160 +Можливість завантажити документацію в зміну
  161 + [Tags] ${USERS.users['${tender_owner}'].broker}: Завантаження документації в угоду
  162 + ... tender_owner
  163 + ... ${USERS.users['${tender_owner}'].broker}
  164 + ... add_agreement_doc
  165 + ... non-critical
  166 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  167 + [Teardown] Оновити LAST_MODIFICATION_DATE
  168 + Можливість завантажити документ для зміни у рамковій угоді користувачем ${tender_owner}
  169 +
  170 +
  171 +Можливість застосувати зміну договору taxRate
  172 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  173 + ... tender_owner
  174 + ... ${USERS.users['${tender_owner}'].broker}
  175 + ... apply_change
  176 + ... critical
  177 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  178 + [Teardown] Оновити LAST_MODIFICATION_DATE
  179 + ${dateSigned}= create_fake_date
  180 + Run As ${tender_owner} Застосувати зміну для угоди ${AGREEMENT_UAID} ${dateSigned} active
  181 +
  182 +
  183 +Відображення статусу active зміни taxRate
  184 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  185 + ... viewer
  186 + ... ${USERS.users['${viewer}'].broker}
  187 + ... change_view
  188 + ... critical
  189 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  190 + Звірити поле угоди із значенням
  191 + ... ${viewer}
  192 + ... ${AGREEMENT_UAID}
  193 + ... active
  194 + ... changes[0].status
  195 +
  196 +
  197 +Можливість внести зміну до угоди itemPriceVariation
  198 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  199 + ... tender_owner
  200 + ... ${USERS.users['${tender_owner}'].broker}
  201 + ... submit_change
  202 + ... critical
  203 + [Teardown] Оновити LAST_MODIFICATION_DATE
  204 + ${change_data}= Підготувати дані про зміну до угоди ${tender_owner} itemPriceVariation
  205 + Run As ${tender_owner} Внести зміну в угоду ${AGREEMENT_UAID} ${change_data}
  206 +
  207 +
  208 +Відображення типу зміни itemPriceVariation
  209 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  210 + ... viewer
  211 + ... ${USERS.users['${viewer}'].broker}
  212 + ... change_view
  213 + ... non-critical
  214 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  215 + Звірити поле угоди із значенням
  216 + ... ${viewer}
  217 + ... ${AGREEMENT_UAID}
  218 + ... ${USERS.users['${tender_owner}'].change_data.data.rationaleType}
  219 + ... changes[1].rationaleType
  220 +
  221 +
  222 +Відображення обгрунтування зміни itemPriceVariation
  223 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  224 + ... viewer
  225 + ... ${USERS.users['${viewer}'].broker}
  226 + ... change_view
  227 + ... non-critical
  228 + Звірити поле угоди із значенням
  229 + ... ${viewer}
  230 + ... ${AGREEMENT_UAID}
  231 + ... ${USERS.users['${tender_owner}'].change_data.data.rationale}
  232 + ... changes[1].rationale
  233 +
  234 +
  235 +Можливість оновити властивості угоди для внесених змін itemPriceVariation
  236 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  237 + ... tender_owner
  238 + ... ${USERS.users['${tender_owner}'].broker}
  239 + ... modification
  240 + ... critical
  241 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  242 + [Teardown] Оновити LAST_MODIFICATION_DATE
  243 + ${change_data}= Підготувати дані для оновлення властивості угоди ${tender_owner} factor ${1.1}
  244 + Run As ${tender_owner} Оновити властивості угоди ${AGREEMENT_UAID} ${change_data}
  245 +
  246 +
  247 +Відображення ідентифікатора предмету у властивостях itemPriceVariation
  248 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  249 + ... viewer
  250 + ... ${USERS.users['${viewer}'].broker}
  251 + ... modification_view
  252 + ... non-critical
  253 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  254 + Звірити поле угоди із значенням
  255 + ... ${viewer}
  256 + ... ${AGREEMENT_UAID}
  257 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['itemId']}
  258 + ... changes[1].modifications[0].itemId
  259 +
  260 +
  261 +Відображення factor у властивостях itemPriceVariation
  262 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  263 + ... viewer
  264 + ... ${USERS.users['${viewer}'].broker}
  265 + ... modification_view
  266 + ... non-critical
  267 + Звірити поле угоди із значенням
  268 + ... ${viewer}
  269 + ... ${AGREEMENT_UAID}
  270 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['factor']}
  271 + ... changes[1].modifications[0].factor
  272 +
  273 +
  274 +Можливість скасувати зміну договору itemPriceVariation
  275 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  276 + ... tender_owner
  277 + ... ${USERS.users['${tender_owner}'].broker}
  278 + ... apply_change
  279 + ... critical
  280 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  281 + [Teardown] Оновити LAST_MODIFICATION_DATE
  282 + ${dateSigned}= create_fake_date
  283 + Run As ${tender_owner} Застосувати зміну для угоди ${AGREEMENT_UAID} ${dateSigned} cancelled
  284 +
  285 +
  286 +Відображення статусу cancelled зміни itemPriceVariation
  287 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  288 + ... viewer
  289 + ... ${USERS.users['${viewer}'].broker}
  290 + ... change_view
  291 + ... critical
  292 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  293 + Звірити поле угоди із значенням
  294 + ... ${viewer}
  295 + ... ${AGREEMENT_UAID}
  296 + ... cancelled
  297 + ... changes[1].status
  298 +
  299 +
  300 +Можливість внести зміну до угоди thirdParty
  301 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  302 + ... tender_owner
  303 + ... ${USERS.users['${tender_owner}'].broker}
  304 + ... submit_change
  305 + ... critical
  306 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  307 + [Teardown] Оновити LAST_MODIFICATION_DATE
  308 + ${change_data}= Підготувати дані про зміну до угоди ${tender_owner} thirdParty
  309 + Run As ${tender_owner} Внести зміну в угоду ${AGREEMENT_UAID} ${change_data}
  310 +
  311 +
  312 +Відображення типу зміни thirdParty
  313 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  314 + ... viewer
  315 + ... ${USERS.users['${viewer}'].broker}
  316 + ... change_view
  317 + ... non-critical
  318 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  319 + Звірити поле угоди із значенням
  320 + ... ${viewer}
  321 + ... ${AGREEMENT_UAID}
  322 + ... ${USERS.users['${tender_owner}'].change_data.data.rationaleType}
  323 + ... changes[2].rationaleType
  324 +
  325 +
  326 +Відображення обгрунтування зміни thirdParty
  327 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  328 + ... viewer
  329 + ... ${USERS.users['${viewer}'].broker}
  330 + ... change_view
  331 + ... non-critical
  332 + Звірити поле угоди із значенням
  333 + ... ${viewer}
  334 + ... ${AGREEMENT_UAID}
  335 + ... ${USERS.users['${tender_owner}'].change_data.data.rationale}
  336 + ... changes[2].rationale
  337 +
  338 +
  339 +Можливість оновити властивості угоди для внесених змін thirdParty
  340 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  341 + ... tender_owner
  342 + ... ${USERS.users['${tender_owner}'].broker}
  343 + ... modification
  344 + ... critical
  345 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  346 + [Teardown] Оновити LAST_MODIFICATION_DATE
  347 + Log ${USERS.users['${tender_owner}'].agreement_data}
  348 + ${change_data}= Підготувати дані для оновлення властивості угоди ${tender_owner} factor ${0.97}
  349 + Run As ${tender_owner} Оновити властивості угоди ${AGREEMENT_UAID} ${change_data}
  350 +
  351 +
  352 +Відображення ідентифікатора предмету у властивостях thirdParty
  353 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  354 + ... viewer
  355 + ... ${USERS.users['${viewer}'].broker}
  356 + ... modification_view
  357 + ... non-critical
  358 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  359 + Звірити поле угоди із значенням
  360 + ... ${viewer}
  361 + ... ${AGREEMENT_UAID}
  362 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['itemId']}
  363 + ... changes[2].modifications[0].itemId
  364 +
  365 +
  366 +Відображення factor у властивостях thirdParty
  367 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  368 + ... viewer
  369 + ... ${USERS.users['${viewer}'].broker}
  370 + ... modification_view
  371 + ... non-critical
  372 + Звірити поле угоди із значенням
  373 + ... ${viewer}
  374 + ... ${AGREEMENT_UAID}
  375 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['factor']}
  376 + ... changes[2].modifications[0].factor
  377 +
  378 +
  379 +Можливість застосувати зміну договору thirdParty
  380 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  381 + ... tender_owner
  382 + ... ${USERS.users['${tender_owner}'].broker}
  383 + ... apply_change
  384 + ... critical
  385 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  386 + [Teardown] Оновити LAST_MODIFICATION_DATE
  387 + ${dateSigned}= create_fake_date
  388 + Run As ${tender_owner} Застосувати зміну для угоди ${AGREEMENT_UAID} ${dateSigned} active
  389 +
  390 +
  391 +Відображення статусу active зміни thirdParty
  392 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  393 + ... viewer
  394 + ... ${USERS.users['${viewer}'].broker}
  395 + ... change_view
  396 + ... critical
  397 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  398 + Звірити поле угоди із значенням
  399 + ... ${viewer}
  400 + ... ${AGREEMENT_UAID}
  401 + ... active
  402 + ... changes[2].status
  403 +
  404 +
  405 +Можливість внести зміну до угоди partyWithdrawal
  406 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  407 + ... tender_owner
  408 + ... ${USERS.users['${tender_owner}'].broker}
  409 + ... submit_change
  410 + ... critical
  411 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  412 + [Teardown] Оновити LAST_MODIFICATION_DATE
  413 + ${change_data}= Підготувати дані про зміну до угоди ${tender_owner} partyWithdrawal
  414 + Run As ${tender_owner} Внести зміну в угоду ${AGREEMENT_UAID} ${change_data}
  415 +
  416 +
  417 +Відображення типу зміни partyWithdrawal
  418 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  419 + ... viewer
  420 + ... ${USERS.users['${viewer}'].broker}
  421 + ... change_view
  422 + ... non-critical
  423 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  424 + Звірити поле угоди із значенням
  425 + ... ${viewer}
  426 + ... ${AGREEMENT_UAID}
  427 + ... ${USERS.users['${tender_owner}'].change_data.data.rationaleType}
  428 + ... changes[3].rationaleType
  429 +
  430 +
  431 +Відображення обгрунтування зміни partyWithdrawal
  432 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  433 + ... viewer
  434 + ... ${USERS.users['${viewer}'].broker}
  435 + ... change_view
  436 + ... non-critical
  437 + Звірити поле угоди із значенням
  438 + ... ${viewer}
  439 + ... ${AGREEMENT_UAID}
  440 + ... ${USERS.users['${tender_owner}'].change_data.data.rationale}
  441 + ... changes[3].rationale
  442 +
  443 +
  444 +Можливість оновити властивості угоди для внесених змін partyWithdrawal
  445 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  446 + ... tender_owner
  447 + ... ${USERS.users['${tender_owner}'].broker}
  448 + ... modification
  449 + ... critical
  450 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  451 + [Teardown] Оновити LAST_MODIFICATION_DATE
  452 + ${change_data}= Підготувати дані для оновлення властивості угоди
  453 + ... ${tender_owner}
  454 + ... contractId
  455 + ... ${USERS.users['${tender_owner}'].agreement_data.data['contracts'][0]['id']}
  456 + Run As ${tender_owner} Оновити властивості угоди ${AGREEMENT_UAID} ${change_data}
  457 +
  458 +
  459 +Відображення ідентифікатора предмету у властивостях partyWithdrawal
  460 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  461 + ... viewer
  462 + ... ${USERS.users['${viewer}'].broker}
  463 + ... modification_view
  464 + ... non-critical
  465 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  466 + Звірити поле угоди із значенням
  467 + ... ${viewer}
  468 + ... ${AGREEMENT_UAID}
  469 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['itemId']}
  470 + ... changes[3].modifications[0].itemId
  471 +
  472 +
  473 +Відображення contractId у властивостях partyWithdrawal
  474 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  475 + ... viewer
  476 + ... ${USERS.users['${viewer}'].broker}
  477 + ... modification_view
  478 + ... non-critical
  479 + Звірити поле угоди із значенням
  480 + ... ${viewer}
  481 + ... ${AGREEMENT_UAID}
  482 + ... ${USERS.users['${tender_owner}'].modification_data.data.modifications[0]['contractId']}
  483 + ... changes[3].modifications[0].contractId
  484 +
  485 +
  486 +Можливість скасувати зміну договору partyWithdrawal
  487 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  488 + ... tender_owner
  489 + ... ${USERS.users['${tender_owner}'].broker}
  490 + ... apply_change
  491 + ... critical
  492 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  493 + [Teardown] Оновити LAST_MODIFICATION_DATE
  494 + ${dateSigned}= create_fake_date
  495 + Run As ${tender_owner} Застосувати зміну для угоди ${AGREEMENT_UAID} ${dateSigned} cancelled
  496 +
  497 +
  498 +Відображення статусу cancelled зміни partyWithdrawal
  499 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни
  500 + ... viewer
  501 + ... ${USERS.users['${viewer}'].broker}
  502 + ... change_view
  503 + ... critical
  504 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  505 + Звірити поле угоди із значенням
  506 + ... ${viewer}
  507 + ... ${AGREEMENT_UAID}
  508 + ... cancelled
  509 + ... changes[3].status
  510 +
  511 +
  512 +Можливість завершити угоду
  513 + [Tags] ${USERS.users['${tender_owner}'].broker}: Завершення угоди
  514 + ... tender_owner
  515 + ... ${USERS.users['${tender_owner}'].broker}
  516 + ... agreement_termination
  517 + ... critical
  518 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  519 + [Teardown] Оновити LAST_MODIFICATION_DATE
  520 + Run As ${tender_owner} Завершити угоду ${AGREEMENT_UAID}
  521 +
  522 +
  523 +Звірити статус завершеної угоди
  524 + [Tags] ${USERS.users['${viewer}'].broker}: Завершення угоди
  525 + ... viewer
  526 + ... ${USERS.users['${viewer}'].broker}
  527 + ... agreement_termination
  528 + ... critical
  529 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  530 + Remove From Dictionary ${USERS.users['${viewer}'].agreement_data.data} status
  531 + Звірити поле угоди із значенням
  532 + ... ${viewer}
  533 + ... ${AGREEMENT_UAID}
  534 + ... terminated
  535 + ... status
@@ -1334,6 +1334,33 @@ Resource resource.robot @@ -1334,6 +1334,33 @@ Resource resource.robot
1334 Remove File ${file_path} 1334 Remove File ${file_path}
1335 1335
1336 1336
  1337 +Можливість завантажити документ для рамкової угоди користувачем ${username}
  1338 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  1339 + ${doc_id}= get_id_from_string ${file_name}
  1340 + ${doc}= Create Dictionary
  1341 + ... id=${doc_id}
  1342 + ... name=${file_name}
  1343 + ... content=${file_content}
  1344 + Set to dictionary ${USERS.users['${username}']} contract_doc=${doc}
  1345 + Run As ${username} Завантажити документ в рамкову угоду ${file_path} ${USERS.users['${username}'].tender_data.data.agreements[0].agreementID}
  1346 + Remove File ${file_path}
  1347 +
  1348 +
  1349 +Можливість завантажити документ для зміни у рамковій угоді користувачем ${username}
  1350 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  1351 + ${doc_id}= get_id_from_string ${file_name}
  1352 + ${doc}= Create Dictionary
  1353 + ... id=${doc_id}
  1354 + ... name=${file_name}
  1355 + ... content=${file_content}
  1356 + Set to dictionary ${USERS.users['${username}']} contract_doc=${doc}
  1357 + Run As ${username} Завантажити документ для зміни у рамковій угоді
  1358 + ... ${file_path}
  1359 + ... ${USERS.users['${username}'].tender_data.data.agreements[0].agreementID}
  1360 + ... ${USERS.users['${username}'].agreement_data.data['items'][0]['id']}
  1361 + Remove File ${file_path}
  1362 +
  1363 +
1337 Можливість укласти угоду для закупівлі 1364 Можливість укласти угоду для закупівлі
1338 Run as ${tender_owner} 1365 Run as ${tender_owner}
1339 ... Підтвердити підписання контракту 1366 ... Підтвердити підписання контракту
@@ -43,6 +43,19 @@ Library openprocurement_client.utils @@ -43,6 +43,19 @@ Library openprocurement_client.utils
43 [return] ${monitoring_id} 43 [return] ${monitoring_id}
44 44
45 45
  46 +Отримати internal id угоди по UAid
  47 + [Arguments] ${username} ${agreement_uaid}
  48 + Log ${username}
  49 + Log ${agreement_uaid}
  50 + Log Many ${USERS.users['${username}'].id_map}
  51 + ${status}= Run Keyword And Return Status Dictionary Should Contain Key ${USERS.users['${username}'].id_map} ${agreement_uaid}
  52 + Run Keyword And Return If ${status} Get From Dictionary ${USERS.users['${username}'].id_map} ${agreement_uaid}
  53 + Call Method ${USERS.users['${username}'].agreement_client} get_agreements
  54 + ${agreement_id}= Wait Until Keyword Succeeds 5x 30 sec get_agreement_id_by_uaid ${agreement_uaid} ${USERS.users['${username}'].agreement_client}
  55 + Set To Dictionary ${USERS.users['${username}'].id_map} ${agreement_uaid} ${agreement_id}
  56 + [return] ${agreement_id}
  57 +
  58 +
46 Підготувати клієнт для користувача 59 Підготувати клієнт для користувача
47 [Arguments] ${username} 60 [Arguments] ${username}
48 [Documentation] Відкрити браузер, створити об’єкти api wrapper і 61 [Documentation] Відкрити браузер, створити об’єкти api wrapper і
@@ -62,7 +75,9 @@ Library openprocurement_client.utils @@ -62,7 +75,9 @@ Library openprocurement_client.utils
62 ... prepare_plan_api_wrapper ${USERS.users['${username}'].api_key} PLANS ${API_HOST_URL} ${API_VERSION} 75 ... prepare_plan_api_wrapper ${USERS.users['${username}'].api_key} PLANS ${API_HOST_URL} ${API_VERSION}
63 ... ELSE prepare_api_wrapper ${USERS.users['${username}'].api_key} ${RESOURCE} ${API_HOST_URL} ${API_VERSION} ${ds_api_wraper} 76 ... ELSE prepare_api_wrapper ${USERS.users['${username}'].api_key} ${RESOURCE} ${API_HOST_URL} ${API_VERSION} ${ds_api_wraper}
64 ${dasu_api_wraper}= prepare_dasu_api_wrapper ${USERS.users['${username}'].dasu_api_key} ${DASU_RESOURCE} ${DASU_API_HOST_URL} ${DASU_API_VERSION} ${ds_api_wraper} 77 ${dasu_api_wraper}= prepare_dasu_api_wrapper ${USERS.users['${username}'].dasu_api_key} ${DASU_RESOURCE} ${DASU_API_HOST_URL} ${DASU_API_VERSION} ${ds_api_wraper}
  78 + ${agreement_wrapper}= prepare_agreement_api_wrapper ${USERS.users['${username}'].api_key} AGREEMENTS ${API_HOST_URL} ${API_VERSION} ${ds_api_wraper}
65 Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper} 79 Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper}
  80 + Set To Dictionary ${USERS.users['${username}']} agreement_client=${agreement_wrapper}
66 Set To Dictionary ${USERS.users['${username}']} dasu_client=${dasu_api_wraper} 81 Set To Dictionary ${USERS.users['${username}']} dasu_client=${dasu_api_wraper}
67 Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY} 82 Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY}
68 ${id_map}= Create Dictionary 83 ${id_map}= Create Dictionary
@@ -75,6 +90,8 @@ Library openprocurement_client.utils @@ -75,6 +90,8 @@ Library openprocurement_client.utils
75 ${contract_api_wrapper}= prepare_contract_api_wrapper ${USERS.users['${username}'].api_key} CONTRACTS ${api_host_url} ${api_version} ${ds_api_wraper} 90 ${contract_api_wrapper}= prepare_contract_api_wrapper ${USERS.users['${username}'].api_key} CONTRACTS ${api_host_url} ${api_version} ${ds_api_wraper}
76 Set To Dictionary ${USERS.users['${username}']} contracting_client=${contract_api_wrapper} 91 Set To Dictionary ${USERS.users['${username}']} contracting_client=${contract_api_wrapper}
77 Set To Dictionary ${USERS.users['${username}']} contract_access_token=${EMPTY} 92 Set To Dictionary ${USERS.users['${username}']} contract_access_token=${EMPTY}
  93 + Set To Dictionary ${USERS.users['${username}']} agreement_access_token=${EMPTY}
  94 + ${contracts_id_map}= Create Dictionary
78 ${contracts_id_map}= Create Dictionary 95 ${contracts_id_map}= Create Dictionary
79 Set To Dictionary ${USERS.users['${username}']} contracts_id_map=${contracts_id_map} 96 Set To Dictionary ${USERS.users['${username}']} contracts_id_map=${contracts_id_map}
80 Log Variables 97 Log Variables
@@ -246,6 +263,16 @@ Library openprocurement_client.utils @@ -246,6 +263,16 @@ Library openprocurement_client.utils
246 [return] ${monitoring} 263 [return] ${monitoring}
247 264
248 265
  266 +Пошук угоди по ідентифікатору
  267 + [Arguments] ${username} ${agreement_uaid} ${save_key}=agreement_data
  268 + ${internalid}= openprocurement_client.Отримати internal id угоди по UAid ${username} ${agreement_uaid}
  269 + ${agreement}= Call Method ${USERS.users['${username}'].agreement_client} get_agreement ${internalid}
  270 + Set To Dictionary ${USERS.users['${username}']} ${save_key}=${agreement}
  271 + ${agreement}= munch_dict arg=${agreement}
  272 + Log ${agreement}
  273 + [return] ${agreement}
  274 +
  275 +
249 Отримати доступ до об'єкта моніторингу 276 Отримати доступ до об'єкта моніторингу
250 [Arguments] ${username} ${monitoring_uaid} ${save_key}=monitoring 277 [Arguments] ${username} ${monitoring_uaid} ${save_key}=monitoring
251 ${token}= Set Variable ${USERS.users['${username}'].access_token} 278 ${token}= Set Variable ${USERS.users['${username}'].access_token}
@@ -2010,3 +2037,102 @@ Library openprocurement_client.utils @@ -2010,3 +2037,102 @@ Library openprocurement_client.utils
2010 ${document}= get_document_by_id ${tender.data} ${doc_id} 2037 ${document}= get_document_by_id ${tender.data} ${doc_id}
2011 ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title} 2038 ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title}
2012 [return] ${filename} 2039 [return] ${filename}
  2040 +
  2041 +
  2042 +Отримати доступ до угоди
  2043 + [Arguments] ${username} ${agreement_uaid}
  2044 + ${token}= Set Variable ${USERS.users['${username}'].access_token}
  2045 + ${internalid}= openprocurement_client.Отримати internal id угоди по UAid ${username} ${agreement_uaid}
  2046 + ${agreement}= Call Method ${USERS.users['${username}'].agreement_client} patch_credentials ${internalid} ${token}
  2047 + Set To Dictionary ${USERS.users['${username}']} agreement_access_token=${agreement.access.token}
  2048 + ${agreement}= munch_dict arg=${agreement}
  2049 + [return] ${agreement}
  2050 +
  2051 +
  2052 +Внести зміну в угоду
  2053 + [Arguments] ${username} ${agreement_uaid} ${change_data}
  2054 + ${internalid}= openprocurement_client.Отримати internal id угоди по UAid ${username} ${agreement_uaid}
  2055 + ${reply}= Call Method ${USERS.users['${username}'].agreement_client} create_change
  2056 + ... ${internalid}
  2057 + ... ${change_data}
  2058 + ... access_token=${USERS.users['${username}'].agreement_access_token}
  2059 + Log ${reply}
  2060 +
  2061 +
  2062 +Застосувати зміну для угоди
  2063 + [Arguments] ${username} ${agreement_uaid} ${dateSigned} ${status}
  2064 + ${agreement}= openprocurement_client.Пошук угоди по ідентифікатору ${username} ${agreement_uaid}
  2065 + ${data}= Create Dictionary status=${status} dateSigned=${dateSigned}
  2066 + ${data}= Create Dictionary data=${data}
  2067 + ${reply}= Call Method ${USERS.users['${username}'].agreement_client} patch_change
  2068 + ... ${agreement.data.id}
  2069 + ... ${data}
  2070 + ... ${agreement.data.changes[-1].id}
  2071 + ... access_token=${USERS.users['${username}'].agreement_access_token}
  2072 + Log ${reply}
  2073 +
  2074 +
  2075 +Оновити властивості угоди
  2076 + [Arguments] ${username} ${agreement_uaid} ${data}
  2077 + ${agreement}= openprocurement_client.Пошук угоди по ідентифікатору ${username} ${agreement_uaid}
  2078 + ${reply}= Call Method ${USERS.users['${username}'].agreement_client} patch_change
  2079 + ... ${agreement.data.id}
  2080 + ... ${data}
  2081 + ... ${agreement.data.changes[-1].id}
  2082 + ... access_token=${USERS.users['${username}'].agreement_access_token}
  2083 + Log ${reply}
  2084 +
  2085 +
  2086 +Завантажити документ в рамкову угоду
  2087 + [Arguments] ${username} ${filepath} ${agreement_uaid}
  2088 + Log ${username}
  2089 + Log ${agreement_uaid}
  2090 + Log ${filepath}
  2091 + ${agreement}= openprocurement_client.Пошук угоди по ідентифікатору ${username} ${agreement_uaid}
  2092 + ${reply}= Call Method ${USERS.users['${username}'].agreement_client} upload_document
  2093 + ... ${filepath}
  2094 + ... ${agreement.data.id}
  2095 + ... access_token=${USERS.users['${username}'].agreement_access_token}
  2096 + Log Object Data ${reply} reply
  2097 + [return] ${reply}
  2098 +
  2099 +
  2100 +Завантажити документ для зміни у рамковій угоді
  2101 + [Arguments] ${username} ${filepath} ${agreement_uaid} ${item_id}
  2102 + Log ${username}
  2103 + Log ${agreement_uaid}
  2104 + Log ${filepath}
  2105 + ${agreement}= openprocurement_client.Пошук угоди по ідентифікатору ${username} ${agreement_uaid}
  2106 + ${document}= openprocurement_client.Завантажити документ в рамкову угоду ${username} ${filepath} ${agreement_uaid}
  2107 + Set to dictionary ${document.data} documentOf=change
  2108 + Set to dictionary ${document.data} relatedItem=${item_id}
  2109 + ${reply}= Call Method ${USERS.users['${username}'].agreement_client} patch_document
  2110 + ... ${agreement.data.id}
  2111 + ... ${document}
  2112 + ... ${document.data.id}
  2113 + ... access_token=${USERS.users['${username}'].agreement_access_token}
  2114 + [return] ${reply}
  2115 +
  2116 +
  2117 +Завершити угоду
  2118 + [Arguments] ${username} ${agreement_uaid}
  2119 + ${internalid}= openprocurement_client.Отримати internal id угоди по UAid ${username} ${agreement_uaid}
  2120 + ${data}= Create Dictionary status=terminated
  2121 + ${data}= Create Dictionary data=${data}
  2122 + ${reply}= Call Method ${USERS.users['${username}'].agreement_client} patch_agreement
  2123 + ... ${internalid}
  2124 + ... ${data}
  2125 + ... access_token=${USERS.users['${username}'].agreement_access_token}
  2126 +
  2127 +
  2128 +Отримати інформацію із угоди
  2129 + [Arguments] ${username} ${agreement_uaid} ${field_name}
  2130 + openprocurement_client.Пошук угоди по ідентифікатору
  2131 + ... ${username}
  2132 + ... ${agreement_uaid}
  2133 + ${status} ${field_value}= Run Keyword And Ignore Error
  2134 + ... Get From Object
  2135 + ... ${USERS.users['${username}'].agreement_data.data}
  2136 + ... ${field_name}
  2137 + Run Keyword If '${status}' == 'PASS' Return From Keyword ${field_value}
  2138 + Fail Field not found: ${field_name}
1 from openprocurement_client.resources.tenders import Client 1 from openprocurement_client.resources.tenders import Client
2 from openprocurement_client.resources.edr import EDRClient 2 from openprocurement_client.resources.edr import EDRClient
  3 +from openprocurement_client.resources.agreements import AgreementClient
3 from openprocurement_client.dasu_client import DasuClient 4 from openprocurement_client.dasu_client import DasuClient
4 from openprocurement_client.resources.document_service import DocumentServiceClient 5 from openprocurement_client.resources.document_service import DocumentServiceClient
5 from openprocurement_client.resources.plans import PlansClient 6 from openprocurement_client.resources.plans import PlansClient
@@ -34,6 +35,13 @@ class StableDsClient(DocumentServiceClient): @@ -34,6 +35,13 @@ class StableDsClient(DocumentServiceClient):
34 return super(StableDsClient, self).request(*args, **kwargs) 35 return super(StableDsClient, self).request(*args, **kwargs)
35 36
36 37
  38 +class StableAgreementClient(AgreementClient):
  39 + @retry(stop_max_attempt_number=100, wait_random_min=500,
  40 + wait_random_max=4000, retry_on_exception=retry_if_request_failed)
  41 + def request(self, *args, **kwargs):
  42 + return super(StableAgreementClient, self).request(*args, **kwargs)
  43 +
  44 +
37 def prepare_api_wrapper(key, resource, host_url, api_version, ds_client=None): 45 def prepare_api_wrapper(key, resource, host_url, api_version, ds_client=None):
38 return StableClient(key, resource, host_url, api_version, 46 return StableClient(key, resource, host_url, api_version,
39 ds_client=ds_client) 47 ds_client=ds_client)
@@ -43,6 +51,11 @@ def prepare_ds_api_wrapper(ds_host_url, auth_ds): @@ -43,6 +51,11 @@ def prepare_ds_api_wrapper(ds_host_url, auth_ds):
43 return StableDsClient(ds_host_url, auth_ds) 51 return StableDsClient(ds_host_url, auth_ds)
44 52
45 53
  54 +def prepare_agreement_api_wrapper(key, resource, host_url, api_version, ds_client=None):
  55 + return StableAgreementClient(key, resource, host_url, api_version,
  56 + ds_client=ds_client)
  57 +
  58 +
46 class ContractingStableClient(ContractingClient): 59 class ContractingStableClient(ContractingClient):
47 @retry(stop_max_attempt_number=100, wait_random_min=500, wait_random_max=4000, retry_on_exception=retry_if_request_failed) 60 @retry(stop_max_attempt_number=100, wait_random_min=500, wait_random_max=4000, retry_on_exception=retry_if_request_failed)
48 def request(self, *args, **kwargs): 61 def request(self, *args, **kwargs):
@@ -649,6 +649,32 @@ def test_change_data(): @@ -649,6 +649,32 @@ def test_change_data():
649 }) 649 })
650 650
651 651
  652 +def test_agreement_change_data(rationaleType):
  653 + return munchify(
  654 + {
  655 + "data":
  656 + {
  657 + "rationale": fake.description(),
  658 + "rationale_en": fake_en.sentence(nb_words=10, variable_nb_words=True),
  659 + "rationale_ru": fake_ru.sentence(nb_words=10, variable_nb_words=True),
  660 + "rationaleType": rationaleType,
  661 + }
  662 + })
  663 +
  664 +
  665 +def test_modification_data(item_id, field_name, field_value):
  666 + data = {
  667 + "modifications": [
  668 + {
  669 + "itemId": item_id,
  670 + field_name: field_value
  671 + }
  672 + ]
  673 + }
  674 + return munchify({'data':data})
  675 +
  676 +
  677 +
652 def get_hash(file_contents): 678 def get_hash(file_contents):
653 return ("md5:"+hashlib.md5(file_contents).hexdigest()) 679 return ("md5:"+hashlib.md5(file_contents).hexdigest())
654 680
@@ -340,6 +340,25 @@ Get Broker Property By Username @@ -340,6 +340,25 @@ Get Broker Property By Username
340 [Return] ${change_data} 340 [Return] ${change_data}
341 341
342 342
  343 +Підготувати дані про зміну до угоди
  344 + [Arguments] ${username} ${rationaleType}
  345 + ${change_data}= test_agreement_change_data ${rationaleType}
  346 + Set To Dictionary ${USERS.users['${username}']} change_data=${change_data}
  347 + Log ${change_data}
  348 + [Return] ${change_data}
  349 +
  350 +
  351 +Підготувати дані для оновлення властивості угоди
  352 + [Arguments] ${username} ${field_name} ${field_value}
  353 + ${modification_data}= test_modification_data
  354 + ... ${USERS.users['${username}'].agreement_data.data['items'][0]['id']}
  355 + ... ${field_name}
  356 + ... ${field_value}
  357 + Set To Dictionary ${USERS.users['${username}']} modification_data=${modification_data}
  358 + Log ${modification_data}
  359 + [Return] ${modification_data}
  360 +
  361 +
343 Адаптувати дані для оголошення тендера 362 Адаптувати дані для оголошення тендера
344 [Arguments] ${tender_data} 363 [Arguments] ${tender_data}
345 # munchify is used to make deep copy of ${tender_data} 364 # munchify is used to make deep copy of ${tender_data}
@@ -530,6 +549,12 @@ Log differences between dicts @@ -530,6 +549,12 @@ Log differences between dicts
530 Порівняти об'єкти ${left} ${right} 549 Порівняти об'єкти ${left} ${right}
531 550
532 551
  552 +Звірити поле угоди із значенням
  553 + [Arguments] ${username} ${agreement_uaid} ${left} ${field}
  554 + ${right}= Run As ${username} Отримати інформацію із угоди ${agreement_uaid} ${field}
  555 + Порівняти об'єкти ${left} ${right}
  556 +
  557 +
533 Звірити поле зміни до договору 558 Звірити поле зміни до договору
534 [Arguments] ${username} ${contract_uaid} ${change_data} ${field} 559 [Arguments] ${username} ${contract_uaid} ${change_data} ${field}
535 ${left}= get_from_object ${change_data.data} ${field} 560 ${left}= get_from_object ${change_data.data} ${field}
@@ -690,6 +715,24 @@ Log differences between dicts @@ -690,6 +715,24 @@ Log differences between dicts
690 [return] ${field_value} 715 [return] ${field_value}
691 716
692 717
  718 +Отримати дані із угоди
  719 + [Arguments] ${username} ${agreement_uaid} ${field_name}
  720 + ${status} ${field_value}= Run keyword and ignore error
  721 + ... get_from_object
  722 + ... ${USERS.users['${username}'].agreement_data.data}
  723 + ... ${field_name}
  724 + # If field in cache, return its value
  725 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  726 + # Else call broker to find field
  727 + ${field_value}= Run As ${username} Отримати інформацію із угоди ${agreement_uaid} ${field_name}
  728 + # And caching its value before return
  729 + Set_To_Object ${USERS.users['${username}'].agreement_data.data} ${field_name} ${field_value}
  730 + ${data}= munch_dict arg=${USERS.users['${username}'].agreement_data.data}
  731 + Set To Dictionary ${USERS.users['${username}'].agreement_data} data=${data}
  732 + Log ${USERS.users['${username}'].agreement_data.data}
  733 + [return] ${field_value}
  734 +
  735 +
693 Отримати дані із об'єкта моніторингу 736 Отримати дані із об'єкта моніторингу
694 [Arguments] ${username} ${monitoring_uaid} ${field_name} ${object_id}=${Empty} 737 [Arguments] ${username} ${monitoring_uaid} ${field_name} ${object_id}=${Empty}
695 ${status} ${field_value}= Run keyword and ignore error 738 ${status} ${field_value}= Run keyword and ignore error
@@ -62,6 +62,8 @@ from .initial_data import ( @@ -62,6 +62,8 @@ from .initial_data import (
62 test_status_data, 62 test_status_data,
63 test_elimination_report, 63 test_elimination_report,
64 test_tender_data_esco, 64 test_tender_data_esco,
  65 + test_modification_data,
  66 + test_agreement_change_data,
65 create_fake_title, 67 create_fake_title,
66 create_fake_value_amount, 68 create_fake_value_amount,
67 test_change_document_data, 69 test_change_document_data,
@@ -76,6 +76,7 @@ @@ -76,6 +76,7 @@
76 -i pre-qualification_approve_qualifications 76 -i pre-qualification_approve_qualifications
77 77
78 -i auction_url 78 -i auction_url
  79 +-i auction
79 80
80 -i qualification_add_doc_to_first_award 81 -i qualification_add_doc_to_first_award
81 -i qualification_approve_first_award 82 -i qualification_approve_first_award
@@ -92,4 +93,13 @@ @@ -92,4 +93,13 @@
92 -i contract_stand_still 93 -i contract_stand_still
93 -i awarding_approve_first_award 94 -i awarding_approve_first_award
94 -i modify_agreement 95 -i modify_agreement
95 --i agreement_registration  
  96 +-i agreement_registration
  97 +
  98 +
  99 +-i find_agreement
  100 +-i add_agreement_doc
  101 +-i submit_change
  102 +-i change_view
  103 +-i modification
  104 +-i modification_view
  105 +-i apply_change
Please register or login to post a comment