*** Settings ***
Library  openprocurement_client_helper.py
Library  openprocurement_client.utils


*** Keywords ***
Отримати internal id по UAid
  [Arguments]  ${username}  ${tender_uaid}
  Log  ${username}
  Log  ${tender_uaid}
  Log Many  ${USERS.users['${username}'].id_map}
  ${status}=  Run Keyword And Return Status  Dictionary Should Contain Key  ${USERS.users['${username}'].id_map}  ${tender_uaid}
  Run Keyword And Return If  ${status}  Get From Dictionary  ${USERS.users['${username}'].id_map}  ${tender_uaid}
  Call Method  ${USERS.users['${username}'].client}  get_tenders
  ${tender_id}=  Wait Until Keyword Succeeds  5x  30 sec  get_tender_id_by_uaid  ${tender_uaid}  ${USERS.users['${username}'].client}
  Set To Dictionary  ${USERS.users['${username}'].id_map}  ${tender_uaid}  ${tender_id}
  [return]  ${tender_id}


Отримати internal id плану по UAid
  [Arguments]  ${username}  ${tender_uaid}
  Log  ${username}
  Log  ${tender_uaid}
  Log Many  ${USERS.users['${username}'].id_map}
  ${status}=  Run Keyword And Return Status  Dictionary Should Contain Key  ${USERS.users['${username}'].id_map}  ${tender_uaid}
  Run Keyword And Return If  ${status}  Get From Dictionary  ${USERS.users['${username}'].id_map}  ${tender_uaid}
  Call Method  ${USERS.users['${username}'].plan_client}  get_plans
  ${tender_id}=  Wait Until Keyword Succeeds  5x  30 sec  get_plan_id_by_uaid  ${tender_uaid}  ${USERS.users['${username}'].plan_client}
  Set To Dictionary  ${USERS.users['${username}'].id_map}  ${tender_uaid}  ${tender_id}
  [return]  ${tender_id}


Отримати internal id об'єкта моніторингу по UAid
  [Arguments]  ${username}  ${monitoring_uaid}
  Log  ${username}
  Log  ${monitoring_uaid}
  Log Many  ${USERS.users['${username}'].id_map}
  ${status}=  Run Keyword And Return Status  Dictionary Should Contain Key  ${USERS.users['${username}'].id_map}  ${monitoring_uaid}
  Run Keyword And Return If  ${status}  Get From Dictionary  ${USERS.users['${username}'].id_map}  ${monitoring_uaid}
  Call Method  ${USERS.users['${username}'].dasu_client}  get_monitorings
  ${monitoring_id}=  Wait Until Keyword Succeeds  5x  30 sec  get_monitoring_id_by_uaid  ${monitoring_uaid}  ${USERS.users['${username}'].dasu_client}
  Set To Dictionary  ${USERS.users['${username}'].id_map}  ${monitoring_uaid}  ${monitoring_id}
  [return]  ${monitoring_id}


Отримати internal id угоди по UAid
  [Arguments]  ${username}  ${agreement_uaid}
  Log  ${username}
  Log  ${agreement_uaid}
  Log Many  ${USERS.users['${username}'].id_map}
  ${status}=  Run Keyword And Return Status  Dictionary Should Contain Key  ${USERS.users['${username}'].id_map}  ${agreement_uaid}
  Run Keyword And Return If  ${status}  Get From Dictionary  ${USERS.users['${username}'].id_map}  ${agreement_uaid}
  Call Method  ${USERS.users['${username}'].agreement_client}  get_agreements
  ${agreement_id}=  Wait Until Keyword Succeeds  5x  30 sec  get_agreement_id_by_uaid  ${agreement_uaid}  ${USERS.users['${username}'].agreement_client}
  Set To Dictionary  ${USERS.users['${username}'].id_map}  ${agreement_uaid}  ${agreement_id}
  [return]  ${agreement_id}


Підготувати клієнт для користувача
  [Arguments]  ${username}
  [Documentation]  Відкрити браузер, створити об’єкти api wrapper і
  ...              ds api wrapper, приєднати їх атрибутами до користувача, тощо
  Log  ${RESOURCE}
  Log  ${API_HOST_URL}
  Log  ${API_VERSION}
  Log  ${DS_HOST_URL}
  ${auth_ds_all}=  get variable value  ${USERS.users.${username}.auth_ds}
  ${auth_ds}=  set variable  ${auth_ds_all.${RESOURCE}}
  Log  ${auth_ds}

  ${ds_config}=  Create Dictionary  host_url=${ds_host_url}  auth_ds=${auth_ds}
  ${plan_api_wrapper}=  prepare_plan_api_wrapper  ${USERS.users['${username}'].api_key}  PLANS  ${API_HOST_URL}  ${API_VERSION}
  ${tender_api_wrapper}=  prepare_api_wrapper  ${USERS.users['${username}'].api_key}  TENDERS  ${API_HOST_URL}  ${API_VERSION}  ${ds_config}
  ${tender_create_wrapper}=  prepare_tender_create_wrapper
  ...  ${USERS.users['${username}'].api_key}
  ...  PLANS
  ...  ${API_HOST_URL}
  ...  ${API_VERSION}
  ...  ${ds_config}
  ${dasu_api_wraper}=  prepare_dasu_api_wrapper
  ...  ${DASU_RESOURCE}
  ...  ${DASU_API_HOST_URL}
  ...  ${DASU_API_VERSION}
  ...  ${USERS.users['${username}'].auth_dasu[0]}
  ...  ${USERS.users['${username}'].auth_dasu[1]}
  ...  ${ds_config}
  ${agreement_wrapper}=  prepare_agreement_api_wrapper  ${USERS.users['${username}'].api_key}  AGREEMENTS  ${API_HOST_URL}  ${API_VERSION}  ${ds_config}
  Set To Dictionary  ${USERS.users['${username}']}  client=${tender_api_wrapper}
  Set To Dictionary  ${USERS.users['${username}']}  plan_client=${plan_api_wrapper}
  Set To Dictionary  ${USERS.users['${username}']}  tender_create_client=${tender_create_wrapper}
  Set To Dictionary  ${USERS.users['${username}']}  agreement_client=${agreement_wrapper}
  Set To Dictionary  ${USERS.users['${username}']}  dasu_client=${dasu_api_wraper}
  Set To Dictionary  ${USERS.users['${username}']}  access_token=${EMPTY}
  ${id_map}=  Create Dictionary
  Set To Dictionary  ${USERS.users['${username}']}  id_map=${id_map}
  Log  ${EDR_HOST_URL}
  Log  ${EDR_VERSION}
  ${edr_wrapper}=  prepare_edr_wrapper  ${EDR_HOST_URL}  ${EDR_VERSION}  ${USERS.users['${username}'].auth_edr[0]}  ${USERS.users['${username}'].auth_edr[1]}
  Set To Dictionary  ${USERS.users['${username}']}  edr_client=${edr_wrapper}
  #Variables for contracting_management module
  ${contract_api_wrapper}=  prepare_contract_api_wrapper  ${USERS.users['${username}'].api_key}  CONTRACTS  ${api_host_url}  ${api_version}  ${ds_config}
  Set To Dictionary  ${USERS.users['${username}']}  contracting_client=${contract_api_wrapper}
  Set To Dictionary  ${USERS.users['${username}']}  contract_access_token=${EMPTY}
  Set To Dictionary  ${USERS.users['${username}']}  agreement_access_token=${EMPTY}
  ${contracts_id_map}=  Create Dictionary
  ${contracts_id_map}=  Create Dictionary
  Set To Dictionary  ${USERS.users['${username}']}  contracts_id_map=${contracts_id_map}
  Log Variables


Завантажити документ
  [Arguments]  ${username}  ${filepath}  ${tender_uaid}
  Log  ${username}
  Log  ${tender_uaid}
  Log  ${filepath}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  upload_document
  ...      ${filepath}
  ...      ${tender.data.id}
  ...      access_token=${tender.access.token}
  Log object data   ${reply}  reply
  #return here is needed to have uploaded doc data in `Завантажити документ в лот` keyword
  [return]  ${reply}


Отримати інформацію із документа
  [Arguments]  ${username}  ${tender_uaid}  ${doc_id}  ${field}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  Log  ${document}
  [Return]  ${document['${field}']}


Отримати інформацію про документ
  [Arguments]  ${username}  ${tender_uaid}  ${doc_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  ${file_properties}=  Call Method  ${USERS.users['${username}'].client}  get_file_properties  ${document.url}  ${document.hash}
  Log  ${file_properties}
  [return]  ${file_properties}


Отримати документ
  [Arguments]  ${username}  ${tender_uaid}  ${doc_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  ${filename}=  download_file_from_url  ${document.url}  ${OUTPUT_DIR}${/}${document.title}
  [return]  ${filename}


Отримати вміст документа
  [Arguments]  ${username}  ${url}
  ${file_name}=  download_file_from_url  ${url}  ${OUTPUT_DIR}${/}file
  ${file_contents}=  Get File  ${OUTPUT_DIR}${/}${file_name}
  [return]  ${file_contents}


Отримати посилання на аукціон для глядача
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}=${Empty}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${object_with_url}=  get_object_by_id  ${tender.data}  ${lot_id}  lots  id
  Log  ${object_with_url}
  ${auctionUrl}=  Get Variable Value  ${object_with_url['auctionUrl']}
  [Return]  ${auctionUrl}


Отримати посилання на аукціон для учасника
  [Arguments]  ${username}  ${tender_uaid}  ${relatedLot}=${Empty}
  ${bid}=  openprocurement_client.Отримати пропозицію  ${username}  ${tender_uaid}
  ${object_with_url}=  get_object_by_id  ${bid.data}  ${relatedLot}  lotValues  relatedLot
  Log  ${object_with_url}
  ${participationUrl}=  Get Variable Value  ${object_with_url['participationUrl']}
  [Return]  ${participationUrl}

##############################################################################
#             Tender operations
##############################################################################

Підготувати дані для оголошення тендера
  [Documentation]  Це слово використовується в майданчиків, тому потрібно, щоб воно було і тут
  [Arguments]  ${username}  ${tender_data}  ${role_name}
  [return]  ${tender_data}


Перевірити наявність повідомлення
  [Arguments]  ${username}  ${msg}
  Log  ${\n}${msg}${\n}  WARN


Створити тендер
  [Arguments]  ${username}  ${tender_data}
  ${file_path}=  Get Variable Value  ${ARTIFACT_FILE}  artifact_plan.yaml
  ${ARTIFACT}=  load_data_from  ${file_path}
  Log  ${ARTIFACT.tender_owner_access_token}
  Log  ${ARTIFACT.tender_id}
  ${tender}=  Call Method  ${USERS.users['${username}'].tender_create_client}  create_tender
  ...      ${ARTIFACT.tender_id}
  ...      ${tender_data}
  ...      access_token=${ARTIFACT.tender_owner_access_token}
  Log  ${tender}
  ${access_token}=  Get Variable Value  ${tender.access.token}
  ${status}=  Set Variable If  'open' in '${MODE}'  active.tendering  ${EMPTY}
  ${status}=  Set Variable If  'below' in '${MODE}'  active.enquiries  ${status}
  ${status}=  Set Variable If  'selection' in '${MODE}'  draft.pending  ${status}
  ${status}=  Set Variable If  '${status}'=='${EMPTY}'  active   ${status}
  Set To Dictionary  ${tender['data']}  status=${status}
  ${tender}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${tender}
  Log  ${\n}${API_HOST_URL}/api/${API_VERSION}/tenders/${tender.data.id}${\n}  WARN
  Set To Dictionary  ${USERS.users['${username}']}   access_token=${access_token}
  Set To Dictionary  ${USERS.users['${username}']}   tender_data=${tender}
  Log   ${USERS.users['${username}'].tender_data}
  [return]  ${tender.data.tenderID}


Створити тендер другого етапу
  [Arguments]  ${username}  ${tender_data}
  ${tender}=  Call Method  ${USERS.users['${username}'].client}  create_tender  ${tender_data}
  Log  ${tender}
  ${access_token}=  Get Variable Value  ${tender.access.token}
  ${status}=  Set Variable If  'open' in '${MODE}'  active.tendering  ${EMPTY}
  ${status}=  Set Variable If  'below' in '${MODE}'  active.enquiries  ${status}
  ${status}=  Set Variable If  'selection' in '${MODE}'  draft.pending  ${status}
  ${status}=  Set Variable If  '${status}'=='${EMPTY}'  active   ${status}
  Set To Dictionary  ${tender['data']}  status=${status}
  ${tender}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${tender}
  Log  ${\n}${API_HOST_URL}/api/${API_VERSION}/tenders/${tender.data.id}${\n}  WARN
  Set To Dictionary  ${USERS.users['${username}']}   access_token=${access_token}
  Set To Dictionary  ${USERS.users['${username}']}   tender_data=${tender}
  Log   ${USERS.users['${username}'].tender_data}
  [return]  ${tender.data.tenderID}


Створити об'єкт моніторингу
  [Arguments]  ${username}  ${monitoring_data}
  ${monitoring}=  Call Method  ${USERS.users['${username}'].dasu_client}  create_monitoring  ${monitoring_data}
  Log  ${monitoring}
  ${access_token}=  Get Variable Value  ${monitoring.access.token}
  Log  ${\n}${DASU_API_HOST_URL}/api/${DASU_API_VERSION}/monitorings/${monitoring.data.id}${\n}  WARN
  Set To Dictionary  ${USERS.users['${username}']}   access_token=${access_token}
  Set To Dictionary  ${USERS.users['${username}']}   monitoring_data=${monitoring}
  Log   ${USERS.users['${username}'].monitoring_data}
  [return]  ${monitoring.data.monitoring_id}


Оприлюднити рішення про початок моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${file_path}  ${monitoring_data}
  ${document}=  Call Method  ${USERS.users['${username}'].dasu_client}  upload_obj_document  ${file_path}
  ${documents}=  Create List
  Append To List  ${documents}  ${document.data}
  Set To Dictionary  ${monitoring_data.data.decision}  documents=${documents}
  Log  ${monitoring_data}
  ${monitoring_id}=  Set Variable  ${USERS.users['${username}'].monitoring_data.data.id}
  ${reply}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_monitoring  ${monitoring_data}  ${monitoring_id}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${dasu_user}'].initial_data.data}  decision=${monitoring_data.data.decision}
  Set To Dictionary  ${USERS.users['${username}']}   monitoring_data=${reply}
  [return]  ${reply}


Створити план
  [Arguments]  ${username}  ${tender_data}
  ${tender}=  Call Method  ${USERS.users['${username}'].plan_client}  create_plan  ${tender_data}
  Log  ${tender}
  ${access_token}=  Get Variable Value  ${tender.access.token}
  ${tender}=  Call Method  ${USERS.users['${username}'].plan_client}  patch_plan
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${tender}
  Log  ${\n}${API_HOST_URL}/api/${API_VERSION}/plans/${tender.data.id}${\n}  WARN
  Set To Dictionary  ${USERS.users['${username}']}   access_token=${access_token}
  Set To Dictionary  ${USERS.users['${username}']}   tender_data=${tender}
  Log   ${USERS.users['${username}'].tender_data}
  [return]  ${tender.data.planID}


Отримати список тендерів
  [Arguments]  ${username}
  @{tenders_feed}=  get_tenders_feed  ${USERS.users['${username}'].client}
  [return]  @{tenders_feed}


Отримати тендер по внутрішньому ідентифікатору
  [Arguments]  ${username}  ${internalid}  ${save_key}=tender_data
  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${internalid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  Set To Dictionary  ${USERS.users['${username}']}  ${save_key}=${tender}
  ${tender}=  munch_dict  arg=${tender}
  Log  ${tender}
  [return]   ${tender}


Пошук тендера по ідентифікатору
  [Arguments]  ${username}  ${tender_uaid}  ${save_key}=tender_data
  ${internalid}=  openprocurement_client.Отримати internal id по UAid  ${username}  ${tender_uaid}
  ${tender}=  openprocurement_client.Отримати тендер по внутрішньому ідентифікатору  ${username}  ${internalid}  ${save_key}
  [return]  ${tender}


Пошук об'єкта моніторингу по ідентифікатору
  [Arguments]  ${username}  ${monitoring_uaid}  ${save_key}=monitoring_data
  ${internalid}=  openprocurement_client.Отримати internal id об'єкта моніторингу по UAid  ${username}  ${monitoring_uaid}
  ${monitoring}=  Call Method  ${USERS.users['${username}'].dasu_client}  get_monitoring  ${internalid}
  Set To Dictionary  ${USERS.users['${username}']}  ${save_key}=${monitoring}
  ${monitoring}=  munch_dict  arg=${monitoring}
  Log  ${monitoring}
  [return]   ${monitoring}


Пошук угоди по ідентифікатору
  [Arguments]  ${username}  ${agreement_uaid}  ${save_key}=agreement_data
  ${internalid}=  openprocurement_client.Отримати internal id угоди по UAid  ${username}  ${agreement_uaid}
  ${agreement}=  Call Method  ${USERS.users['${username}'].agreement_client}  get_agreement  ${internalid}
  Set To Dictionary  ${USERS.users['${username}']}  ${save_key}=${agreement}
  ${agreement}=  munch_dict  arg=${agreement}
  Log  ${agreement}
  [return]   ${agreement}


Отримати доступ до об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${save_key}=monitoring
  ${token}=  Set Variable  ${USERS.users['${username}'].access_token}
  ${internalid}=  openprocurement_client.Отримати internal id об'єкта моніторингу по UAid  ${username}  ${monitoring_uaid}
  ${monitoring}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_credentials  ${internalid}  ${token}
  Set To Dictionary  ${USERS.users['${username}']}  ${save_key}=${monitoring}
  Log  ${USERS.users['${username}'].monitoring_data}
  ${monitoring}=  munch_dict  arg=${monitoring}
  [return]   ${monitoring}


Додати учасника процесу моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${party_data}
  ${monitoring}=  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}
  Log  ${monitoring}
  ${party}=  Call Method  ${USERS.users['${username}'].dasu_client}  create_party  ${monitoring}  ${party_data}
  Log  ${party}
  ${monitoring}=  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}
  Set To Dictionary  ${USERS.users['${username}']}   monitoring_data=${monitoring}
  Log  ${USERS.users['${username}'].monitoring_data}
  [return]  ${monitoring}


Запитати в замовника пояснення
  [Arguments]  ${username}  ${monitoring_uaid}  ${post_data}
  ${monitoring}=  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}
  ${post}=  Call Method  ${USERS.users['${username}'].dasu_client}  create_post  ${monitoring}  ${post_data}
  Log  ${post}
  ${monitoring}=  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}
  Set To Dictionary  ${USERS.users['${username}']}   monitoring_data=${monitoring}
  Log  ${USERS.users['${username}'].monitoring_data}
  [return]  ${monitoring}


Надати відповідь користувачем ДАСУ
  [Arguments]  ${username}  ${monitoring_uaid}  ${post_data}
  ${monitoring}=  openprocurement_client.Запитати в замовника пояснення  ${username}  ${monitoring_uaid}  ${post_data}
  [return]  ${monitoring}


Надати пояснення замовником
  [Arguments]  ${username}  ${monitoring_uaid}  ${post_data}
  Log  ${USERS.users['${username}'].access_token}
  ${monitoring}=  openprocurement_client.Отримати доступ до об'єкта моніторингу  ${username}  ${monitoring_uaid}
  ${post}=  Call Method  ${USERS.users['${username}'].dasu_client}  create_post  ${monitoring}  ${post_data}
  Log  ${post}
  [return]  ${post}


Змінити статус об’єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${status_data}
  ${monitoring_id}=  Set Variable  ${USERS.users['${username}'].monitoring_data.data.id}
  ${reply}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_monitoring  ${status_data}  ${monitoring_id}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${username}']}  monitoring_data=${reply}
  [return]  ${reply}


Оприлюднити рішення про усунення порушення
  [Arguments]  ${username}  ${monitoring_uaid}  ${report_data}
  ${monitoring}=  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_monitoring  ${report_data}  ${monitoring.data.id}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${username}']}  monitoring_data=${reply}
  [return]  ${reply}


Надати звіт про усунення порушення замовником
  [Arguments]  ${username}  ${monitoring_uaid}  ${resolution_data}  ${file_path}
  ${reply}=  Call Method  ${USERS.users['${username}'].dasu_client}  upload_obj_document  ${file_path}
  ${documents}=  Create List
  Append To List  ${documents}  ${reply.data}
  Set To Dictionary  ${resolution_data.data}  documents=${documents}
  Log  ${resolution_data}
  ${resolution}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_eliminationReport  ${USERS.users['${username}'].monitoring}  ${resolution_data}
  Log  ${resolution}
  [return]  ${resolution}


Зазначити, що порушення було оскаржено в суді
  [Arguments]  ${username}  ${monitoring_uaid}  ${appeal_data}  ${file_path}
  ${reply}=  Call Method  ${USERS.users['${username}'].dasu_client}  upload_obj_document  ${filepath}
  ${documents}=  Create List
  Append To List  ${documents}  ${reply.data}
  Set To Dictionary  ${appeal_data.data}  documents=${documents}
  Log  ${appeal_data}
  ${appeal}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_appeal  ${USERS.users['${username}'].monitoring}  ${appeal_data}
  Log  ${appeal}
  [return]  ${appeal}


Надати пояснення замовником з власної ініціативи
  [Arguments]  ${username}  ${monitoring_uaid}  ${post_data}
  ${post}=  Call Method  ${USERS.users['${username}'].dasu_client}  create_post  ${USERS.users['${username}'].monitoring}  ${post_data}
  Log  ${post}
  [return]  ${post}


Надати висновок про наявність/відсутність порушення в тендері
  [Arguments]  ${username}  ${monitoring_uaid}  ${conclusion_data}
  ${monitoring}=  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].dasu_client}  patch_monitoring  ${conclusion_data}  ${monitoring.data.id}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${username}']}   monitoring_data=${reply}
  [return]  ${reply}


Отримати список планів
  [Arguments]  ${username}
  @{plans_feed}=  get_plans_feed  ${USERS.users['${username}'].plan_client}
  [return]  @{plans_feed}


Отримати план по внутрішньому ідентифікатору
  [Arguments]  ${username}  ${internalid}  ${save_key}=tender_data
  ${tender}=  Call Method  ${USERS.users['${username}'].plan_client}  get_plan  ${internalid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  Set To Dictionary  ${USERS.users['${username}']}  ${save_key}=${tender}
  ${tender}=  munch_dict  arg=${tender}
  Log  ${tender}
  [return]   ${tender}


Пошук плану по ідентифікатору
  [Arguments]  ${username}  ${tender_uaid}  ${save_key}=tender_data
  ${internalid}=  openprocurement_client.Отримати internal id плану по UAid  ${username}  ${tender_uaid}
  ${tender}=  openprocurement_client.Отримати план по внутрішньому ідентифікатору  ${username}  ${internalid}  ${save_key}
  [return]  ${tender}


Отримати тендер другого етапу та зберегти його
  [Arguments]  ${username}  ${tender_uaid}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid  ${username}  ${tender_uaid}
  ${response}=  Call Method  ${USERS.users['${username}'].client}  patch_credentials  ${internalid}  ${USERS.users['${username}'].access_token}
  ${tender}=  set_access_key  ${response}  ${response.access.token}
  Set To Dictionary  ${USERS.users['${username}']}   access_token=${response.access.token}
  Set To Dictionary  ${USERS.users['${username}']}  second_stage_data=${response}
  Log  ${tender.data.tenderID}


Оновити сторінку з тендером
  [Arguments]  ${username}  ${tender_uaid}
  openprocurement_client.Пошук тендера по ідентифікатору    ${username}  ${tender_uaid}


Оновити сторінку з планом
  [Arguments]  ${username}  ${tender_uaid}
  openprocurement_client.Пошук плану по ідентифікатору  ${username}  ${tender_uaid}


Оновити сторінку з об'єктом моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}
  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору  ${username}  ${monitoring_uaid}


Отримати інформацію із тендера
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}
  openprocurement_client.Пошук тендера по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}

  ${status}  ${field_value}=  Run keyword and ignore error
  ...      Get from object
  ...      ${USERS.users['${username}'].tender_data.data}
  ...      ${field_name}
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}

  Fail  Field not found: ${field_name}


Отримати інформацію із плану
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}
  openprocurement_client.Пошук плану по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}

  ${status}  ${field_value}=  Run keyword and ignore error
  ...      Get from object
  ...      ${USERS.users['${username}'].tender_data.data}
  ...      ${field_name}
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}

  Fail  Field not found: ${field_name}


Отримати інформацію із об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${field_name}
  openprocurement_client.Пошук об'єкта моніторингу по ідентифікатору
  ...      ${username}
  ...      ${monitoring_uaid}

  ${status}  ${field_value}=  Run keyword and ignore error
  ...      Get from object
  ...      ${USERS.users['${username}'].monitoring_data.data}
  ...      ${field_name}
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}

  Fail  Field not found: ${field_name}


Внести зміни в тендер
  [Arguments]  ${username}  ${tender_uaid}  ${fieldname}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${prev_value}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${fieldname}
  Set_To_Object  ${tender.data}   ${fieldname}   ${fieldvalue}
  ${procurementMethodType}=  Get From Object  ${tender.data}  procurementMethodType
  Run Keyword If  '${procurementMethodType}' == 'aboveThresholdUA' or '${procurementMethodType}' == 'aboveThresholdEU'
  ...      Remove From Dictionary  ${tender.data}  enquiryPeriod
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  ${tender}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Run Keyword And Expect Error  *  Порівняти об'єкти  ${prev_value}  ${tender.data.${fieldname}}
  Set_To_Object   ${USERS.users['${username}'].tender_data}   ${fieldname}   ${fieldvalue}


Внести зміни в план
  [Arguments]  ${username}  ${tender_uaid}  ${fieldname}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук плану по ідентифікатору  ${username}  ${tender_uaid}
  Set_To_Object  ${tender.data}   ${fieldname}   ${fieldvalue}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  ${tender}=  Call Method  ${USERS.users['${username}'].plan_client}  patch_plan
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Set_To_Object   ${USERS.users['${username}'].tender_data}   ${fieldname}   ${fieldvalue}

##############################################################################
#             Item operations
##############################################################################

Додати предмет закупівлі
  [Arguments]  ${username}  ${tender_uaid}  ${item}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  Append To List  ${tender.data['items']}  ${item}
  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Додати предмет закупівлі в план
  [Arguments]  ${username}  ${tender_uaid}  ${item}
  ${tender}=  openprocurement_client.Пошук плану по ідентифікатору  ${username}  ${tender_uaid}
  Append To List  ${tender.data['items']}  ${item}
  Call Method  ${USERS.users['${username}'].plan_client}  patch_plan
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Отримати інформацію із предмету
  [Arguments]  ${username}  ${tender_uaid}  ${item_id}  ${field_name}
  ${field_name}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${item_id}
  Run Keyword And Return  openprocurement_client.Отримати інформацію із тендера  ${username}  ${tender_uaid}  ${field_name}


Видалити предмет закупівлі
  [Arguments]  ${username}  ${tender_uaid}  ${item_id}  ${lot_id}=${Empty}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${item_index}=  get_object_index_by_id  ${tender.data['items']}  ${item_id}
  Remove From List  ${tender.data['items']}  ${item_index}
  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Видалити предмет закупівлі плану
  [Arguments]  ${username}  ${tender_uaid}  ${item_id}  ${lot_id}=${Empty}
  ${tender}=  openprocurement_client.Пошук плану по ідентифікатору  ${username}  ${tender_uaid}
  ${item_index}=  get_object_index_by_id  ${tender.data['items']}  ${item_id}
  Remove From List  ${tender.data['items']}  ${item_index}
  Call Method  ${USERS.users['${username}'].plan_client}  patch_plan
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}

Видалити поле з донора
  [Arguments]  ${username}  ${tender_uaid}  ${funders_index}  ${field_name}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  Delete From Dictionary  ${tender.data['funders'][${funders_index}]}  ${field_name}
  Log  ${tender.data['funders'][${funders_index}]}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Dictionary Should Not Contain Path  ${reply.data['funders'][${funders_index}]}  ${field_name}


Видалити донора
  [Arguments]  ${username}  ${tender_uaid}  ${funders_index}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  Remove From List  ${tender.data.funders}  ${funders_index}
  Log  ${tender}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Додати донора
  [Arguments]  ${username}  ${tender_uaid}  ${funders_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  Set To Dictionary  ${tender.data}  funders=@{EMPTY}
  Append To List  ${tender.data.funders}  ${funders_data}
  Log  ${tender}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}

##############################################################################
#             Lot operations
##############################################################################

Створити лот
  [Arguments]  ${username}  ${tender_uaid}  ${lot}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}   create_lot
  ...      ${tender.data.id}
  ...      ${lot}
  ...      access_token=${tender.access.token}
  #return here is needed to have created lot id in `Створити лот з предметом закупівлі` keyword
  [return]  ${reply}


Створити лот із предметом закупівлі
  [Arguments]  ${username}  ${tender_uaid}  ${lot}  ${item}
  ${reply}=  openprocurement_client.Створити лот  ${username}  ${tender_uaid}  ${lot}
  ${lot_id}=  get_id_from_object  ${lot.data}
  openprocurement_client.Додати предмет закупівлі в лот  ${username}  ${tender_uaid}  ${lot_id}  ${item}


Отримати інформацію із лоту
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}  ${field_name}
  ${field_name}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${lot_id}
  Run Keyword And Return  openprocurement_client.Отримати інформацію із тендера  ${username}  ${tender_uaid}  ${field_name}


Змінити лот
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}   ${fieldname}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  ${lot}=  Create Dictionary  data=${tender.data.lots[${lot_index}]}
  Set_To_Object   ${lot.data}   ${fieldname}   ${fieldvalue}
  ${reply}=  Call Method   ${USERS.users['${username}'].client}  patch_lot
  ...      ${tender.data.id}
  ...      ${lot}
  ...      ${lot.data.id}
  ...      access_token=${tender.access.token}


Додати предмет закупівлі в лот
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}  ${item}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  ${lot_id}=  Get Variable Value  ${tender.data.lots[${lot_index}].id}
  Set_To_Object   ${item}   relatedLot   ${lot_id}
  Append To List   ${tender.data['items']}   ${item}
  Call Method   ${USERS.users['${username}'].client}   patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Завантажити документ в лот
  [Arguments]  ${username}  ${filepath}  ${tender_uaid}  ${lot_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  ${lot_id}=  Get Variable Value  ${tender.data.lots[${lot_index}].id}
  ${doc}=  openprocurement_client.Завантажити документ  ${username}  ${filepath}  ${tender_uaid}
  ${lot_doc}=  test_lot_document_data  ${doc}  ${lot_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_document
  ...      ${tender.data.id}
  ...      ${lot_doc}
  ...      ${lot_doc.data.id}
  ...      access_token=${tender.access.token}


Видалити лот
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  ${lot}=  Create Dictionary  data=${tender.data.lots[${lot_index}]}
  :FOR  ${item}  IN  @{tender.data['items']}
  \  ${item_id}=  get_id_from_object  ${item}
  \  Run Keyword If  '${item.relatedLot}'=='${lot.data.id}'
  \  ...     openprocurement_client.Видалити предмет закупівлі  ${username}  ${tender_uaid}  ${item_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}   delete_lot   ${tender}    ${lot}


Скасувати лот
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}  ${cancellation_reason}  ${document}  ${new_description}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  ${lot_id}=  Get Variable Value  ${tender.data.lots[${lot_index}].id}
  ${data}=  Create dictionary
  ...      reason=${cancellation_reason}
  ...      cancellationOf=lot
  ...      relatedLot=${lot_id}
  ${cancellation_data}=  Create dictionary  data=${data}
  ${cancellation_data}=  munch_dict  arg=${cancellation_data}
  ${cancel_reply}=  Call Method  ${USERS.users['${username}'].client}  create_cancellation  ${tender}  ${cancellation_data}
  ${cancellation_id}=  Set variable  ${cancel_reply.data.id}

  ${document_id}=  openprocurement_client.Завантажити документацію до запиту на скасування  ${username}  ${tender_uaid}  ${cancellation_id}  ${document}

  openprocurement_client.Змінити опис документа в скасуванні  ${username}  ${tender_uaid}  ${cancellation_id}  ${document_id}  ${new_description}

  openprocurement_client.Підтвердити скасування закупівлі  ${username}  ${tender_uaid}  ${cancellation_id}


Отримати інформацію з документа до лоту
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}  ${doc_id}  ${field}
  openprocurement_client.Отримати інформацію з документа  ${username}  ${tender_uaid}  ${doc_id}  ${field}


Отримати документ до лоту
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}  ${doc_id}
  Run Keyword And Return  openprocurement_client.Отримати документ  ${username}  ${tender_uaid}  ${doc_id}

##############################################################################
#             Feature operations
##############################################################################

Додати неціновий показник на тендер
  [Arguments]  ${username}  ${tender_uaid}  ${feature}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  Append To List  ${tender.data['features']}  ${feature}
  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Додати неціновий показник на предмет
  [Arguments]  ${username}  ${tender_uaid}  ${feature}  ${item_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${item_index}=  get_object_index_by_id  ${tender.data['items']}  ${item_id}
  ${item_id}=  Get Variable Value  ${tender.data['items'][${item_index}].id}
  Set To Dictionary  ${feature}  relatedItem=${item_id}
  Append To List  ${tender.data['features']}  ${feature}
  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Додати неціновий показник на лот
  [Arguments]  ${username}  ${tender_uaid}  ${feature}  ${lot_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data['lots']}  ${lot_id}
  ${lot_id}=  Get Variable Value  ${tender.data['lots'][${lot_index}].id}
  Set To Dictionary  ${feature}  relatedItem=${lot_id}
  Append To List  ${tender.data['features']}  ${feature}
  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


Отримати інформацію із нецінового показника
  [Arguments]  ${username}  ${tender_uaid}  ${feature_id}  ${field_name}
  ${field_name}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${feature_id}
  Run Keyword And Return  openprocurement_client.Отримати інформацію із тендера  ${username}  ${tender_uaid}  ${field_name}


Видалити неціновий показник
  [Arguments]  ${username}  ${tender_uaid}  ${feature_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${feature_index}=  get_object_index_by_id  ${tender.data['features']}  ${feature_id}
  Remove From List  ${tender.data['features']}  ${feature_index}
  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}


##############################################################################
#             Questions
##############################################################################

Задати запитання на предмет
  [Arguments]  ${username}  ${tender_uaid}  ${item_id}  ${question}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${item_index}=  get_object_index_by_id  ${tender.data['items']}  ${item_id}
  ${item_id}=  Get Variable Value  ${tender.data['items'][${item_index}].id}
  ${question}=  test_related_question  ${question}  item  ${item_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_question
  ...      ${tender.data.id}
  ...      ${question}
  ...      access_token=${tender.access.token}


Задати запитання на лот
  [Arguments]  ${username}  ${tender_uaid}  ${lot_id}  ${question}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  ${lot_id}=  Get Variable Value  ${tender.data.lots[${lot_index}].id}
  ${question}=  test_related_question  ${question}  lot  ${lot_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_question
  ...      ${tender.data.id}
  ...      ${question}
  ...      access_token=${tender.access.token}


Задати запитання на тендер
  [Arguments]  ${username}  ${tender_uaid}  ${question}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_question
  ...      ${tender.data.id}
  ...      ${question}
  ...      access_token=${tender.access.token}


Отримати інформацію із запитання
  [Arguments]  ${username}  ${tender_uaid}  ${question_id}  ${field_name}
  ${field_name}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${question_id}
  Run Keyword And Return  openprocurement_client.Отримати інформацію із тендера  ${username}  ${tender_uaid}  ${field_name}


Відповісти на запитання
  [Arguments]  ${username}  ${tender_uaid}  ${answer_data}  ${question_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  ${answer_data.data.id}=  openprocurement_client.Отримати інформацію із запитання  ${username}  ${tender_uaid}  ${question_id}  id
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_question
  ...      ${tender.data.id}
  ...      ${answer_data}
  ...      ${answer_data.data.id}
  ...      access_token=${tender.access.token}

##############################################################################
#             Claims
##############################################################################

Отримати internal id по UAid для скарги
  [Arguments]  ${tender}  ${complaintID}
  ${complaint_internal_id}=  get_complaint_internal_id  ${tender}  ${complaintID}
  [Return]  ${complaint_internal_id}

#Ключові слова типу `* про виправлення умов закупівлі` додані для сумісності з майданчиками

Створити чернетку вимоги про виправлення умов закупівлі
  [Documentation]  Створює вимогу у статусі "draft"
  [Arguments]  ${username}  ${tender_uaid}  ${claim}
  Log  ${claim}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}
  ${reply}=  Call Method
  ...      ${USERS.users['${username}'].client}
  ...      create_complaint
  ...      ${tender.data.id}
  ...      ${claim}
  ...      access_token=${tender.access.token}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${username}']}  complaint_access_token=${reply.access.token}
  [return]  ${reply.data.complaintID}


Створити чернетку вимоги про виправлення умов лоту
  [Documentation]  Створює вимогу у статусі "draft"
  [Arguments]  ${username}  ${tender_uaid}  ${claim}  ${lot_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}
  ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  Set to dictionary  ${claim.data}  relatedLot=${tender.data.lots[${lot_index}].id}
  ${complaintID}=  openprocurement_client.Створити чернетку вимоги про виправлення умов закупівлі
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${claim}
  [return]  ${complaintID}


Створити чернетку вимоги про виправлення визначення переможця
  [Documentation]  Створює вимогу у статусі "draft"
  [Arguments]  ${username}  ${tender_uaid}  ${claim}  ${award_index}
  Log  ${claim}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  ${reply}=  Call Method
  ...      ${USERS.users['${username}'].client}
  ...      create_award_complaint
  ...      ${tender.data.id}
  ...      ${claim}
  ...      ${tender.data.awards[${award_index}].id}
  ...      access_token=${tender.access.token}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${username}']}  complaint_access_token=${reply.access.token}
  Log  ${USERS.users['${username}'].complaint_access_token}
  [return]  ${reply.data.complaintID}


Створити вимогу про виправлення умов закупівлі
  [Documentation]  Створює вимогу у статусі "claim"
  ...      Можна створити вимогу як з документацією, так і без неї
  [Arguments]  ${username}  ${tender_uaid}  ${claim}  ${document}=${None}

  ${complaintID}=  openprocurement_client.Створити чернетку вимоги про виправлення умов закупівлі
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${claim}

  ${status}=  Run keyword and return status  Should not be equal  ${document}  ${None}
  Log  ${status}
  Run keyword if  ${status} == ${True}  openprocurement_client.Завантажити документацію до вимоги
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${document}

  ${data}=  Create Dictionary  status=claim
  ${confirmation_data}=  Create Dictionary  data=${data}
  openprocurement_client.Подати вимогу
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${confirmation_data}
  [return]  ${complaintID}


Створити вимогу про виправлення умов лоту
  [Documentation]  Створює вимогу у статусі "claim"
  ...      Можна створити вимогу як з документацією, так і без неї
  ...      Якщо lot_index == None, то створюється вимога про виправлення умов тендера.
  [Arguments]  ${username}  ${tender_uaid}  ${claim}  ${lot_id}  ${document}=${None}
  ${complaintID}=  openprocurement_client.Створити чернетку вимоги про виправлення умов лоту
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${claim}
  ...      ${lot_id}

  ${status}=  Run keyword and return status  Should not be equal  ${document}  ${None}
  Log  ${status}
  Run keyword if  ${status} == ${True}  openprocurement_client.Завантажити документацію до вимоги
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${document}

  ${data}=  Create Dictionary  status=claim
  ${confirmation_data}=  Create Dictionary  data=${data}
  openprocurement_client.Подати вимогу
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${confirmation_data}

  [return]  ${complaintID}


Створити вимогу про виправлення визначення переможця
  [Documentation]  Створює вимогу у статусі "claim"
  ...      Можна створити вимогу як з документацією, так і без неї
  [Arguments]  ${username}  ${tender_uaid}  ${claim}  ${award_index}  ${document}=${None}
  ${complaintID}=  openprocurement_client.Створити чернетку вимоги про виправлення визначення переможця
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${claim}
  ...      ${award_index}

  ${status}=  Run keyword and return status  Should not be equal  ${document}  ${None}
  Log  ${status}
  Run keyword if  ${status} == ${True}  openprocurement_client.Завантажити документацію до вимоги про виправлення визначення переможця
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${award_index}
  ...      ${document}

  ${status}=  Set variable  claim
  ${data}=  Create Dictionary  status=${status}
  ${confirmation_data}=  Create Dictionary  data=${data}
  openprocurement_client.Подати вимогу про виправлення визначення переможця
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${award_index}
  ...      ${confirmation_data}

  [return]  ${complaintID}


Створити скаргу про виправлення визначення переможця
  [Documentation]  Створює скаргу у статусі "pending"
  ...      Можна створити скаргу як з документацією, так і без неї
  [Arguments]  ${username}  ${tender_uaid}  ${claim}  ${award_index}  ${document}=${None}
  ${complaintID}=  openprocurement_client.Створити чернетку вимоги про виправлення визначення переможця
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${claim}
  ...      ${award_index}

  ${status}=  Run keyword and return status  Should not be equal  ${document}  ${None}
  Log  ${status}
  Run keyword if  ${status} == ${True}  openprocurement_client.Завантажити документацію до вимоги про виправлення визначення переможця
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${award_index}
  ...      ${document}

  ${status}=  Set variable  pending
  ${data}=  Create Dictionary  status=${status}
  ${confirmation_data}=  Create Dictionary  data=${data}
  openprocurement_client.Подати вимогу про виправлення визначення переможця
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${award_index}
  ...      ${confirmation_data}

  [return]  ${complaintID}


Завантажити документацію до вимоги
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${document}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  upload_complaint_document
  ...      ${document}
  ...      ${tender.data.id}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${tender}
  Log  ${reply}


Завантажити документацію до вимоги про виправлення визначення переможця
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${award_index}  ${document}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}
  Log  ${USERS.users['${username}'].complaint_access_token}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  upload_award_complaint_document
  ...      ${document}
  ...      ${tender.data.id}
  ...      ${tender.data.awards[${award_index}].id}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${tender}
  Log  ${reply}


Подати вимогу
  [Documentation]  Переводить вимогу зі статусу "draft" у статус "claim"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${confirmation_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${confirmation_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_complaint
  ...      ${tender.data.id}
  ...      ${confirmation_data}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${tender}
  Log  ${reply}


Подати вимогу про виправлення визначення переможця
  [Documentation]  Переводить вимогу зі статусу "draft" у статус "claim"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${award_index}  ${confirmation_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору
  ...      ${username}
  ...      ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${confirmation_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award_complaint
  ...      ${tender.data.id}
  ...      ${confirmation_data}
  ...      ${tender.data.awards[${award_index}].id}
  ...      ${complaint_internal_id}
  ...      access_token=${tender.access.token}
  Log  ${tender}
  Log  ${reply}


Відповісти на вимогу про виправлення умов закупівлі
  [Documentation]  Переводить вимогу зі статусу "claim" у статус "answered"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${answer_data}
  openprocurement_client.Відповісти на вимогу про виправлення умов лоту
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${complaintID}
  ...      ${answer_data}


Відповісти на вимогу про виправлення умов лоту
  [Documentation]  Переводить вимогу зі статусу "claim" у статус "answered"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${answer_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${answer_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_complaint
  ...      ${tender.data.id}
  ...      ${answer_data}
  ...      ${complaint_internal_id}
  ...      access_token=${tender.access.token}
  log  ${tender}
  Log  ${reply}


Відповісти на вимогу про виправлення визначення переможця
  [Documentation]  Переводить вимогу зі статусу "claim" у статус "answered"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${answer_data}  ${award_index}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${answer_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award_complaint
  ...      ${tender.data.id}
  ...      ${answer_data}
  ...      ${tender.data.awards[${award_index}].id}
  ...      ${complaint_internal_id}
  ...      access_token=${tender.access.token}
  log  ${tender}
  Log  ${reply}


Підтвердити вирішення вимоги про виправлення умов закупівлі
  [Documentation]  Переводить вимогу зі статусу "answered" у статус "resolved"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${confirmation_data}
  openprocurement_client.Підтвердити вирішення вимоги про виправлення умов лоту  ${username}  ${tender_uaid}  ${complaintID}  ${confirmation_data}


Підтвердити вирішення вимоги про виправлення умов лоту
  [Documentation]  Переводить вимогу зі статусу "answered" у статус "resolved"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${confirmation_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${confirmation_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_complaint
  ...      ${tender.data.id}
  ...      ${confirmation_data}
  ...      ${complaint_internal_id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Підтвердити вирішення вимоги про виправлення визначення переможця
  [Documentation]  Переводить вимогу зі статусу "answered" у статус "resolved"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${confirmation_data}  ${award_index}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${confirmation_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award_complaint
  ...      ${tender.data.id}
  ...      ${confirmation_data}
  ...      ${tender.data.awards[${award_index}].id}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${reply}


Скасувати вимогу про виправлення умов закупівлі
  [Documentation]  Переводить вимогу в статус "canceled"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${cancellation_data}
  openprocurement_client.Скасувати вимогу про виправлення умов лоту  ${username}  ${tender_uaid}  ${complaintID}  ${cancellation_data}


Скасувати вимогу про виправлення умов лоту
  [Documentation]  Переводить вимогу в статус "canceled"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${cancellation_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${cancellation_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_complaint
  ...      ${tender.data.id}
  ...      ${cancellation_data}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${reply}


Скасувати вимогу про виправлення визначення переможця
  [Documentation]  Переводить вимогу в статус "canceled"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${cancellation_data}  ${award_index}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${cancellation_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award_complaint
  ...      ${tender.data.id}
  ...      ${cancellation_data}
  ...      ${tender.data.awards[${award_index}].id}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${reply}


Перетворити вимогу про виправлення умов закупівлі в скаргу
  [Documentation]  Переводить вимогу у статус "pending"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${escalating_data}
  openprocurement_client.Перетворити вимогу про виправлення умов лоту в скаргу  ${username}  ${tender_uaid}  ${complaintID}  ${escalating_data}


Перетворити вимогу про виправлення умов лоту в скаргу
  [Documentation]  Переводить вимогу у статус "pending"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${escalating_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${escalating_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_complaint
  ...      ${tender.data.id}
  ...      ${escalating_data}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${reply}


Перетворити вимогу про виправлення визначення переможця в скаргу
  [Documentation]  Переводить вимогу у статус "pending"
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${escalating_data}  ${award_index}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].complaint_access_token}
  ${complaint_internal_id}=  openprocurement_client.Отримати internal id по UAid для скарги  ${tender}  ${complaintID}
  Set To Dictionary  ${escalating_data.data}  id=${complaint_internal_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award_complaint
  ...      ${tender.data.id}
  ...      ${escalating_data}
  ...      ${tender.data.awards[${award_index}].id}
  ...      ${complaint_internal_id}
  ...      access_token=${USERS.users['${username}'].complaint_access_token}
  Log  ${reply}


Отримати інформацію із скарги
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${field_name}  ${award_index}=${None}
  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${complaints}=  Get Variable Value  ${USERS.users['${username}'].tender_data.data.awards[${award_index}].complaints}  ${USERS.users['${username}'].tender_data.data.complaints}
  ${complaint_index}=  get_complaint_index_by_complaintID  ${complaints}  ${complaintID}
  ${field_value}=  Get Variable Value  ${complaints[${complaint_index}]['${field_name}']}
  [Return]  ${field_value}


Отримати інформацію із документа до скарги
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${doc_id}  ${field_name}  ${award_id}=${None}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  Log  ${document}
  [Return]  ${document['${field_name}']}


Отримати документ до скарги
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${doc_id}  ${award_id}=${None}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  ${filename}=  download_file_from_url  ${document.url}  ${OUTPUT_DIR}${/}${document.title}
  [return]  ${filename}

##############################################################################
#             Bid operations
##############################################################################

Перевірити учасника за ЄДРПОУ
  [Arguments]  ${username}  ${edrpou}
  ${reply}=  Call Method  ${USERS.users['${username}'].edr_client}  verify_member  ${edrpou}
  Log  ${reply}


Подати цінову пропозицію
  [Arguments]  ${username}  ${tender_uaid}  ${bid}  ${lots_ids}=${None}  ${features_ids}=${None}
  ${verify_response}=  Run As  ${username}  Перевірити учасника за ЄДРПОУ  ${bid.data.tenderers[0].identifier.id}
  Log  ${verify_response}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${lots_ids}=  Run Keyword IF  ${lots_ids}  Set Variable  ${lots_ids}
  ...     ELSE  Create List
  : FOR    ${index}    ${lot_id}    IN ENUMERATE    @{lots_ids}
  \    ${lot_index}=  get_object_index_by_id  ${tender.data.lots}  ${lot_id}
  \    ${lot_id}=  Get Variable Value  ${tender.data.lots[${lot_index}].id}
  \    Set To Dictionary  ${bid.data.lotValues[${index}]}  relatedLot=${lot_id}
  ${features_ids}=  Run Keyword IF  ${features_ids}  Set Variable  ${features_ids}
  ...     ELSE  Create List
  : FOR    ${index}    ${feature_id}    IN ENUMERATE    @{features_ids}
  \    ${feature_index}=  get_object_index_by_id  ${tender.data.features}  ${feature_id}
  \    ${code}=  Get Variable Value  ${tender.data.features[${feature_index}].code}
  \    Set To Dictionary  ${bid.data.parameters[${index}]}  code=${code}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_bid  ${tender.data.id}  ${bid}
  Log  ${reply}
  Set To Dictionary  ${USERS.users['${username}']}  bid_access_token=${reply.access.token}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].bid_access_token}
  ${procurementMethodType}=  Get variable value  ${USERS.users['${username}'].tender_data.data.procurementMethodType}
  ${methods}=  Create List  competitiveDialogueUA  competitiveDialogueEU  competitiveDialogueEU.stage2  aboveThresholdEU  closeFrameworkAgreementUA  esco
  ${status}=  Set Variable If  '${procurementMethodType}' in ${methods}  pending  active
  Set To Dictionary  ${reply['data']}  status=${status}
  ${reply_active}=  Call Method  ${USERS.users['${username}'].client}  patch_bid
  ...     ${tender.data.id}
  ...     ${reply}
  ...     ${reply.data.id}
  ...     access_token=${tender.access.token}
  Set To Dictionary  ${USERS.users['${username}']}  access_token=${reply['access']['token']}
  Set To Dictionary   ${USERS.users['${username}'].bidresponses['bid'].data}  id=${reply['data']['id']}
  Log  ${reply_active}
  Set To Dictionary  ${USERS.users['${username}']}  bid_id=${reply['data']['id']}
  Log  ${reply}


Змінити цінову пропозицію
  [Arguments]  ${username}  ${tender_uaid}  ${fieldname}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${bid}=  openprocurement_client.Отримати пропозицію  ${username}  ${tender_uaid}
  Set_To_Object  ${bid.data}   ${fieldname}   ${fieldvalue}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}']['access_token']}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_bid
  ...     ${tender.data.id}
  ...     ${bid}
  ...     ${bid.data.id}
  ...     access_token=${tender.access.token}
  Log  ${reply}


Скасувати цінову пропозицію
  [Arguments]  ${username}  ${tender_uaid}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${bid_id}=  openprocurement_client.Отримати інформацію із пропозиції  ${username}  ${tender_uaid}  id
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  delete_bid
  ...     ${tender.data.id}
  ...     ${bid_id}
  ...     access_token=${USERS.users['${username}']['access_token']}
  Log  ${reply}


Завантажити документ в ставку
  [Arguments]  ${username}  ${path}  ${tender_uaid}  ${doc_name}=documents  ${doc_type}=${None}
  ${bid_id}=  Get Variable Value   ${USERS.users['${username}'].bidresponses['bid'].data.id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}']['access_token']}
  ${response}=  Call Method  ${USERS.users['${username}'].client}  upload_bid_document
  ...      ${path}
  ...      ${tender.data.id}
  ...      ${bid_id}
  ...      doc_type=${doc_type}
  ...      access_token=${tender.access.token}
  ...      subitem_name=${doc_name}
  ${uploaded_file} =  Create Dictionary
  ...      filepath=${path}
  ...      upload_response=${response}
  Log object data   ${uploaded_file}
  [return]  ${uploaded_file}


Змінити документ в ставці
  [Arguments]  ${username}  ${tender_uaid}  ${path}  ${doc_id}  ${doc_type}=documents
  ${bid_id}=  Get Variable Value   ${USERS.users['${username}'].bidresponses['bid'].data.id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}']['access_token']}
  ${bid}=  openprocurement_client.Отримати пропозицію  ${username}  ${tender_uaid}
  ${bid_doc}=  get_document_by_id  ${bid.data}  ${doc_id}
  ${response}=  Call Method  ${USERS.users['${username}'].client}  update_bid_document
  ...      ${path}
  ...      ${tender.data.id}
  ...      ${bid_id}
  ...      ${bid_doc['id']}
  ...      access_token=${tender.access.token}
  ${uploaded_file} =  Create Dictionary
  ...      filepath=${path}
  ...      upload_response=${response}
  Log object data   ${uploaded_file}
  [return]  ${uploaded_file}


Змінити документацію в ставці
  [Arguments]  ${username}  ${tender_uaid}  ${doc_data}  ${doc_id}
  ${bid_id}=  Get Variable Value   ${USERS.users['${username}'].bidresponses['bid'].data.id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}']['access_token']}
  ${bid}=  openprocurement_client.Отримати пропозицію  ${username}  ${tender_uaid}
  ${bid_doc}=  get_document_by_id  ${bid.data}  ${doc_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_bid_document
  ...      ${tender.data.id}
  ...      ${doc_data}
  ...      ${bid_id}
  ...      ${bid_doc['id']}
  ...      access_token=${tender.access.token}


Отримати пропозицію
  [Arguments]  ${username}  ${tender_uaid}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${bid_id}=  Get Variable Value  ${USERS.users['${username}'].bid_id}
  ${token}=  Get Variable Value  ${USERS.users['${username}'].access_token}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  get_bid
  ...      ${tender.data.id}
  ...      ${bid_id}
  ...      access_token=${token}
  ${reply}=  munch_dict  arg=${reply}
  [return]  ${reply}


Отримати інформацію із пропозиції
  [Arguments]  ${username}  ${tender_uaid}  ${field}
  ${bid}=  openprocurement_client.Отримати пропозицію  ${username}  ${tender_uaid}
  [return]  ${bid.data.${field}}


##############################################################################
#             Qualification operations
##############################################################################


Отримати список документів по прекваліфікації
  [Documentation]
  ...       [Arguments] Username, tender uaid, qualification id
  ...       [Description] Return all qualification documents by id
  ...       [Return] Reply from API
  [Arguments]  ${username}  ${tender_uaid}  ${qualification_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${doc_list}=  Call Method  ${USERS.users['${username}'].client}  get_qualification_documents
  ...      ${tender.data.id}
  ...      ${qualification_id}
  ...      access_token=${tender.access.token}
  Log  ${doc_list}
  [Return]  ${doc_list}


Отримати список документів по кваліфікації
  [Documentation]
  ...       [Arguments] Username, tender uaid, award id
  ...       [Description] Return all awards documents by id
  ...       [Return] Reply from API
  [Arguments]  ${username}  ${tender_uaid}  ${award_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${doc_list}=  Call Method  ${USERS.users['${username}'].client}  get_awards_documents
  ...      ${tender.data.id}
  ...      ${award_id}
  ...      access_token=${tender.access.token}
  Log  ${doc_list}
  [Return]  ${doc_list}


Отримати останній документ прекваліфікації з типом registerExtract
  [Documentation]
  ...       [Arguments]  Username, tender uaid, qualification id
  ...       [Description] Check documentType in last pre-quailfication document
  ...       [Return] Last document from pre-quailfication
  [Arguments]  ${username}  ${tender_uaid}  ${qualification_id}
  ${docs}=  Run As  ${username}  Отримати список документів по прекваліфікації  ${tender_uaid}  ${qualification_id}
  :FOR  ${item}  IN  @{docs['data']}
  \  ${status}  ${_}=  Run Keyword And Ignore Error  Dictionary Should Contain Key  ${item}  documentType
  \  Run Keyword If  '${status}' == 'PASS'  Exit For Loop
  Log  ${item}
  [Return]  ${item}


Отримати останній документ кваліфікації з типом registerExtract
  [Documentation]
  ...       [Arguments]  Username, tender uaid, award id
  ...       [Description] Check documentType in last award document
  ...       [Return] Last document for
  [Arguments]  ${username}  ${tender_uaid}  ${award_id}
  ${docs}=  Run As  ${username}  Отримати список документів по кваліфікації  ${tender_uaid}  ${award_id}
  :FOR  ${item}  IN  @{docs['data']}
  \  ${status}  ${_}=  Run Keyword And Ignore Error  Dictionary Should Contain Key  ${item}  documentType
  \  Run Keyword If  '${status}' == 'PASS'  Exit For Loop
  Log  ${item}
  [Return]  ${item}


Завантажити документ рішення кваліфікаційної комісії
  [Documentation]
  ...      [Arguments] Username, tender uaid, qualification number and document to upload
  ...      [Description] Find tender using uaid,  and call upload_qualification_document
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${document}  ${tender_uaid}  ${award_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${doc}=  Call Method  ${USERS.users['${username}'].client}  upload_award_document
  ...      ${document}
  ...      ${tender.data.id}
  ...      ${tender.data.awards[${award_num}].id}
  ...      access_token=${tender.access.token}
  Log  ${doc}


Підтвердити постачальника
  [Documentation]
  ...      [Arguments] Username, tender uaid and number of the award to confirm
  ...      Find tender using uaid, create dict with confirmation data and call patch_award
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${award_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${award}=  create_data_dict  data.status  active
  Set To Dictionary  ${award.data}  id=${tender.data.awards[${award_num}].id}
  Run Keyword IF  'open' in '${MODE}'
  ...      Set To Dictionary  ${award.data}
  ...      qualified=${True}
  ...      eligible=${True}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award
  ...      ${tender.data.id}
  ...      ${award}
  ...      ${award.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Дискваліфікувати постачальника
  [Documentation]
  ...      [Arguments] Username, tender uaid and award number
  ...      [Description] Find tender using uaid, create data dict with unsuccessful status and call patch_award
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}  ${award_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${award}=  create_data_dict   data.status  unsuccessful
  Set To Dictionary  ${award.data}  id=${tender.data.awards[${award_num}].id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award
  ...      ${tender.data.id}
  ...      ${award}
  ...      ${award.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}
  [Return]  ${reply}


Скасування рішення кваліфікаційної комісії
  [Documentation]
  ...      [Arguments] Username, tender uaid and award number
  ...      [Description] Find tender using uaid, create data dict with unsuccessful status and call patch_award
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}  ${award_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${award}=  create_data_dict   data.status  cancelled
  Set To Dictionary  ${award.data}  id=${tender.data.awards[${award_num}].id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award
  ...      ${tender.data.id}
  ...      ${award}
  ...      ${award.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}

##############################################################################
#             Limited procurement
##############################################################################

Створити постачальника, додати документацію і підтвердити його
  [Documentation]
  ...      [Arguments] Username, tender uaid and supplier data
  ...      Find tender using uaid and call create_award, add documentation to that award and update his status to active
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${supplier_data}  ${document}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_award  ${tender}  ${supplier_data}
  Log  ${reply}
  ${supplier_number}=  Set variable  0
  openprocurement_client.Завантажити документ рішення кваліфікаційної комісії  ${username}  ${document}  ${tender_uaid}  ${supplier_number}
  openprocurement_client.Підтвердити постачальника  ${username}  ${tender_uaid}  ${supplier_number}


Скасувати закупівлю
  [Documentation]
  ...      [Arguments] Username, tender uaid, cancellation reason,
  ...      document and new description of document
  ...      [Description] Find tender using uaid, set cancellation reason, get data from cancel_tender
  ...      and call create_cancellation
  ...      After that add document to cancellation and change description of document
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${cancellation_reason}  ${document}  ${new_description}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${data}=  Create dictionary  reason=${cancellation_reason}
  ${cancellation_data}=  Create dictionary  data=${data}
  ${cancellation_data}=  munch_dict  arg=${cancellation_data}
  ${cancel_reply}=  Call Method  ${USERS.users['${username}'].client}  create_cancellation
  ...      ${tender.data.id}
  ...      ${cancellation_data}
  ...      access_token=${tender.access.token}
  ${cancellation_id}=  Set variable  ${cancel_reply.data.id}

  ${document_id}=  openprocurement_client.Завантажити документацію до запиту на скасування  ${username}  ${tender_uaid}  ${cancellation_id}  ${document}

  openprocurement_client.Змінити опис документа в скасуванні  ${username}  ${tender_uaid}  ${cancellation_id}  ${document_id}  ${new_description}

  openprocurement_client.Підтвердити скасування закупівлі  ${username}  ${tender_uaid}  ${cancellation_id}


Завантажити документацію до запиту на скасування
  [Documentation]
  ...      [Arguments] Username, tender uaid, cancellation id and document to upload
  ...      [Description] Find tender using uaid, and call upload_cancellation_document
  ...      [Return] ID of added document
  [Arguments]  ${username}  ${tender_uaid}  ${cancellation_id}  ${document}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${doc_reply}=  Call Method  ${USERS.users['${username}'].client}  upload_cancellation_document
  ...      ${document}
  ...      ${tender.data.id}
  ...      ${cancellation_id}
  ...      access_token=${tender.access.token}
  Log  ${doc_reply}
  [Return]  ${doc_reply.data.id}


Змінити опис документа в скасуванні
  [Documentation]
  ...      [Arguments] Username, tender uaid, cancellation id, document id and new description of document
  ...      [Description] Find tender using uaid, create dict with data about description and call
  ...      patch_cancellation_document
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${cancellation_id}  ${document_id}  ${new_description}
  ${field}=  Set variable  description
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${temp}=  Create Dictionary  ${field}=${new_description}
  ${data}=  Create Dictionary  data=${temp}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_cancellation_document
  ...      ${tender.data.id}
  ...      ${data}
  ...      ${cancellation_id}
  ...      ${document_id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Підтвердити скасування закупівлі
  [Documentation]
  ...      [Arguments] Username, tender uaid, cancellation number
  ...      Find tender using uaid, get cancellation test_confirmation data and call patch_cancellation
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${cancel_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${data}=  test_confirm_data  ${cancel_id}
  Log  ${data}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_cancellation
  ...      ${tender.data.id}
  ...      ${data}
  ...      ${data.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Отримати інформацію із документа до скасування
  [Arguments]  ${username}  ${tender_uaid}  ${cancel_id}  ${doc_id}  ${field_name}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  Log  ${document}
  [Return]  ${document['${field_name}']}


Отримати документ до скасування
  [Arguments]  ${username}  ${tender_uaid}  ${cancel_id}  ${doc_id}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  ${filename}=  download_file_from_url  ${document.url}  ${OUTPUT_DIR}${/}${document.title}
  [return]  ${filename}


Скасувати план
  [Arguments]  ${username}  ${tender_uaid}  ${cancellation_reason}
  ${tender}=  openprocurement_client.Пошук плану по ідентифікатору  ${username}  ${tender_uaid}
  ${data}=  Create dictionary  cancellation=${cancellation_reason}
  ${cancellation_data}=  Create dictionary  data=${data}
  ${cancellation_data}=  munch_dict  arg=${cancellation_data}
  ${cancel_reply}=  Call Method  ${USERS.users['${username}'].plan_client}  patch_plan
  ...      ${tender.data.id}
  ...      ${cancellation_data}
  ...      access_token=${tender.access.token}
  ${cancellation_id}=  Set variable  ${cancel_reply.data.id}
  openprocurement_client.Підтвердити скасування плану  ${username}  ${tender_uaid}  ${cancellation_id}


Підтвердити скасування плану
  [Documentation]
  ...      [Arguments] Username, tender uaid
  ...      Find plan using uaid, get cancellation test_confirmation data and call patch_plan
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${cancellation_id}
  ${tender}=  openprocurement_client.Пошук плану по ідентифікатору  ${username}  ${tender_uaid}
  ${data}=  test_confirm_plan_cancel_data
  Log  ${data}
  ${reply}=  Call Method  ${USERS.users['${username}'].plan_client}  patch_plan
  ...      ${tender.data.id}
  ...      ${data}
  ...      access_token=${tender.access.token}
  Log  ${reply}

##############################################################################
#             OpenUA procedure
##############################################################################

Підтвердити кваліфікацію
  [Documentation]
  ...      [Arguments] Username, tender uaid and qualification number
  ...      [Description] Find tender using uaid, create data dict with active status and call patch_qualification
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}  ${qualification_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${qualification}=  create_data_dict   data.status  active
  Set To Dictionary  ${qualification.data}  id=${tender.data.qualifications[${qualification_num}].id}  eligible=${True}  qualified=${True}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_qualification
  ...      ${tender.data.id}
  ...      ${qualification}
  ...      ${qualification.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Відхилити кваліфікацію
  [Documentation]
  ...      [Arguments] Username, tender uaid and qualification number
  ...      [Description] Find tender using uaid, create data dict with unsuccessful status and call patch_qualification
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}  ${qualification_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${qualification}=  create_data_dict   data.status  unsuccessful
  Set To Dictionary  ${qualification.data}  id=${tender.data.qualifications[${qualification_num}].id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_qualification
  ...      ${tender.data.id}
  ...      ${qualification}
  ...      ${qualification.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Завантажити документ у кваліфікацію
  [Documentation]
  ...      [Arguments] Username, tender uaid, qualification number and document to upload
  ...      [Description] Find tender using uaid,  and call upload_qualification_document
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${document}  ${tender_uaid}  ${qualification_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${doc_reply}=  Call Method  ${USERS.users['${username}'].client}  upload_qualification_document
  ...      ${document}
  ...      ${tender.data.id}
  ...      ${tender.data.qualifications[${qualification_num}].id}
  ...      access_token=${tender.access.token}
  Log  ${doc_reply}


Скасувати кваліфікацію
  [Documentation]
  ...      [Arguments] Username, tender uaid and qualification number
  ...      [Description] Find tender using uaid, create data dict with cancelled status and call patch_qualification
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}  ${qualification_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${qualification}=  create_data_dict   data.status  cancelled
  Set To Dictionary  ${qualification.data}  id=${tender.data.qualifications[${qualification_num}].id}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_qualification
  ...      ${tender.data.id}
  ...      ${qualification}
  ...      ${qualification.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Затвердити остаточне рішення кваліфікації
  [Documentation]
  ...      [Arguments] Username and tender uaid
  ...
  ...      [Description] Find tender using uaid and call patch_tender
  ...
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}
  ${internal_id}=  openprocurement_client.Отримати internal id по UAid  ${username}  ${tender_uaid}
  ${tender}=  create_data_dict  data.id  ${internal_id}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  set_to_object  ${tender}  data.status  active.pre-qualification.stand-still
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Затвердити постачальників
  [Arguments]  ${username}  ${tender_uaid}
  ${internal_id}=  openprocurement_client.Отримати internal id по UAid  ${username}  ${tender_uaid}
  ${tender}=  create_data_dict  data.id  ${internal_id}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  set_to_object  ${tender}  data.status  active.qualification.stand-still
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Перевести тендер на статус очікування обробки мостом
  [Documentation]
  ...      [Arguments] Username and tender uaid
  ...
  ...      [Description] Find tender using uaid and call patch_tender
  ...
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}
  ${internal_id}=  openprocurement_client.Отримати internal id по UAid  ${username}  ${tender_uaid}
  ${tender}=  create_data_dict  data.id  ${internal_id}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  set_to_object  ${tender}  data.status  active.stage2.waiting
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Активувати другий етап
  [Documentation]
  ...      [Arguments] Username and tender uaid
  ...
  ...      [Description] Find tender using uaid and call patch_tender
  ...
  ...      [Return] Reply of API
  [Arguments]  ${username}  ${tender_uaid}
  ${internal_id}=  openprocurement_client.Отримати internal id по UAid  ${username}  ${tender_uaid}
  ${tender}=  create_data_dict  data.id  ${internal_id}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
  set_to_object  ${tender}  data.status  active.tendering
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_tender
  ...      ${tender.data.id}
  ...      ${tender}
  ...      access_token=${tender.access.token}
  Log  ${reply}

##############################################################################
#             CONTRACT SIGNING
##############################################################################

Редагувати угоду
  [Arguments]  ${username}  ${tender_uaid}  ${contract_index}  ${fieldname}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${contract}=  Create Dictionary  data=${tender.data.contracts[${contract_index}]}
  Set_to_object  ${contract.data}  ${fieldname}  ${fieldvalue}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${contract}
  ...      ${contract.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Редагувати обидва поля вартості угоди
  [Arguments]  ${username}  ${tender_uaid}  ${contract_index}  ${field_amount}  ${field_amountNet}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${contract}=  Create Dictionary  data=${tender.data.contracts[${contract_index}]}
  Set_to_object  ${contract.data}  ${field_amount}  ${fieldvalue}
  Set_to_object  ${contract.data}  ${field_amountNet}  ${fieldvalue}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${contract}
  ...      ${contract.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Змінити ознаку ПДВ на True
  [Arguments]  ${username}  ${tender_uaid}  ${contract_index}  ${vat_fieldvalue}  ${field_amount}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${contract}=  Create Dictionary  data=${tender.data.contracts[${contract_index}]}
  Set To Dictionary  ${contract.data.value}  valueAddedTaxIncluded=${vat_fieldvalue}
  Set To Dictionary  ${contract.data.value}  amountNet=${field_amount}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${contract}
  ...      ${contract.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Встановити ціну за одиницю для контракту
  [Arguments]  ${username}  ${tender_uaid}  ${contract_data}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  Log  ${tender}
  Log  ${contract_data}
  ${tender_id}=  Set Variable  ${tender.data.id}
  ${agreement_id}=  Set Variable  ${tender.data.agreements[0].id}
  ${contract_id}=  Set Variable  ${contract_data.data.id}
  ${access_token}=  Set Variable  ${tender.access.token}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_agreement_contract
  ...      ${tender_id}
  ...      ${agreement_id}
  ...      ${contract_data}
  ...      contract_id=${contract_id}
  ...      access_token=${access_token}
  Log  ${reply}


Зареєструвати угоду
  [Arguments]  ${username}  ${tender_uaid}  ${period}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${agreement}=  Create Dictionary  data=${tender.data.agreements[0]}
  Set To Dictionary  ${agreement.data}  status=active
  Set To Dictionary  ${agreement.data}  period=${period}
  ${tender_id}=  Set Variable  ${tender.data.id}
  ${agreement_id}=  Set Variable  ${tender.data.agreements[0].id}
  ${access_token}=  Set Variable  ${tender.access.token}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_agreement
  ...      ${tender_id}
  ...      ${agreement}
  ...      ${agreement_id}
  ...      access_token=${access_token}
  Log  ${reply}


Змінити ознаку ПДВ
  [Arguments]  ${username}  ${tender_uaid}  ${contract_index}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${contract}=  Create Dictionary  data=${tender.data.contracts[${contract_index}]}
  Set To Dictionary  ${contract.data.value}  valueAddedTaxIncluded=${fieldvalue}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${contract}
  ...      ${contract.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Встановити дату підписання угоди
  [Arguments]  ${username}  ${tender_uaid}  ${contract_index}  ${fieldvalue}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${contract}=  Create Dictionary  data=${tender.data.contracts[${contract_index}]}
  Set To Dictionary  ${contract.data}  dateSigned=${fieldvalue}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${contract}
  ...      ${contract.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Вказати період дії угоди
  [Arguments]  ${username}  ${tender_uaid}  ${contract_index}  ${startDate}  ${endDate}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${period}=  Create Dictionary  startDate=${startDate}
  Set to Dictionary  ${period}  endDate=${endDate}
  ${contract}=  Create Dictionary  data=${tender.data.contracts[${contract_index}]}
  Set To Dictionary  ${contract.data}  period=${period}
  Log  ${contract}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${contract}
  ...      ${contract.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}


Завантажити документ в угоду
  [Arguments]  ${username}  ${path}  ${tender_uaid}  ${contract_index}  ${doc_type}=documents
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${contract_id}=  Get Variable Value  ${tender.data.contracts[${contract_index}].id}
  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}']['access_token']}
  ${response}=  Call Method  ${USERS.users['${username}'].client}  upload_contract_document
  ...      ${path}
  ...      ${tender.data.id}
  ...      ${contract_id}
  ...      access_token=${tender.access.token}
  ${uploaded_file} =  Create Dictionary
  ...      filepath=${path}
  ...      upload_response=${response}
  Log object data  ${uploaded_file}


Підтвердити підписання контракту
  [Documentation]
  ...      [Arguments] Username, tender uaid, contract number
  ...      Find tender using uaid, get contract test_confirmation data and call patch_contract
  ...      [Return] Nothing
  [Arguments]  ${username}  ${tender_uaid}  ${contract_num}
  ${tender}=  openprocurement_client.Пошук тендера по ідентифікатору  ${username}  ${tender_uaid}
  ${data}=  test_confirm_data  ${tender['data']['contracts'][${contract_num}]['id']}
  Log  ${data}
  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract
  ...      ${tender.data.id}
  ...      ${data}
  ...      ${data.data.id}
  ...      access_token=${tender.access.token}
  Log  ${reply}
  [Return]  ${reply}

##############################################################################
#             CONTRACT MANAGEMENT
##############################################################################

Отримати internal id по UAid для договору
  [Arguments]  ${username}  ${contract_uaid}
  Log  ${contract_uaid}
  Log  ${USERS.users['${username}'].contracts_id_map}
  ${status}=  Run Keyword And Return Status  Dictionary Should Contain Key  ${USERS.users['${username}'].contracts_id_map}  ${contract_uaid}
  Run Keyword and Return If  ${status}  Get From Dictionary  ${USERS.users['${username}'].contracts_id_map}  ${contract_uaid}
  Call Method  ${USERS.users['${username}'].contracting_client}  get_contracts
  ${contract_id}=  Wait Until Keyword Succeeds  15x  10 sec  get_contract_id_by_uaid  ${contract_uaid}  ${USERS.users['${username}'].contracting_client}
  Set To Dictionary  ${USERS.users['${username}'].contracts_id_map}  ${contract_uaid}  ${contract_id}
  [Return]  ${contract_id}


Оновити сторінку з договором
  [Arguments]  ${username}  ${contract_uaid}
  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}


Отримати список договорів
  [Arguments]  ${username}
  @{contracts_feed}=  get_contracts_feed  ${USERS.users['${username}'].contracting_client}
  [return]  @{contracts_feed}


Отримати договір по внутрішньому ідентифікатору
  [Arguments]  ${username}  ${internalid}
  ${contract}=  Call Method  ${USERS.users['${username}'].contracting_client}  get_contract  ${internalid}
  ${contract}=  munch_dict  arg=${contract}
  Set To Dictionary  ${USERS.users['${username}']}  contract_data=${contract}
  Log  ${contract}
  [return]  ${contract}


Пошук договору по ідентифікатору
  [Arguments]  ${username}  ${contract_uaid}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${contract}=  openprocurement_client.Отримати договір по внутрішньому ідентифікатору  ${username}  ${internalid}
  [return]  ${contract}


Отримати доступ до договору
  [Arguments]  ${username}  ${contract_uaid}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${contract}=  Call Method  ${USERS.users['${username}'].contracting_client}  retrieve_contract_credentials  ${internalid}  ${USERS.users['${username}'].access_token}
  ${contract}=  munch_dict  arg=${contract}
  Set To Dictionary  ${USERS.users['${username}']}  contract_data=${contract}
  Set To Dictionary  ${USERS.users['${username}']}  contract_access_token=${contract.access.token}
  Log  ${contract}
  [return]  ${contract}


Внести зміну в договір
  [Arguments]  ${username}  ${contract_uaid}  ${change_data}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].contracting_client}  create_change  ${internalid}  ${USERS.users['${username}'].contract_access_token}  ${change_data}
  # we need this to have change id in `Додати документацію до зміни в договорі` and `Застосувати зміну` keywords
  ${empty_list}=  Create List
  ${changes}=  Get variable value  ${USERS.users['${username}'].changes}  ${empty_list}
  Append to list  ${changes}  ${reply}
  Set to dictionary  ${USERS.users['${username}']}  changes=${changes}
  Log  ${change_data}
  Log  ${reply}


Додати документацію до зміни в договорі
  [Arguments]  ${username}  ${contract_uaid}  ${document}
  ${contract}=  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}
  ${contract}=  set_access_key  ${contract}  ${USERS.users['${username}'].contract_access_token}
  ${reply_doc_create}=  Call Method  ${USERS.users['${username}'].contracting_client}  upload_document
  ...      ${document}
  ...      ${contract.data.id}
  ...      access_token=${contract.access.token}
  ${change_document}=  test_change_document_data  ${reply_doc_create}  ${USERS.users['${username}'].changes[0].data.id}
  ${reply_doc_patch}=  Call Method  ${USERS.users['${username}'].contracting_client}  patch_document
  ...      ${contract.data.id}
  ...      ${change_document}
  ...      ${change_document.data.id}
  ...      access_token=${contract.access.token}
  Log  ${reply_doc_create}
  Log  ${reply_doc_patch}


Редагувати поле договору
  [Arguments]  ${username}  ${contract_uaid}  ${fieldname}  ${fieldvalue}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${contract}=  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}
  Set_To_Object  ${contract.data}   ${fieldname}   ${fieldvalue}
  Log  ${contract}
  ${contract}=  Call Method  ${USERS.users['${username}'].contracting_client}  patch_contract  ${internalid}  ${USERS.users['${username}'].contract_access_token}  ${contract}
  Log  ${contract}


Одночасно Редагувати два поля договору
  [Arguments]  ${username}  ${contract_uaid}  ${first_fieldname}  ${first_fieldvalue}  ${second_fieldname}  ${second_fieldvalue}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${contract}=  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}
  Set_To_Object  ${contract.data}  ${first_fieldname}  ${first_fieldvalue}
  Set_To_Object  ${contract.data}  ${second_fieldname}  ${second_fieldvalue}
  Log  ${contract}
  ${contract}=  Call Method  ${USERS.users['${username}'].contracting_client}  patch_contract  ${internalid}  ${USERS.users['${username}'].contract_access_token}  ${contract}
  Log  ${contract}


Редагувати зміну
  [Arguments]  ${username}  ${contract_uaid}  ${fieldname}  ${fieldvalue}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${data}=  Create Dictionary  ${fieldname}=${fieldvalue}
  ${data}=  Create Dictionary  data=${data}
  ${changes}=  Get variable value  ${USERS.users['${username}'].changes}
  ${change}=  munchify  ${changes[-1]}
  Log  ${change}
  ${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}
  Log  ${data}
  Log  ${reply}


Застосувати зміну
  [Arguments]  ${username}  ${contract_uaid}  ${dateSigned}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${data}=  Create Dictionary  status=active  dateSigned=${dateSigned}
  ${data}=  Create Dictionary  data=${data}
  ${changes}=  Get variable value  ${USERS.users['${username}'].changes}
  ${change}=  munchify  ${changes[-1]}
  Log  ${change}
  ${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}
  Log  ${data}
  Log  ${reply}


Завантажити документацію до договору
  [Arguments]  ${username}  ${contract_uaid}  ${document}
  ${contract}=  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}
  ${contract}=  set_access_key  ${contract}  ${USERS.users['${username}'].contract_access_token}
  ${reply}=  Call Method  ${USERS.users['${username}'].contracting_client}  upload_document
  ...      ${document}
  ...      ${contract.data.id}
  ...      access_token=${contract.access.token}
  Log  ${reply}


Внести зміни в договір
  [Arguments]  ${username}  ${contract_uaid}  ${data}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].contracting_client}  patch_contract  ${internalid}  ${USERS.users['${username}'].contract_access_token}  ${data}
  Log  ${reply}


Завершити договір
  [Arguments]  ${username}  ${contract_uaid}
  ${internalid}=  openprocurement_client.Отримати internal id по UAid для договору  ${username}  ${contract_uaid}
  ${data}=  Create Dictionary  status=terminated
  ${data}=  Create Dictionary  data=${data}
  ${reply}=  Call Method  ${USERS.users['${username}'].contracting_client}  patch_contract  ${internalid}  ${USERS.users['${username}'].contract_access_token}  ${data}


Отримати інформацію із договору
  [Arguments]  ${username}  ${contract_uaid}  ${field_name}
  openprocurement_client.Пошук договору по ідентифікатору
  ...      ${username}
  ...      ${contract_uaid}

  ${status}  ${field_value}=  Run keyword and ignore error
  ...      Get from object
  ...      ${USERS.users['${username}'].contract_data.data}
  ...      ${field_name}
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}

  Fail  Field not found: ${field_name}


Отримати інформацію із документа до договору
  [Arguments]  ${username}  ${contract_uaid}  ${doc_id}  ${field_name}
  ${tender}=  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  Log  ${document}
  [Return]  ${document['${field_name}']}


Отримати документ до договору
  [Arguments]  ${username}  ${contract_uaid}  ${doc_id}
  ${tender}=  openprocurement_client.Пошук договору по ідентифікатору  ${username}  ${contract_uaid}
  ${document}=  get_document_by_id  ${tender.data}  ${doc_id}
  ${filename}=  download_file_from_url  ${document.url}  ${OUTPUT_DIR}${/}${document.title}
  [return]  ${filename}


Отримати доступ до угоди
  [Arguments]  ${username}  ${agreement_uaid}
  ${token}=  Set Variable  ${USERS.users['${username}'].access_token}
  ${internalid}=  openprocurement_client.Отримати internal id угоди по UAid  ${username}  ${agreement_uaid}
  ${agreement}=  Call Method  ${USERS.users['${username}'].agreement_client}  patch_credentials  ${internalid}  ${token}
  Set To Dictionary  ${USERS.users['${username}']}  agreement_access_token=${agreement.access.token}
  ${agreement}=  munch_dict  arg=${agreement}
  [return]   ${agreement}


Внести зміну в угоду
  [Arguments]  ${username}  ${agreement_uaid}  ${change_data}
  ${internalid}=  openprocurement_client.Отримати internal id угоди по UAid  ${username}  ${agreement_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].agreement_client}  create_change
  ...      ${internalid}
  ...      ${change_data}
  ...      access_token=${USERS.users['${username}'].agreement_access_token}
  Log  ${reply}


Застосувати зміну для угоди
  [Arguments]  ${username}  ${agreement_uaid}  ${dateSigned}  ${status}
  ${agreement}=  openprocurement_client.Пошук угоди по ідентифікатору  ${username}  ${agreement_uaid}
  ${data}=  Create Dictionary  status=${status}  dateSigned=${dateSigned}
  ${data}=  Create Dictionary  data=${data}
  ${reply}=  Call Method  ${USERS.users['${username}'].agreement_client}  patch_change
  ...      ${agreement.data.id}
  ...      ${data}
  ...      ${agreement.data.changes[-1].id}
  ...      access_token=${USERS.users['${username}'].agreement_access_token}
  Log  ${reply}


Оновити властивості угоди
  [Arguments]  ${username}  ${agreement_uaid}  ${data}
  ${agreement}=  openprocurement_client.Пошук угоди по ідентифікатору  ${username}  ${agreement_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].agreement_client}  patch_change
  ...      ${agreement.data.id}
  ...      ${data}
  ...      ${agreement.data.changes[-1].id}
  ...      access_token=${USERS.users['${username}'].agreement_access_token}
  Log  ${reply}


Завантажити документ в рамкову угоду
  [Arguments]  ${username}  ${filepath}  ${agreement_uaid}
  Log  ${username}
  Log  ${agreement_uaid}
  Log  ${filepath}
  ${agreement}=  openprocurement_client.Пошук угоди по ідентифікатору  ${username}  ${agreement_uaid}
  ${reply}=  Call Method  ${USERS.users['${username}'].agreement_client}  upload_document
  ...      ${filepath}
  ...      ${agreement.data.id}
  ...      access_token=${USERS.users['${username}'].agreement_access_token}
  Log Object Data  ${reply}  reply
  [return]  ${reply}


Завантажити документ для зміни у рамковій угоді
  [Arguments]  ${username}  ${filepath}  ${agreement_uaid}  ${item_id}
  Log  ${username}
  Log  ${agreement_uaid}
  Log  ${filepath}
  ${agreement}=  openprocurement_client.Пошук угоди по ідентифікатору  ${username}  ${agreement_uaid}
  ${document}=  openprocurement_client.Завантажити документ в рамкову угоду  ${username}  ${filepath}  ${agreement_uaid}
  Set to dictionary  ${document.data}  documentOf=change
  Set to dictionary  ${document.data}  relatedItem=${item_id}
  ${reply}=  Call Method  ${USERS.users['${username}'].agreement_client}  patch_document
  ...      ${agreement.data.id}
  ...      ${document}
  ...      ${document.data.id}
  ...      access_token=${USERS.users['${username}'].agreement_access_token}
  [return]  ${reply}


Завершити угоду
  [Arguments]  ${username}  ${agreement_uaid}
  ${internalid}=  openprocurement_client.Отримати internal id угоди по UAid  ${username}  ${agreement_uaid}
  ${data}=  Create Dictionary  status=terminated
  ${data}=  Create Dictionary  data=${data}
  ${reply}=  Call Method  ${USERS.users['${username}'].agreement_client}  patch_agreement
  ...      ${internalid}
  ...      ${data}
  ...      access_token=${USERS.users['${username}'].agreement_access_token}


Отримати інформацію із угоди
  [Arguments]  ${username}  ${agreement_uaid}  ${field_name}
  openprocurement_client.Пошук угоди по ідентифікатору
  ...      ${username}
  ...      ${agreement_uaid}
  ${status}  ${field_value}=  Run Keyword And Ignore Error
  ...      Get From Object
  ...      ${USERS.users['${username}'].agreement_data.data}
  ...      ${field_name}
  Run Keyword If  '${status}' == 'PASS'  Return From Keyword   ${field_value}
  Fail  Field not found: ${field_name}


знайти план за ідентифікатором
  [Arguments]  ${tender_uaid}  ${username}  ${save_key}=tender_data
  ${internalid}=  openprocurement_client.Отримати internal id плану по UAid  ${username}  ${tender_uaid}
  ${plan}=  openprocurement_client.Отримати план по внутрішньому ідентифікатору  ${username}  ${internalid}  ${save_key}
  [return]  ${plan}