diff --git a/docs/source/agreements/http/cfaua/agreement-credentials.http b/docs/source/agreements/http/cfaua/agreement-credentials.http index 911cedc181..2102990ee2 100644 --- a/docs/source/agreements/http/cfaua/agreement-credentials.http +++ b/docs/source/agreements/http/cfaua/agreement-credentials.http @@ -148,7 +148,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "relatedLot": "27c4a15dce034406ba16156354632d9b", diff --git a/docs/source/agreements/http/cfaua/agreement-termination.http b/docs/source/agreements/http/cfaua/agreement-termination.http index 0b6fd16e2f..44ccf6e81b 100644 --- a/docs/source/agreements/http/cfaua/agreement-termination.http +++ b/docs/source/agreements/http/cfaua/agreement-termination.http @@ -214,7 +214,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "relatedLot": "27c4a15dce034406ba16156354632d9b", diff --git a/docs/source/agreements/http/cfaua/agreement-view.http b/docs/source/agreements/http/cfaua/agreement-view.http index 01e3aee8cd..f4fe848899 100644 --- a/docs/source/agreements/http/cfaua/agreement-view.http +++ b/docs/source/agreements/http/cfaua/agreement-view.http @@ -145,7 +145,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "relatedLot": "27c4a15dce034406ba16156354632d9b", diff --git a/docs/source/agreements/http/cfaua/agreement_preview.http b/docs/source/agreements/http/cfaua/agreement_preview.http index ece6f7a872..42fa3ff1a2 100644 --- a/docs/source/agreements/http/cfaua/agreement_preview.http +++ b/docs/source/agreements/http/cfaua/agreement_preview.http @@ -175,7 +175,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "relatedLot": "27c4a15dce034406ba16156354632d9b", diff --git a/docs/source/agreements/http/cfaua/example_agreement.http b/docs/source/agreements/http/cfaua/example_agreement.http index 6bd0f536fc..800664a09f 100644 --- a/docs/source/agreements/http/cfaua/example_agreement.http +++ b/docs/source/agreements/http/cfaua/example_agreement.http @@ -42,7 +42,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } } ], diff --git a/docs/source/agreements/http/cfaua/example_tender.http b/docs/source/agreements/http/cfaua/example_tender.http index 8cab34991f..74c9c7621f 100644 --- a/docs/source/agreements/http/cfaua/example_tender.http +++ b/docs/source/agreements/http/cfaua/example_tender.http @@ -335,7 +335,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } } ], @@ -507,7 +507,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } } ], diff --git a/docs/source/agreements/http/cfaua/view-agreement.http b/docs/source/agreements/http/cfaua/view-agreement.http index 107e7faa42..0c8dbdbbb2 100644 --- a/docs/source/agreements/http/cfaua/view-agreement.http +++ b/docs/source/agreements/http/cfaua/view-agreement.http @@ -176,7 +176,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "relatedLot": "27c4a15dce034406ba16156354632d9b", diff --git a/docs/source/centralized-procurements/http/create-plan.http b/docs/source/centralized-procurements/http/create-plan.http index b2135b4c09..db7fbe9c0f 100644 --- a/docs/source/centralized-procurements/http/create-plan.http +++ b/docs/source/centralized-procurements/http/create-plan.http @@ -104,6 +104,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "30429c884b234749a850b6bd1e044153", "name": "ЦЗО №1", "identifier": { "scheme": "UA-EDR", @@ -185,6 +186,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "422e3fac1aa846bdb451aff9f215009e", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/centralized-procurements/http/create-tender.http b/docs/source/centralized-procurements/http/create-tender.http index 95b4ec4493..09f87aa414 100644 --- a/docs/source/centralized-procurements/http/create-tender.http +++ b/docs/source/centralized-procurements/http/create-tender.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders HTTP/1.0 Authorization: Bearer broker -Content-Length: 2547 +Content-Length: 4158 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -39,7 +39,7 @@ DATA: "items": [ { "deliveryDate": { - "endDate": "2019-11-09T01:00:00+03:00" + "endDate": "2021-03-31T00:00:00+02:00" }, "additionalClassifications": [ { @@ -58,7 +58,56 @@ DATA: "id": "03111600-8" }, "quantity": 1000, - "description": "Насіння гірчиці" + "description": "Насіння гірчиці", + "relatedBuyer": "3e32f23699ea4ac0b8e105e7babd2c86" + }, + { + "deliveryDate": { + "endDate": "2021-04-01T00:00:00+02:00" + }, + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "01.11.95", + "description": "Насіння соняшнику" + } + ], + "unit": { + "code": "KGM", + "name": "кг" + }, + "classification": { + "scheme": "ДК021", + "description": "Sunflower seeds", + "id": "03111300-5" + }, + "quantity": 2000, + "description": "Насіння соняшнику", + "relatedBuyer": "3e32f23699ea4ac0b8e105e7babd2c86" + }, + { + "deliveryDate": { + "endDate": "2021-04-02T00:00:00+02:00" + }, + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "01.11.84", + "description": "Насіння бавовнику" + } + ], + "unit": { + "code": "KGM", + "name": "кг" + }, + "classification": { + "scheme": "ДК021", + "description": "Cotton seeds", + "id": "03111400-6" + }, + "quantity": 3000, + "description": "Насіння бавовнику", + "relatedBuyer": "88c051728aae432ca2d39a0215d63fcd" } ], "enquiryPeriod": { @@ -102,7 +151,17 @@ DATA: "id": "111983", "legalName": "ДП Державне Управління Справами" }, - "name": "ДУС" + "name": "ДУС", + "id": "3e32f23699ea4ac0b8e105e7babd2c86" + }, + { + "identifier": { + "scheme": "UA-EDR", + "id": "222983", + "legalName": "ДП Державне Управління Справами" + }, + "name": "ДУС", + "id": "88c051728aae432ca2d39a0215d63fcd" } ], "status": "draft" @@ -149,12 +208,22 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "3e32f23699ea4ac0b8e105e7babd2c86", "name": "ДУС", "identifier": { "scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Управління Справами" } + }, + { + "id": "88c051728aae432ca2d39a0215d63fcd", + "name": "ДУС", + "identifier": { + "scheme": "UA-EDR", + "id": "222983", + "legalName": "ДП Державне Управління Справами" + } } ], "procurementMethod": "open", @@ -172,18 +241,69 @@ X-Content-Type-Options: nosniff "description": "Насіння гірчиці" } ], + "quantity": 1000.0, + "deliveryDate": { + "endDate": "2021-03-31T00:00:00+02:00" + }, + "relatedBuyer": "3e32f23699ea4ac0b8e105e7babd2c86", + "classification": { + "description": "Mustard seeds", + "scheme": "ДК021", + "id": "03111600-8" + }, "unit": { "name": "кг", "code": "KGM" + } + }, + { + "id": "8538be924cff4012b27f1fbb7246f7d3", + "description": "Насіння соняшнику", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "01.11.95", + "description": "Насіння соняшнику" + } + ], + "quantity": 2000.0, + "deliveryDate": { + "endDate": "2021-04-01T00:00:00+02:00" }, - "quantity": 1000.0, + "relatedBuyer": "3e32f23699ea4ac0b8e105e7babd2c86", + "classification": { + "description": "Sunflower seeds", + "scheme": "ДК021", + "id": "03111300-5" + }, + "unit": { + "name": "кг", + "code": "KGM" + } + }, + { + "id": "2e0736c2008c4ef4a4a734950ec4c9b8", + "description": "Насіння бавовнику", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "01.11.84", + "description": "Насіння бавовнику" + } + ], + "quantity": 3000.0, "deliveryDate": { - "endDate": "2019-11-09T01:00:00+03:00" + "endDate": "2021-04-02T00:00:00+02:00" }, + "relatedBuyer": "88c051728aae432ca2d39a0215d63fcd", "classification": { - "description": "Mustard seeds", + "description": "Cotton seeds", "scheme": "ДК021", - "id": "03111600-8" + "id": "03111400-6" + }, + "unit": { + "name": "кг", + "code": "KGM" } } ], diff --git a/docs/source/centralized-procurements/http/patch-plan-milestone.http b/docs/source/centralized-procurements/http/patch-plan-milestone.http index b2d3f619ae..692ec6d385 100644 --- a/docs/source/centralized-procurements/http/patch-plan-milestone.http +++ b/docs/source/centralized-procurements/http/patch-plan-milestone.http @@ -24,6 +24,7 @@ X-Content-Type-Options: nosniff "dueDate": "2019-05-30T18:00:00+02:00", "status": "met", "author": { + "id": "a256ff206dcf4884a5631a283ce6bb7d", "name": "ЦЗО №1", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/centralized-procurements/http/patch-plan-status-scheduled.http b/docs/source/centralized-procurements/http/patch-plan-status-scheduled.http index 5582492ea6..8ed28d9b22 100644 --- a/docs/source/centralized-procurements/http/patch-plan-status-scheduled.http +++ b/docs/source/centralized-procurements/http/patch-plan-status-scheduled.http @@ -16,6 +16,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "30429c884b234749a850b6bd1e044153", "name": "ЦЗО №1", "identifier": { "scheme": "UA-EDR", @@ -97,6 +98,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "422e3fac1aa846bdb451aff9f215009e", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/centralized-procurements/http/plan-complete.http b/docs/source/centralized-procurements/http/plan-complete.http index 1f4a177103..7ed27a9702 100644 --- a/docs/source/centralized-procurements/http/plan-complete.http +++ b/docs/source/centralized-procurements/http/plan-complete.http @@ -8,6 +8,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "30429c884b234749a850b6bd1e044153", "name": "ЦЗО №1", "identifier": { "scheme": "UA-EDR", @@ -90,6 +91,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "422e3fac1aa846bdb451aff9f215009e", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -119,6 +121,7 @@ X-Content-Type-Options: nosniff } ], "author": { + "id": "a256ff206dcf4884a5631a283ce6bb7d", "name": "ЦЗО №1", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/centralized-procurements/http/post-plan-milestone.http b/docs/source/centralized-procurements/http/post-plan-milestone.http index 4471f036e4..f9944ae23f 100644 --- a/docs/source/centralized-procurements/http/post-plan-milestone.http +++ b/docs/source/centralized-procurements/http/post-plan-milestone.http @@ -34,6 +34,7 @@ X-Content-Type-Options: nosniff "dueDate": "2019-05-15T13:00:00+02:00", "status": "scheduled", "author": { + "id": "a256ff206dcf4884a5631a283ce6bb7d", "name": "ЦЗО №1", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/centralized-procurements/http/tender-get.http b/docs/source/centralized-procurements/http/tender-get.http index 99c18b3464..e9e7b28484 100644 --- a/docs/source/centralized-procurements/http/tender-get.http +++ b/docs/source/centralized-procurements/http/tender-get.http @@ -41,12 +41,22 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "3e32f23699ea4ac0b8e105e7babd2c86", "name": "ДУС", "identifier": { "scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Управління Справами" } + }, + { + "id": "88c051728aae432ca2d39a0215d63fcd", + "name": "ДУС", + "identifier": { + "scheme": "UA-EDR", + "id": "222983", + "legalName": "ДП Державне Управління Справами" + } } ], "plans": [ @@ -69,18 +79,69 @@ X-Content-Type-Options: nosniff "description": "Насіння гірчиці" } ], + "quantity": 1000.0, + "deliveryDate": { + "endDate": "2021-03-31T00:00:00+02:00" + }, + "relatedBuyer": "3e32f23699ea4ac0b8e105e7babd2c86", + "classification": { + "description": "Mustard seeds", + "scheme": "ДК021", + "id": "03111600-8" + }, "unit": { "name": "кг", "code": "KGM" + } + }, + { + "id": "8538be924cff4012b27f1fbb7246f7d3", + "description": "Насіння соняшнику", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "01.11.95", + "description": "Насіння соняшнику" + } + ], + "quantity": 2000.0, + "deliveryDate": { + "endDate": "2021-04-01T00:00:00+02:00" }, - "quantity": 1000.0, + "relatedBuyer": "3e32f23699ea4ac0b8e105e7babd2c86", + "classification": { + "description": "Sunflower seeds", + "scheme": "ДК021", + "id": "03111300-5" + }, + "unit": { + "name": "кг", + "code": "KGM" + } + }, + { + "id": "2e0736c2008c4ef4a4a734950ec4c9b8", + "description": "Насіння бавовнику", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "01.11.84", + "description": "Насіння бавовнику" + } + ], + "quantity": 3000.0, "deliveryDate": { - "endDate": "2019-11-09T01:00:00+03:00" + "endDate": "2021-04-02T00:00:00+02:00" }, + "relatedBuyer": "88c051728aae432ca2d39a0215d63fcd", "classification": { - "description": "Mustard seeds", + "description": "Cotton seeds", "scheme": "ДК021", - "id": "03111600-8" + "id": "03111400-6" + }, + "unit": { + "name": "кг", + "code": "KGM" } } ], diff --git a/docs/source/centralized-procurements/index.rst b/docs/source/centralized-procurements/index.rst index 31386976b6..4c4aa9b29a 100644 --- a/docs/source/centralized-procurements/index.rst +++ b/docs/source/centralized-procurements/index.rst @@ -70,3 +70,37 @@ The tender `plans` field contains all the plan ids .. include:: http/tender-get.http :code: + + +Creation of aggregate contracts +------------------------------- + +For each `buyer` object in tender system is creating separate `contract` respectively when `award` become active. + +Create tender with several buyers, each `item` should be assigned to related `buyer` using `relatedBuyer` field : + +.. include:: ../contracting/http/create-multiple-buyers-tender.http + :code: + +Move forward as usual, activate award: + +.. include:: ../contracting/http/set-active-award.http + :code: + +After activating award system is creating such amount of contracts that corresponds to the amount of buyers + +.. include:: ../contracting/http/get-multi-contracts.http + :code: + +Update Amount.Value of each contract considering the sum of product of Unit.Value by Quantity for each item in contract. + +.. include:: ../contracting/http/patch-1st-contract-value.http + :code: + +.. include:: ../contracting/http/patch-2nd-contract-value.http + :code: + +You can activate or terminate each contract as usual. +If there are not contracts in `pending` status and at least one contract became `active` tender is becoming `complete` + +If award was cancelled, all contracts related to this awardID become in cancelled status. \ No newline at end of file diff --git a/docs/source/constants.rst b/docs/source/constants.rst index 55a4ccb6c4..467987293d 100644 --- a/docs/source/constants.rst +++ b/docs/source/constants.rst @@ -168,3 +168,10 @@ REQUIRED_FIELDS_BY_SUBMISSION_FROM VALIDATE_CURRENCY_FROM """""""""""""""""""""" + +UNIT_PRICE_REQUIRED_FROM +"""""""""""""""""""""""" + +MULTI_CONTRACTS_REQUIRED_FROM +""""""""""""""""""""""""""""" +Implemented creation of aggregate contracts. Look at `centralized-procurements` source. diff --git a/docs/source/contracting/http/add-contract-change-document.http b/docs/source/contracting/http/add-contract-change-document.http index c2f2b8806f..31567f438e 100644 --- a/docs/source/contracting/http/add-contract-change-document.http +++ b/docs/source/contracting/http/add-contract-change-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +POST /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 155 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,14 +14,14 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3 X-Content-Type-Options: nosniff { "data": { "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/add-contract-change.http b/docs/source/contracting/http/add-contract-change.http index 63d0ae1ecd..c5dfe92a0f 100644 --- a/docs/source/contracting/http/add-contract-change.http +++ b/docs/source/contracting/http/add-contract-change.http @@ -1,4 +1,4 @@ -POST /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/changes?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +POST /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/changes?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 267 Content-Type: application/json diff --git a/docs/source/contracting/http/apply-contract-change.http b/docs/source/contracting/http/apply-contract-change.http index 0ecff3a3e9..239e780cc6 100644 --- a/docs/source/contracting/http/apply-contract-change.http +++ b/docs/source/contracting/http/apply-contract-change.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/changes/90238f35b68a4a7ebeb6a5632b1b0d9a?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/changes/90238f35b68a4a7ebeb6a5632b1b0d9a?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 73 Content-Type: application/json diff --git a/docs/source/contracting/http/contract-credentials.http b/docs/source/contracting/http/contract-credentials.http index bb90eac60f..8d4dbe0161 100644 --- a/docs/source/contracting/http/contract-credentials.http +++ b/docs/source/contracting/http/contract-credentials.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/credentials?acc_token=98f32a336b1f413588448fc6e4400835 HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/credentials?acc_token=98f32a336b1f413588448fc6e4400835 HTTP/1.0 Authorization: Bearer broker Content-Length: 0 Content-Type: application/json @@ -9,7 +9,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "dateSigned": "2021-03-16T00:00:01+02:00", @@ -19,8 +19,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { @@ -51,8 +56,13 @@ X-Content-Type-Options: nosniff "id": "168b0c97bf1a4ce690b1e3b400be0f50", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/contracting/http/contract-documents.http b/docs/source/contracting/http/contract-documents.http index 8d23bc3e96..15d975dee1 100644 --- a/docs/source/contracting/http/contract-documents.http +++ b/docs/source/contracting/http/contract-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +GET /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -11,7 +11,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", @@ -21,7 +21,7 @@ X-Content-Type-Options: nosniff "id": "9a29a997e01d4f519250c0c8224f11bf", "title": "contract.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/9a29a997e01d4f519250c0c8224f11bf?download=61326b7ec07643d296aa348f6a84b5e0", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/9a29a997e01d4f519250c0c8224f11bf?download=61326b7ec07643d296aa348f6a84b5e0", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/contract-termination.http b/docs/source/contracting/http/contract-termination.http index e80b8c6b19..ecd27acd58 100644 --- a/docs/source/contracting/http/contract-termination.http +++ b/docs/source/contracting/http/contract-termination.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 83 Content-Type: application/json @@ -19,7 +19,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "period": { @@ -33,8 +33,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 2.0, "deliveryDate": { @@ -128,7 +133,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", @@ -138,7 +143,7 @@ X-Content-Type-Options: nosniff "id": "9a29a997e01d4f519250c0c8224f11bf", "title": "contract.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/9a29a997e01d4f519250c0c8224f11bf?download=61326b7ec07643d296aa348f6a84b5e0", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/9a29a997e01d4f519250c0c8224f11bf?download=61326b7ec07643d296aa348f6a84b5e0", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" @@ -147,7 +152,7 @@ X-Content-Type-Options: nosniff "id": "d72c6e6b2a7741a1910849d0446b7d3f", "title": "contract_additional_docs.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=98f487db80604f78ae7d691595fa5d9b", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=98f487db80604f78ae7d691595fa5d9b", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" @@ -156,7 +161,7 @@ X-Content-Type-Options: nosniff "id": "d72c6e6b2a7741a1910849d0446b7d3f", "title": "contract_additional_docs.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=29a6f4e9de4d44debe9cdfd98a391aa3", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=29a6f4e9de4d44debe9cdfd98a391aa3", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/contract-view.http b/docs/source/contracting/http/contract-view.http index 9306c8b1c5..1c8afed427 100644 --- a/docs/source/contracting/http/contract-view.http +++ b/docs/source/contracting/http/contract-view.http @@ -1,4 +1,4 @@ -GET /api/2.5/contracts/77d160a2092f40068cba075e1dfac436 HTTP/1.0 +GET /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077 HTTP/1.0 Host: lb-api-sandbox.prozorro.gov.ua Response: 200 OK @@ -6,7 +6,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "dateSigned": "2021-03-16T00:00:01+02:00", @@ -16,8 +16,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { @@ -48,8 +53,13 @@ X-Content-Type-Options: nosniff "id": "168b0c97bf1a4ce690b1e3b400be0f50", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/contracting/http/contracts-listing-1.http b/docs/source/contracting/http/contracts-listing-1.http index c3b537c6f5..8ab03d444b 100644 --- a/docs/source/contracting/http/contracts-listing-1.http +++ b/docs/source/contracting/http/contracts-listing-1.http @@ -8,7 +8,7 @@ X-Content-Type-Options: nosniff { "data": [ { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "dateModified": "2021-03-16T00:00:01+02:00" } ], diff --git a/docs/source/contracting/http/contracts-patch.http b/docs/source/contracting/http/contracts-patch.http index 6d9f190dac..0b211b1125 100644 --- a/docs/source/contracting/http/contracts-patch.http +++ b/docs/source/contracting/http/contracts-patch.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 148 Content-Type: application/json @@ -22,7 +22,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "period": { @@ -36,8 +36,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { @@ -68,8 +73,13 @@ X-Content-Type-Options: nosniff "id": "168b0c97bf1a4ce690b1e3b400be0f50", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { @@ -162,7 +172,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", diff --git a/docs/source/contracting/http/create-multiple-buyers-tender.http b/docs/source/contracting/http/create-multiple-buyers-tender.http new file mode 100644 index 0000000000..d01addfa44 --- /dev/null +++ b/docs/source/contracting/http/create-multiple-buyers-tender.http @@ -0,0 +1,432 @@ +POST /api/2.5/tenders HTTP/1.0 +Authorization: Bearer broker +Content-Length: 6008 +Content-Type: application/json +Host: lb-api-sandbox.prozorro.gov.ua +DATA: +{ + "data": { + "title": "футляри до державних нагород", + "mainProcurementCategory": "goods", + "procuringEntity": { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "uri": "http://www.dus.gov.ua/", + "legalName": "Державне управління справами" + }, + "address": { + "countryName": "Україна", + "postalCode": "01220", + "region": "м. Київ", + "locality": "м. Київ", + "streetAddress": "вул. Банкова, 11, корпус 1" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "kind": "general" + }, + "value": { + "amount": 500, + "currency": "UAH" + }, + "minimalStep": { + "amount": 15, + "currency": "UAH" + }, + "items": [ + { + "description": "телевізори", + "classification": { + "scheme": "ДК021", + "id": "44617100-9", + "description": "Cartons" + }, + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } + }, + "quantity": 5, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "countryName": "Україна", + "postalCode": "79000", + "region": "м. Київ", + "locality": "м. Київ", + "streetAddress": "вул. Банкова 1" + }, + "relatedBuyer": "11111111111111111111111111111111" + }, + { + "description": "портфелі", + "classification": { + "scheme": "ДК021", + "id": "44617100-9", + "description": "Cartons" + }, + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } + }, + "quantity": 5, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "countryName": "Україна", + "postalCode": "79000", + "region": "м. Київ", + "locality": "м. Київ", + "streetAddress": "вул. Банкова 1" + }, + "relatedBuyer": "22222222222222222222222222222222" + }, + { + "description": "портфелі", + "classification": { + "scheme": "ДК021", + "id": "44617100-9", + "description": "Cartons" + }, + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } + }, + "quantity": 5, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "countryName": "Україна", + "postalCode": "79000", + "region": "м. Київ", + "locality": "м. Київ", + "streetAddress": "вул. Банкова 1" + }, + "relatedBuyer": "22222222222222222222222222222222" + } + ], + "enquiryPeriod": { + "endDate": "2021-03-23T00:00:00+02:00" + }, + "tenderPeriod": { + "endDate": "2021-03-30T00:00:00+02:00" + }, + "procurementMethodType": "belowThreshold", + "milestones": [ + { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "title": "signingTheContract", + "code": "prepayment", + "type": "financing", + "duration": { + "days": 2, + "type": "banking" + }, + "sequenceNumber": 0, + "percentage": 45.55 + }, + { + "title": "deliveryOfGoods", + "code": "postpayment", + "type": "financing", + "duration": { + "days": 900, + "type": "calendar" + }, + "sequenceNumber": 0, + "percentage": 54.45 + } + ], + "buyers": [ + { + "id": "11111111111111111111111111111111", + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "uri": "http://www.dus.gov.ua/", + "legalName": "Державне управління справами" + } + }, + { + "id": "22222222222222222222222222222222", + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037254", + "uri": "http://www.dus.gov.ua/", + "legalName": "Державне управління справами" + } + } + ] + } +} + +Response: 201 Created +Content-Type: application/json +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/0d6295697ad646abaaa8f03198f60b4f +X-Content-Type-Options: nosniff +{ + "data": { + "title": "футляри до державних нагород", + "date": "2021-03-16T00:00:00+02:00", + "dateModified": "2021-03-16T00:00:00+02:00", + "tenderID": "UA-2021-03-16-000001", + "owner": "broker", + "mainProcurementCategory": "goods", + "milestones": [ + { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "title": "signingTheContract", + "type": "financing", + "code": "prepayment", + "percentage": 45.55, + "duration": { + "days": 2, + "type": "banking" + }, + "sequenceNumber": 0 + }, + { + "id": "d15356ae19fa41759ce1e9680bbed1d9", + "title": "deliveryOfGoods", + "type": "financing", + "code": "postpayment", + "percentage": 54.45, + "duration": { + "days": 900, + "type": "calendar" + }, + "sequenceNumber": 0 + } + ], + "buyers": [ + { + "id": "11111111111111111111111111111111", + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + } + }, + { + "id": "22222222222222222222222222222222", + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037254", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + } + } + ], + "procurementMethod": "open", + "awardCriteria": "lowestCost", + "submissionMethod": "electronicAuction", + "status": "active.enquiries", + "items": [ + { + "id": "5f35f7971d7e43cdaa9c8f2a24b7869a", + "description": "телевізори", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "11111111111111111111111111111111", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + }, + { + "id": "e1fca84358884c66b3664692030d777f", + "description": "портфелі", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "22222222222222222222222222222222", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + }, + { + "id": "05e17b83034e48cda2abfc6cb326deb5", + "description": "портфелі", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "22222222222222222222222222222222", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ], + "value": { + "amount": 500.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "enquiryPeriod": { + "startDate": "2021-03-16T00:00:00+02:00", + "endDate": "2021-03-23T00:00:00+02:00" + }, + "tenderPeriod": { + "startDate": "2021-03-23T00:00:00+02:00", + "endDate": "2021-03-30T00:00:00+02:00" + }, + "procuringEntity": { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "kind": "general" + }, + "minimalStep": { + "amount": 15.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "procurementMethodType": "belowThreshold", + "id": "0d6295697ad646abaaa8f03198f60b4f", + "next_check": "2021-03-23T00:00:00+02:00" + }, + "access": { + "token": "35f45568449c4c298a96a4862f616d8f", + "transfer": "a5470adba0004f69a8a7c81281aa219e" + } +} + diff --git a/docs/source/contracting/http/delete-contract-item.http b/docs/source/contracting/http/delete-contract-item.http index 0f5bfff45d..c426513609 100644 --- a/docs/source/contracting/http/delete-contract-item.http +++ b/docs/source/contracting/http/delete-contract-item.http @@ -1,6 +1,6 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker -Content-Length: 1148 +Content-Length: 1225 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -11,8 +11,13 @@ DATA: "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 2.0, "deliveryDate": { @@ -48,7 +53,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "period": { @@ -62,8 +67,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 2.0, "deliveryDate": { @@ -156,7 +166,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", diff --git a/docs/source/contracting/http/example_contract.http b/docs/source/contracting/http/example_contract.http index c1fd256fa2..bd40724cc8 100644 --- a/docs/source/contracting/http/example_contract.http +++ b/docs/source/contracting/http/example_contract.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/0189f1fe7bc24dc5be6e5c51fa30da0d/contracts/77d160a2092f40068cba075e1dfac436 HTTP/1.0 +GET /api/2.5/tenders/0189f1fe7bc24dc5be6e5c51fa30da0d/contracts/e4e18aeb91074656a353d7429c72c077 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,19 +7,45 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "contractID": "UA-2021-03-16-000001-1", "status": "active", "dateSigned": "2021-03-16T00:00:01+02:00", + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "date": "2021-03-16T00:00:01+02:00", + "value": { + "amount": 500.0, + "currency": "UAH", + "valueAddedTaxIncluded": true, + "amountNet": 490.0 + }, + "awardID": "012bb32b7489497a82373211ac3555ba", "items": [ { "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", - "classification": { - "description": "Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, "additionalClassifications": [ { "scheme": "ДКПП", @@ -27,10 +53,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -42,16 +64,25 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - } - }, - { - "id": "168b0c97bf1a4ce690b1e3b400be0f50", - "description": "футляри до державних нагород", + }, "classification": { "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + }, + { + "id": "168b0c97bf1a4ce690b1e3b400be0f50", + "description": "футляри до державних нагород", "additionalClassifications": [ { "scheme": "ДКПП", @@ -59,10 +90,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -74,40 +101,23 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - } - } - ], - "suppliers": [ - { - "name": "Державне управління справами", - "identifier": { - "scheme": "UA-EDR", - "id": "00037256", - "legalName": "Державне управління справами", - "uri": "http://www.dus.gov.ua/" - }, - "address": { - "streetAddress": "вул. Банкова, 11, корпус 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "01220", - "countryName": "Україна" }, - "contactPoint": { - "name": "Державне управління справами", - "telephone": "+0440000000" + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" }, - "scale": "micro" + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } } - ], - "date": "2021-03-16T00:00:01+02:00", - "value": { - "amount": 500.0, - "currency": "UAH", - "valueAddedTaxIncluded": true, - "amountNet": 490.0 - }, - "awardID": "012bb32b7489497a82373211ac3555ba" + ] } } diff --git a/docs/source/contracting/http/example_tender.http b/docs/source/contracting/http/example_tender.http index d540c71ecd..ab9612abe6 100644 --- a/docs/source/contracting/http/example_tender.http +++ b/docs/source/contracting/http/example_tender.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -74,6 +70,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } }, { @@ -86,10 +91,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -106,6 +107,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], @@ -224,19 +234,45 @@ X-Content-Type-Options: nosniff ], "contracts": [ { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "contractID": "UA-2021-03-16-000001-1", "status": "active", "dateSigned": "2021-03-16T00:00:01+02:00", + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "date": "2021-03-16T00:00:01+02:00", + "value": { + "amount": 500.0, + "currency": "UAH", + "valueAddedTaxIncluded": true, + "amountNet": 490.0 + }, + "awardID": "012bb32b7489497a82373211ac3555ba", "items": [ { "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", - "classification": { - "description": "Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, "additionalClassifications": [ { "scheme": "ДКПП", @@ -244,10 +280,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -259,16 +291,25 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - } - }, - { - "id": "168b0c97bf1a4ce690b1e3b400be0f50", - "description": "футляри до державних нагород", + }, "classification": { "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + }, + { + "id": "168b0c97bf1a4ce690b1e3b400be0f50", + "description": "футляри до державних нагород", "additionalClassifications": [ { "scheme": "ДКПП", @@ -276,10 +317,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -291,40 +328,23 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - } - } - ], - "suppliers": [ - { - "name": "Державне управління справами", - "identifier": { - "scheme": "UA-EDR", - "id": "00037256", - "legalName": "Державне управління справами", - "uri": "http://www.dus.gov.ua/" }, - "address": { - "streetAddress": "вул. Банкова, 11, корпус 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "01220", - "countryName": "Україна" - }, - "contactPoint": { - "name": "Державне управління справами", - "telephone": "+0440000000" + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" }, - "scale": "micro" + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } } - ], - "date": "2021-03-16T00:00:01+02:00", - "value": { - "amount": 500.0, - "currency": "UAH", - "valueAddedTaxIncluded": true, - "amountNet": 490.0 - }, - "awardID": "012bb32b7489497a82373211ac3555ba" + ] } ], "auctionPeriod": { diff --git a/docs/source/contracting/http/get-contract-document-3.http b/docs/source/contracting/http/get-contract-document-3.http index 93130457cf..6462fa3897 100644 --- a/docs/source/contracting/http/get-contract-document-3.http +++ b/docs/source/contracting/http/get-contract-document-3.http @@ -1,4 +1,4 @@ -GET /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +GET /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -10,7 +10,7 @@ X-Content-Type-Options: nosniff "id": "d72c6e6b2a7741a1910849d0446b7d3f", "title": "contract_additional_docs.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=29a6f4e9de4d44debe9cdfd98a391aa3", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=29a6f4e9de4d44debe9cdfd98a391aa3", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract", @@ -19,7 +19,7 @@ X-Content-Type-Options: nosniff "id": "d72c6e6b2a7741a1910849d0446b7d3f", "title": "contract_additional_docs.doc", "format": "application/msword", - "url": "/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=98f487db80604f78ae7d691595fa5d9b", + "url": "/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=98f487db80604f78ae7d691595fa5d9b", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/get-multi-contracts.http b/docs/source/contracting/http/get-multi-contracts.http new file mode 100644 index 0000000000..7e04e8f579 --- /dev/null +++ b/docs/source/contracting/http/get-multi-contracts.http @@ -0,0 +1,204 @@ +GET /api/2.5/tenders/a9291ae8a98f4f2c95ade6c4e35cac43/contracts HTTP/1.0 +Authorization: Bearer broker +Host: lb-api-sandbox.prozorro.gov.ua + +Response: 200 OK +Content-Type: application/json +X-Content-Type-Options: nosniff +{ + "data": [ + { + "id": "da7c2a348ce64bbc8a455db7b4e7d796", + "buyerID": "11111111111111111111111111111111", + "contractID": "UA-2021-03-16-000002-1", + "status": "pending", + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "date": "2021-03-16T00:00:00+02:00", + "value": { + "amount": 0.0, + "currency": "UAH", + "valueAddedTaxIncluded": true, + "amountNet": 0.0 + }, + "awardID": "012bb32b7489497a82373211ac3555ba", + "items": [ + { + "id": "d1434a236c04481fbdcfa953f6346553", + "description": "телевізори", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "11111111111111111111111111111111", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] + }, + { + "id": "bba7e565bcd8469c8084abcf2558af8b", + "buyerID": "22222222222222222222222222222222", + "contractID": "UA-2021-03-16-000002-2", + "status": "pending", + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "date": "2021-03-16T00:00:00+02:00", + "value": { + "amount": 0.0, + "currency": "UAH", + "valueAddedTaxIncluded": true, + "amountNet": 0.0 + }, + "awardID": "012bb32b7489497a82373211ac3555ba", + "items": [ + { + "id": "42ab30dfac0c481aaf84e0d66b4b8611", + "description": "портфелі", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "22222222222222222222222222222222", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + }, + { + "id": "1ca7db51de60427192d9964f964af72a", + "description": "портфелі", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "22222222222222222222222222222222", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] + } + ] +} + diff --git a/docs/source/contracting/http/patch-1st-contract-value.http b/docs/source/contracting/http/patch-1st-contract-value.http new file mode 100644 index 0000000000..c05708853f --- /dev/null +++ b/docs/source/contracting/http/patch-1st-contract-value.http @@ -0,0 +1,98 @@ +PATCH /api/2.5/tenders/a9291ae8a98f4f2c95ade6c4e35cac43/contracts/da7c2a348ce64bbc8a455db7b4e7d796?acc_token=cb13f230147b40acb4fef6a0c077fa5a HTTP/1.0 +Authorization: Bearer broker +Content-Length: 53 +Content-Type: application/json +Host: lb-api-sandbox.prozorro.gov.ua +DATA: +{ + "data": { + "value": { + "amount": 100, + "amountNet": 95 + } + } +} + +Response: 200 OK +Content-Type: application/json +X-Content-Type-Options: nosniff +{ + "data": { + "id": "da7c2a348ce64bbc8a455db7b4e7d796", + "buyerID": "11111111111111111111111111111111", + "contractID": "UA-2021-03-16-000002-1", + "status": "pending", + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "date": "2021-03-16T00:00:00+02:00", + "value": { + "amount": 100.0, + "currency": "UAH", + "valueAddedTaxIncluded": true, + "amountNet": 95.0 + }, + "awardID": "012bb32b7489497a82373211ac3555ba", + "items": [ + { + "id": "d1434a236c04481fbdcfa953f6346553", + "description": "телевізори", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "11111111111111111111111111111111", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] + } +} + diff --git a/docs/source/contracting/http/patch-2nd-contract-value.http b/docs/source/contracting/http/patch-2nd-contract-value.http new file mode 100644 index 0000000000..b3eb786da0 --- /dev/null +++ b/docs/source/contracting/http/patch-2nd-contract-value.http @@ -0,0 +1,136 @@ +PATCH /api/2.5/tenders/a9291ae8a98f4f2c95ade6c4e35cac43/contracts/bba7e565bcd8469c8084abcf2558af8b?acc_token=cb13f230147b40acb4fef6a0c077fa5a HTTP/1.0 +Authorization: Bearer broker +Content-Length: 54 +Content-Type: application/json +Host: lb-api-sandbox.prozorro.gov.ua +DATA: +{ + "data": { + "value": { + "amount": 200, + "amountNet": 190 + } + } +} + +Response: 200 OK +Content-Type: application/json +X-Content-Type-Options: nosniff +{ + "data": { + "id": "bba7e565bcd8469c8084abcf2558af8b", + "buyerID": "22222222222222222222222222222222", + "contractID": "UA-2021-03-16-000002-2", + "status": "pending", + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "date": "2021-03-16T00:00:00+02:00", + "value": { + "amount": 200.0, + "currency": "UAH", + "valueAddedTaxIncluded": true, + "amountNet": 190.0 + }, + "awardID": "012bb32b7489497a82373211ac3555ba", + "items": [ + { + "id": "42ab30dfac0c481aaf84e0d66b4b8611", + "description": "портфелі", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "22222222222222222222222222222222", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + }, + { + "id": "1ca7db51de60427192d9964f964af72a", + "description": "портфелі", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedBuyer": "22222222222222222222222222222222", + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] + } +} + diff --git a/docs/source/contracting/http/patch-contract-change.http b/docs/source/contracting/http/patch-contract-change.http index 8534b622b3..4639fd8347 100644 --- a/docs/source/contracting/http/patch-contract-change.http +++ b/docs/source/contracting/http/patch-contract-change.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/changes/90238f35b68a4a7ebeb6a5632b1b0d9a?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/changes/90238f35b68a4a7ebeb6a5632b1b0d9a?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 255 Content-Type: application/json diff --git a/docs/source/contracting/http/set-active-award.http b/docs/source/contracting/http/set-active-award.http new file mode 100644 index 0000000000..d419603fbb --- /dev/null +++ b/docs/source/contracting/http/set-active-award.http @@ -0,0 +1,56 @@ +PATCH /api/2.5/tenders/a9291ae8a98f4f2c95ade6c4e35cac43/awards/012bb32b7489497a82373211ac3555ba?acc_token=cb13f230147b40acb4fef6a0c077fa5a HTTP/1.0 +Authorization: Bearer broker +Content-Length: 30 +Content-Type: application/json +Host: lb-api-sandbox.prozorro.gov.ua +DATA: +{ + "data": { + "status": "active" + } +} + +Response: 200 OK +Content-Type: application/json +X-Content-Type-Options: nosniff +{ + "data": { + "id": "012bb32b7489497a82373211ac3555ba", + "status": "active", + "date": "2021-03-16T00:00:00+02:00", + "value": { + "amount": 500.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "suppliers": [ + { + "name": "Державне управління справами", + "identifier": { + "scheme": "UA-EDR", + "id": "00037256", + "legalName": "Державне управління справами", + "uri": "http://www.dus.gov.ua/" + }, + "address": { + "streetAddress": "вул. Банкова, 11, корпус 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "01220", + "countryName": "Україна" + }, + "contactPoint": { + "name": "Державне управління справами", + "telephone": "+0440000000" + }, + "scale": "micro" + } + ], + "bid_id": "fc924775f61346628e9700a411bd0f0b", + "complaintPeriod": { + "startDate": "2021-03-16T00:00:00+02:00", + "endDate": "2021-03-18T00:00:00+02:00" + } + } +} + diff --git a/docs/source/contracting/http/set-document-of-change.http b/docs/source/contracting/http/set-document-of-change.http index 068e2c1cfd..56a85dda4f 100644 --- a/docs/source/contracting/http/set-document-of-change.http +++ b/docs/source/contracting/http/set-document-of-change.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 85 Content-Type: application/json @@ -19,7 +19,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", diff --git a/docs/source/contracting/http/update-contract-item.http b/docs/source/contracting/http/update-contract-item.http index 286088a657..bf3b7a16a7 100644 --- a/docs/source/contracting/http/update-contract-item.http +++ b/docs/source/contracting/http/update-contract-item.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/contracts/77d160a2092f40068cba075e1dfac436?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PATCH /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 42 Content-Type: application/json @@ -20,7 +20,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "period": { @@ -34,8 +34,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 2.0, "deliveryDate": { @@ -66,8 +71,13 @@ X-Content-Type-Options: nosniff "id": "168b0c97bf1a4ce690b1e3b400be0f50", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { @@ -160,7 +170,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", diff --git a/docs/source/contracting/http/upload-contract-document-2.http b/docs/source/contracting/http/upload-contract-document-2.http index a251043be5..9a76bebaf2 100644 --- a/docs/source/contracting/http/upload-contract-document-2.http +++ b/docs/source/contracting/http/upload-contract-document-2.http @@ -1,4 +1,4 @@ -POST /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +POST /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 171 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,14 +14,14 @@ additional info Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f X-Content-Type-Options: nosniff { "data": { "id": "d72c6e6b2a7741a1910849d0446b7d3f", "title": "contract_additional_docs.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=98f487db80604f78ae7d691595fa5d9b", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=98f487db80604f78ae7d691595fa5d9b", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/upload-contract-document-3.http b/docs/source/contracting/http/upload-contract-document-3.http index 014360cd41..7e3b771266 100644 --- a/docs/source/contracting/http/upload-contract-document-3.http +++ b/docs/source/contracting/http/upload-contract-document-3.http @@ -1,4 +1,4 @@ -PUT /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +PUT /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 180 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -20,7 +20,7 @@ X-Content-Type-Options: nosniff "id": "d72c6e6b2a7741a1910849d0446b7d3f", "title": "contract_additional_docs.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=29a6f4e9de4d44debe9cdfd98a391aa3", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/d72c6e6b2a7741a1910849d0446b7d3f?download=29a6f4e9de4d44debe9cdfd98a391aa3", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/upload-contract-document.http b/docs/source/contracting/http/upload-contract-document.http index 7ab60438f2..f2a98d6819 100644 --- a/docs/source/contracting/http/upload-contract-document.http +++ b/docs/source/contracting/http/upload-contract-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 +POST /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents?acc_token=d7ef3060443a419f93a65b3aeb4f5f9b HTTP/1.0 Authorization: Bearer broker Content-Length: 147 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,14 +14,14 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/9a29a997e01d4f519250c0c8224f11bf +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/9a29a997e01d4f519250c0c8224f11bf X-Content-Type-Options: nosniff { "data": { "id": "9a29a997e01d4f519250c0c8224f11bf", "title": "contract.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/9a29a997e01d4f519250c0c8224f11bf?download=61326b7ec07643d296aa348f6a84b5e0", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/9a29a997e01d4f519250c0c8224f11bf?download=61326b7ec07643d296aa348f6a84b5e0", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "documentOf": "contract" diff --git a/docs/source/contracting/http/view-all-contract-changes.http b/docs/source/contracting/http/view-all-contract-changes.http index 11e9489e11..8c150bd5d9 100644 --- a/docs/source/contracting/http/view-all-contract-changes.http +++ b/docs/source/contracting/http/view-all-contract-changes.http @@ -1,4 +1,4 @@ -GET /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/changes HTTP/1.0 +GET /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/changes HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/contracting/http/view-contract-change.http b/docs/source/contracting/http/view-contract-change.http index c2d0ec82db..fb6233f8aa 100644 --- a/docs/source/contracting/http/view-contract-change.http +++ b/docs/source/contracting/http/view-contract-change.http @@ -1,4 +1,4 @@ -GET /api/2.5/contracts/77d160a2092f40068cba075e1dfac436/changes/90238f35b68a4a7ebeb6a5632b1b0d9a HTTP/1.0 +GET /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/changes/90238f35b68a4a7ebeb6a5632b1b0d9a HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/contracting/http/view-contract.http b/docs/source/contracting/http/view-contract.http index 42bc214cc4..0f7af24c55 100644 --- a/docs/source/contracting/http/view-contract.http +++ b/docs/source/contracting/http/view-contract.http @@ -1,4 +1,4 @@ -GET /api/2.5/contracts/77d160a2092f40068cba075e1dfac436 HTTP/1.0 +GET /api/2.5/contracts/e4e18aeb91074656a353d7429c72c077 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,7 +7,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "77d160a2092f40068cba075e1dfac436", + "id": "e4e18aeb91074656a353d7429c72c077", "awardID": "012bb32b7489497a82373211ac3555ba", "contractID": "UA-2021-03-16-000001-1", "period": { @@ -21,8 +21,13 @@ X-Content-Type-Options: nosniff "id": "299ef8cb981340528d0f7dcf2aa70caa", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 2.0, "deliveryDate": { @@ -116,7 +121,7 @@ X-Content-Type-Options: nosniff "id": "901e908a86b94c3581d0f85fd8137db3", "title": "contract_changes.doc", "format": "application/msword", - "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/77d160a2092f40068cba075e1dfac436/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", + "url": "http://lb-api-sandbox.prozorro.gov.ua/api/2.5/contracts/e4e18aeb91074656a353d7429c72c077/documents/901e908a86b94c3581d0f85fd8137db3?download=c4a63488537c437b894d08c8f4d11e28", "datePublished": "2021-03-16T00:00:01+02:00", "dateModified": "2021-03-16T00:00:01+02:00", "relatedItem": "90238f35b68a4a7ebeb6a5632b1b0d9a", diff --git a/docs/source/locale/uk/LC_MESSAGES/centralized-procurements/index.po b/docs/source/locale/uk/LC_MESSAGES/centralized-procurements/index.po index 88c8cd87cb..4ecf8d4651 100644 --- a/docs/source/locale/uk/LC_MESSAGES/centralized-procurements/index.po +++ b/docs/source/locale/uk/LC_MESSAGES/centralized-procurements/index.po @@ -65,3 +65,27 @@ msgstr "У результаті план переміщається у стат msgid "The tender `plans` field contains all the plan ids" msgstr "Поле `plans` тендеру містить всі ідентифікатори планів" + +msgid "Creation of aggregate contracts" +msgstr "Створення агрегованих контрактів" + +msgid "For each `buyer` object in tender system is creating separate `contract` respectively when `award` become active." +msgstr "Для кожного об'єктку `buyer` в тендері система створює окремий `contract` відповідно, в той момент коли `award` стає активним. " + +msgid "Create tender with several buyers, each `item` should be assigned to related `buyer` using `relatedBuyer` field :" +msgstr "Створюємо тендер з декількома buyers, кожен `item` повинен бути прив'язаний до відповідного `buyer`, використовючи поле `relatedBuyer`:" + +msgid "Move forward as usual, activate award:" +msgstr "Йдемо далі, як зазвичай, активуємо авард" + +msgid "After activating award system is creating such amount of contracts that corresponds to the amount of buyers" +msgstr "Після активації аварду система створює таку кількість об'єктів contracts, що відповідає кількості buyers в тендері" + +msgid "Update Amount.Value of each contract considering the sum of product of Unit.Value by Quantity for each item in contract." +msgstr "Оновлюємо Amount.Value для кожного контракту, враховуючи суму добутків Unit.Value на Quantity для кожного item в контракті:" + +msgid "You can activate or terminate each contract as usual. If there are not contracts in `pending` status and at least one contract became `active` tender is becoming `complete`" +msgstr "Ви можете активувати або термінувати кожен контракт як зазвичай. Якщо відсутні контракти в стутусі `pending` та хоча б один котракт знаходиться в статусі `active`, тендер переходить в статус `complete`" + +msgid "If award was cancelled, all contracts related to this awardID become in cancelled status." +msgstr "При скасуванні аварду всі контракти відповідного awardID переходять в статус cancelled." \ No newline at end of file diff --git a/docs/source/locale/uk/LC_MESSAGES/constants.po b/docs/source/locale/uk/LC_MESSAGES/constants.po index a351df41ce..3d26efbd08 100644 --- a/docs/source/locale/uk/LC_MESSAGES/constants.po +++ b/docs/source/locale/uk/LC_MESSAGES/constants.po @@ -197,3 +197,12 @@ msgstr "" msgid "VALIDATE_CURRENCY_FROM" msgstr "" + +msgid "UNIT_PRICE_REQUIRED_FROM" +msgstr "" + +msgid "MULTI_CONTRACTS_REQUIRED_FROM" +msgstr "" + +msgid "Implemented creation of aggregate contracts. Look at `centralized-procurements` source." +msgstr "" diff --git a/docs/source/locale/uk/LC_MESSAGES/tendering/limited/tutorial.po b/docs/source/locale/uk/LC_MESSAGES/tendering/limited/tutorial.po index 808f38b367..df2764d6f7 100644 --- a/docs/source/locale/uk/LC_MESSAGES/tendering/limited/tutorial.po +++ b/docs/source/locale/uk/LC_MESSAGES/tendering/limited/tutorial.po @@ -160,10 +160,13 @@ msgid "`200 OK` response was returned. The value was modified successfully." msgstr "Було повернуто код відповіді `200 OK`. Значення змінено успішно." msgid "Setting value per item's unit" -msgstr "" +msgstr "Встановлення ціни за одиницю" msgid "`200 OK` response was returned with successfully set item.unit.value structure." -msgstr "" +msgstr "`200 OK` відповіддь повертається з успішно створеною структурою item.unit.value" + +msgid "Item.unit.value.currency and Item.unit.value.valueAddedTaxIncluded are created using contract.value(if exists), otherwise using tender.value data" +msgstr "Item.unit.value.currency та Item.unit.value.valueAddedTaxIncluded створюються, використовуючи інформацію з contract.value(якщо існує), в іншому випадку з tender.value" msgid "Setting contract signature date" msgstr "Встановлення дати підписання угоди" diff --git a/docs/source/planning/tutorial/complete-plan-manually.http b/docs/source/planning/tutorial/complete-plan-manually.http index edb2792ce0..cc7b6c7ec0 100644 --- a/docs/source/planning/tutorial/complete-plan-manually.http +++ b/docs/source/planning/tutorial/complete-plan-manually.http @@ -16,6 +16,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "428556db48b941308361867b5dd5ad66", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -142,6 +143,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "4d3e5f2c4da949e4876c146bde8227bb", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/create-plan.http b/docs/source/planning/tutorial/create-plan.http index ef4d3eec21..6291d11f68 100644 --- a/docs/source/planning/tutorial/create-plan.http +++ b/docs/source/planning/tutorial/create-plan.http @@ -156,6 +156,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "ee52a77d6b5346168b3171716993bc34", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -282,6 +283,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "8f6c6dc9793b4fd8a92d6bf8627b3107", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/get-complete-plan.http b/docs/source/planning/tutorial/get-complete-plan.http index cce77d9a5f..91d75afdb4 100644 --- a/docs/source/planning/tutorial/get-complete-plan.http +++ b/docs/source/planning/tutorial/get-complete-plan.http @@ -8,6 +8,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "ee52a77d6b5346168b3171716993bc34", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -98,6 +99,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "8f6c6dc9793b4fd8a92d6bf8627b3107", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/patch-plan-breakdown.http b/docs/source/planning/tutorial/patch-plan-breakdown.http index f06f206414..f46553cb83 100644 --- a/docs/source/planning/tutorial/patch-plan-breakdown.http +++ b/docs/source/planning/tutorial/patch-plan-breakdown.http @@ -27,6 +27,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "ee52a77d6b5346168b3171716993bc34", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -116,6 +117,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "8f6c6dc9793b4fd8a92d6bf8627b3107", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/patch-plan-procuringEntity-name.http b/docs/source/planning/tutorial/patch-plan-procuringEntity-name.http index 04b1b853a4..72d3f4813e 100644 --- a/docs/source/planning/tutorial/patch-plan-procuringEntity-name.http +++ b/docs/source/planning/tutorial/patch-plan-procuringEntity-name.http @@ -40,6 +40,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "ee52a77d6b5346168b3171716993bc34", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -118,6 +119,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "8f6c6dc9793b4fd8a92d6bf8627b3107", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/patch-plan-status-scheduled.http b/docs/source/planning/tutorial/patch-plan-status-scheduled.http index 61fc93694f..a0715c276e 100644 --- a/docs/source/planning/tutorial/patch-plan-status-scheduled.http +++ b/docs/source/planning/tutorial/patch-plan-status-scheduled.http @@ -16,6 +16,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "ee52a77d6b5346168b3171716993bc34", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -142,6 +143,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "8f6c6dc9793b4fd8a92d6bf8627b3107", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/plan-cancellation-activation.http b/docs/source/planning/tutorial/plan-cancellation-activation.http index 724b7b67b5..7674f92082 100644 --- a/docs/source/planning/tutorial/plan-cancellation-activation.http +++ b/docs/source/planning/tutorial/plan-cancellation-activation.http @@ -18,6 +18,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "7354ac34eefb448bae74e9942987e64c", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -144,6 +145,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "4957be7df6b74e7ca74771675765b3b5", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/plan-cancellation.http b/docs/source/planning/tutorial/plan-cancellation.http index 3736c1aae3..6e47390e49 100644 --- a/docs/source/planning/tutorial/plan-cancellation.http +++ b/docs/source/planning/tutorial/plan-cancellation.http @@ -19,6 +19,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "7354ac34eefb448bae74e9942987e64c", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -145,6 +146,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "4957be7df6b74e7ca74771675765b3b5", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/planning/tutorial/tender-from-plan-validation.http b/docs/source/planning/tutorial/tender-from-plan-validation.http index 10025605df..c1cf7a93ad 100644 --- a/docs/source/planning/tutorial/tender-from-plan-validation.http +++ b/docs/source/planning/tutorial/tender-from-plan-validation.http @@ -1,6 +1,6 @@ POST /api/2.5/plans/18d6b21a07094c71b423e91c5e28579b/tenders HTTP/1.0 Authorization: Bearer broker -Content-Length: 4108 +Content-Length: 4277 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -72,6 +72,10 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, + "unit": { + "code": "KGM", + "name": "кілограм" + }, "quantity": 1 }, { @@ -89,6 +93,10 @@ DATA: "id": "37810000-9", "description": "Test" }, + "unit": { + "code": "PK", + "name": "упаковка" + }, "quantity": 1, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", diff --git a/docs/source/planning/tutorial/tender-from-plan.http b/docs/source/planning/tutorial/tender-from-plan.http index ac7d479a11..7b3a94b00f 100644 --- a/docs/source/planning/tutorial/tender-from-plan.http +++ b/docs/source/planning/tutorial/tender-from-plan.http @@ -201,10 +201,6 @@ X-Content-Type-Options: nosniff "description": "Насіння гірчиці" } ], - "unit": { - "name": "кг", - "code": "KGM" - }, "quantity": 1000.0, "deliveryDate": { "endDate": "2021-03-31T00:00:00+02:00" @@ -213,6 +209,10 @@ X-Content-Type-Options: nosniff "description": "Mustard seeds", "scheme": "ДК021", "id": "03111600-8" + }, + "unit": { + "name": "кг", + "code": "KGM" } }, { @@ -225,10 +225,6 @@ X-Content-Type-Options: nosniff "description": "Насіння соняшнику" } ], - "unit": { - "name": "кг", - "code": "KGM" - }, "quantity": 2000.0, "deliveryDate": { "endDate": "2021-04-01T00:00:00+02:00" @@ -237,6 +233,10 @@ X-Content-Type-Options: nosniff "description": "Sunflower seeds", "scheme": "ДК021", "id": "03111300-5" + }, + "unit": { + "name": "кг", + "code": "KGM" } }, { @@ -249,10 +249,6 @@ X-Content-Type-Options: nosniff "description": "Насіння бавовнику" } ], - "unit": { - "name": "кг", - "code": "KGM" - }, "quantity": 3000.0, "deliveryDate": { "endDate": "2021-04-02T00:00:00+02:00" @@ -261,6 +257,10 @@ X-Content-Type-Options: nosniff "description": "Cotton seeds", "scheme": "ДК021", "id": "03111400-6" + }, + "unit": { + "name": "кг", + "code": "KGM" } } ], diff --git a/docs/source/relocation/tutorial/change-agreement-ownership.http b/docs/source/relocation/tutorial/change-agreement-ownership.http index cdc6b8f808..9d5fdd8ee3 100644 --- a/docs/source/relocation/tutorial/change-agreement-ownership.http +++ b/docs/source/relocation/tutorial/change-agreement-ownership.http @@ -144,7 +144,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "classification": { diff --git a/docs/source/relocation/tutorial/change-contract-ownership.http b/docs/source/relocation/tutorial/change-contract-ownership.http index 5355644687..8db551df64 100644 --- a/docs/source/relocation/tutorial/change-contract-ownership.http +++ b/docs/source/relocation/tutorial/change-contract-ownership.http @@ -31,8 +31,13 @@ X-Content-Type-Options: nosniff "id": "c6c6e8ed4b1542e4bf13d3f98ec5ab59", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 20.8, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/relocation/tutorial/change-plan-ownership.http b/docs/source/relocation/tutorial/change-plan-ownership.http index da18944019..442b0f99b0 100644 --- a/docs/source/relocation/tutorial/change-plan-ownership.http +++ b/docs/source/relocation/tutorial/change-plan-ownership.http @@ -17,6 +17,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "060f89af2e8a473dbcb0bb755e22d1c0", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -157,6 +158,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "b0af110d237240a6b7262308d893a2f3", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/relocation/tutorial/change-tender-ownership.http b/docs/source/relocation/tutorial/change-tender-ownership.http index ced41a22f7..705fe4fe01 100644 --- a/docs/source/relocation/tutorial/change-tender-ownership.http +++ b/docs/source/relocation/tutorial/change-tender-ownership.http @@ -63,10 +63,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -83,6 +79,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/relocation/tutorial/create-plan.http b/docs/source/relocation/tutorial/create-plan.http index bc37d46d72..28b937258a 100644 --- a/docs/source/relocation/tutorial/create-plan.http +++ b/docs/source/relocation/tutorial/create-plan.http @@ -168,6 +168,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "060f89af2e8a473dbcb0bb755e22d1c0", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -308,6 +309,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "b0af110d237240a6b7262308d893a2f3", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/relocation/tutorial/create-tender.http b/docs/source/relocation/tutorial/create-tender.http index 17b70f4439..6c0c3370d6 100644 --- a/docs/source/relocation/tutorial/create-tender.http +++ b/docs/source/relocation/tutorial/create-tender.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 2950 +Content-Length: 2975 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -53,8 +53,11 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } }, "quantity": 5, "deliveryDate": { @@ -158,10 +161,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -178,6 +177,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/relocation/tutorial/get-agreement-credentials.http b/docs/source/relocation/tutorial/get-agreement-credentials.http index 5f7343c79e..956e525c78 100644 --- a/docs/source/relocation/tutorial/get-agreement-credentials.http +++ b/docs/source/relocation/tutorial/get-agreement-credentials.http @@ -141,7 +141,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "classification": { diff --git a/docs/source/relocation/tutorial/get-contract-credentials.http b/docs/source/relocation/tutorial/get-contract-credentials.http index 1263cbd0ee..df054b6a1a 100644 --- a/docs/source/relocation/tutorial/get-contract-credentials.http +++ b/docs/source/relocation/tutorial/get-contract-credentials.http @@ -28,8 +28,13 @@ X-Content-Type-Options: nosniff "id": "c6c6e8ed4b1542e4bf13d3f98ec5ab59", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 20.8, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/relocation/tutorial/modify-agreement.http b/docs/source/relocation/tutorial/modify-agreement.http index de1781c9d9..e16c723ff4 100644 --- a/docs/source/relocation/tutorial/modify-agreement.http +++ b/docs/source/relocation/tutorial/modify-agreement.http @@ -143,7 +143,7 @@ X-Content-Type-Options: nosniff "description": "футляри до державних нагород", "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "classification": { diff --git a/docs/source/relocation/tutorial/modify-contract.http b/docs/source/relocation/tutorial/modify-contract.http index d51f0a431e..216986c2ff 100644 --- a/docs/source/relocation/tutorial/modify-contract.http +++ b/docs/source/relocation/tutorial/modify-contract.http @@ -31,8 +31,13 @@ X-Content-Type-Options: nosniff "id": "c6c6e8ed4b1542e4bf13d3f98ec5ab59", "description": "футляри до державних нагород", "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "value": { + "amount": 20.8, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/relocation/tutorial/modify-plan.http b/docs/source/relocation/tutorial/modify-plan.http index 20bd6a81ad..8aad7da3ed 100644 --- a/docs/source/relocation/tutorial/modify-plan.http +++ b/docs/source/relocation/tutorial/modify-plan.http @@ -18,6 +18,7 @@ X-Content-Type-Options: nosniff { "data": { "procuringEntity": { + "id": "060f89af2e8a473dbcb0bb755e22d1c0", "name": "ДУС", "identifier": { "scheme": "UA-EDR", @@ -158,6 +159,7 @@ X-Content-Type-Options: nosniff ], "buyers": [ { + "id": "b0af110d237240a6b7262308d893a2f3", "name": "ДУС", "identifier": { "scheme": "UA-EDR", diff --git a/docs/source/relocation/tutorial/modify-tender.http b/docs/source/relocation/tutorial/modify-tender.http index 2ca6f9baab..769050c37a 100644 --- a/docs/source/relocation/tutorial/modify-tender.http +++ b/docs/source/relocation/tutorial/modify-tender.http @@ -63,10 +63,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -83,6 +79,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/cfaselectionua/tutorial/auction-url.http b/docs/source/tendering/cfaselectionua/tutorial/auction-url.http index e96608b080..38c1bef456 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/auction-url.http +++ b/docs/source/tendering/cfaselectionua/tutorial/auction-url.http @@ -65,7 +65,12 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 6.0, "deliveryDate": { @@ -452,7 +457,7 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "description_en": "Cases for state awards", diff --git a/docs/source/tendering/cfaselectionua/tutorial/blank-tender-view.http b/docs/source/tendering/cfaselectionua/tutorial/blank-tender-view.http index 00dad84e4a..9e0925c863 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/blank-tender-view.http +++ b/docs/source/tendering/cfaselectionua/tutorial/blank-tender-view.http @@ -28,7 +28,12 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/tendering/cfaselectionua/tutorial/create-tender-procuringEntity.http b/docs/source/tendering/cfaselectionua/tutorial/create-tender-procuringEntity.http index c696683486..298bf8579d 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/create-tender-procuringEntity.http +++ b/docs/source/tendering/cfaselectionua/tutorial/create-tender-procuringEntity.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3033 +Content-Length: 3070 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -48,8 +48,8 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, "quantity": 5, "relatedLot": "f2599a519a45416db792d9ee833a8e5a" @@ -128,8 +128,8 @@ X-Content-Type-Options: nosniff } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, "quantity": 5.0, "relatedLot": "f2599a519a45416db792d9ee833a8e5a", diff --git a/docs/source/tendering/cfaselectionua/tutorial/patch-items-value-periods.http b/docs/source/tendering/cfaselectionua/tutorial/patch-items-value-periods.http index be4a0a3bdd..8d8efa5296 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/cfaselectionua/tutorial/patch-items-value-periods.http @@ -43,7 +43,12 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 6.0, "deliveryDate": { @@ -414,7 +419,7 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "description_en": "Cases for state awards", diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents-again.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents-again.http index 5d830c5afd..c54b8e43ab 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents-again.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781/documents HTTP/1.0 +GET /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents.http index 27517bd6e6..be7df25bf1 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781/documents HTTP/1.0 +GET /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-period.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-period.http index 7389fcea8f..98618d6cc7 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-period.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 +PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "8db9d406966041e9942b04693ffab781", + "id": "a21911931e554424a7519d9461daa130", "contractID": "UA-2021-03-16-000004-2", "contractNumber": "contract #13111", "status": "pending", @@ -27,42 +27,6 @@ X-Content-Type-Options: nosniff "endDate": "2022-03-16T00:00:00+02:00" }, "dateSigned": "2021-03-16T00:00:00+02:00", - "items": [ - { - "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", - "description": "футляри до державних нагород", - "description_en": "futliary do derzhavnyh nagorod", - "classification": { - "description": "New Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 6.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - }, - "relatedLot": "f2599a519a45416db792d9ee833a8e5a" - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -92,7 +56,48 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 230.0 }, - "awardID": "2704d63834ca4d3c90afa97fba305c80" + "awardID": "2704d63834ca4d3c90afa97fba305c80", + "items": [ + { + "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", + "description": "футляри до державних нагород", + "description_en": "futliary do derzhavnyh nagorod", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "unit": { + "name": "item", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" + }, + "quantity": 6.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedLot": "f2599a519a45416db792d9ee833a8e5a", + "classification": { + "description": "New Cartons", + "scheme": "ДК021", + "id": "44617100-9" + } + } + ] } } diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-set-contract-value.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-set-contract-value.http index 8cabf73ca2..347d03d127 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-set-contract-value.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 +PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 Authorization: Bearer broker Content-Length: 91 Content-Type: application/json @@ -19,46 +19,10 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "8db9d406966041e9942b04693ffab781", + "id": "a21911931e554424a7519d9461daa130", "contractID": "UA-2021-03-16-000004-2", "contractNumber": "contract #13111", "status": "pending", - "items": [ - { - "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", - "description": "футляри до державних нагород", - "description_en": "futliary do derzhavnyh nagorod", - "classification": { - "description": "New Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 6.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - }, - "relatedLot": "f2599a519a45416db792d9ee833a8e5a" - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -88,7 +52,48 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 230.0 }, - "awardID": "2704d63834ca4d3c90afa97fba305c80" + "awardID": "2704d63834ca4d3c90afa97fba305c80", + "items": [ + { + "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", + "description": "футляри до державних нагород", + "description_en": "futliary do derzhavnyh nagorod", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "unit": { + "name": "item", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" + }, + "quantity": 6.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedLot": "f2599a519a45416db792d9ee833a8e5a", + "classification": { + "description": "New Cartons", + "scheme": "ДК021", + "id": "44617100-9" + } + } + ] } } diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign-date.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign-date.http index 9f5efea887..a481f46d9e 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign-date.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 +PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign.http index dc691f09c1..6f25270590 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 +PATCH /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "8db9d406966041e9942b04693ffab781", + "id": "a21911931e554424a7519d9461daa130", "contractID": "UA-2021-03-16-000004-2", "contractNumber": "contract #13111", "status": "active", @@ -24,42 +24,6 @@ X-Content-Type-Options: nosniff "endDate": "2022-03-16T00:00:00+02:00" }, "dateSigned": "2021-03-16T00:00:00+02:00", - "items": [ - { - "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", - "description": "футляри до державних нагород", - "description_en": "futliary do derzhavnyh nagorod", - "classification": { - "description": "New Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 6.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - }, - "relatedLot": "f2599a519a45416db792d9ee833a8e5a" - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -109,6 +73,47 @@ X-Content-Type-Options: nosniff "datePublished": "2021-03-16T00:00:00+02:00", "dateModified": "2021-03-16T00:00:00+02:00" } + ], + "items": [ + { + "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", + "description": "футляри до державних нагород", + "description_en": "futliary do derzhavnyh nagorod", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "unit": { + "name": "item", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" + }, + "quantity": 6.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "relatedLot": "f2599a519a45416db792d9ee833a8e5a", + "classification": { + "description": "New Cartons", + "scheme": "ДК021", + "id": "44617100-9" + } + } ] } } diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-document.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-document.http index 75f0c8ccb3..60f005aa40 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-document.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781/documents?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 +POST /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130/documents?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 Authorization: Bearer broker Content-Length: 338 Content-Type: application/json @@ -15,7 +15,7 @@ DATA: Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781/documents/66c6a0f2471644e49cf1c7808f226c24 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130/documents/66c6a0f2471644e49cf1c7808f226c24 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-second-document.http b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-second-document.http index bf792ab18a..e72d5ec482 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-second-document.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781/documents?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 +POST /api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130/documents?acc_token=1649f66a8e4c4492affe5b291314ebf9 HTTP/1.0 Authorization: Bearer broker Content-Length: 343 Content-Type: application/json @@ -15,7 +15,7 @@ DATA: Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/8db9d406966041e9942b04693ffab781/documents/a1317c7d25e6431fabfd127d9f68894f +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e08a950b18594d05b7c7318066bae24a/contracts/a21911931e554424a7519d9461daa130/documents/a1317c7d25e6431fabfd127d9f68894f X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-in-active-enquiries.http b/docs/source/tendering/cfaselectionua/tutorial/tender-in-active-enquiries.http index afd58dc905..ef59488323 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-in-active-enquiries.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-in-active-enquiries.http @@ -28,7 +28,12 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { @@ -399,7 +404,7 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" }, "quantity": 5.0, "description_en": "Cases for state awards", diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/cfaselectionua/tutorial/tender-post-attempt-json-data.http index 420e4dcd4b..4798aee190 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 2820 +Content-Length: 2837 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -60,7 +60,10 @@ DATA: ], "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM", + "value": { + "amount": 6 + } }, "quantity": 5, "deliveryAddress": { @@ -114,7 +117,12 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/tendering/cfaselectionua/tutorial/tender-switch-draft-pending.http b/docs/source/tendering/cfaselectionua/tutorial/tender-switch-draft-pending.http index 298fbed64b..e1b8b74fe4 100644 --- a/docs/source/tendering/cfaselectionua/tutorial/tender-switch-draft-pending.http +++ b/docs/source/tendering/cfaselectionua/tutorial/tender-switch-draft-pending.http @@ -36,7 +36,12 @@ X-Content-Type-Options: nosniff ], "unit": { "name": "item", - "code": "44617100-9" + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, + "code": "KGM" }, "quantity": 5.0, "deliveryDate": { diff --git a/docs/source/tendering/cfaua/tutorial/agreement-unsuccessful.http b/docs/source/tendering/cfaua/tutorial/agreement-unsuccessful.http index ee3569b189..f66970cffc 100644 --- a/docs/source/tendering/cfaua/tutorial/agreement-unsuccessful.http +++ b/docs/source/tendering/cfaua/tutorial/agreement-unsuccessful.http @@ -76,7 +76,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -110,7 +110,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/agreements-list.http b/docs/source/tendering/cfaua/tutorial/agreements-list.http index 801bed218d..ffe3f30a9a 100644 --- a/docs/source/tendering/cfaua/tutorial/agreements-list.http +++ b/docs/source/tendering/cfaua/tutorial/agreements-list.http @@ -43,7 +43,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -77,7 +77,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/auction-url.http b/docs/source/tendering/cfaua/tutorial/auction-url.http index 6c9e42e05d..2c74de94d6 100644 --- a/docs/source/tendering/cfaua/tutorial/auction-url.http +++ b/docs/source/tendering/cfaua/tutorial/auction-url.http @@ -343,7 +343,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -377,7 +377,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/blank-tender-view.http b/docs/source/tendering/cfaua/tutorial/blank-tender-view.http index ccea093680..eef849b38e 100644 --- a/docs/source/tendering/cfaua/tutorial/blank-tender-view.http +++ b/docs/source/tendering/cfaua/tutorial/blank-tender-view.http @@ -66,7 +66,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -100,7 +100,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/patch-items-value-periods.http b/docs/source/tendering/cfaua/tutorial/patch-items-value-periods.http index 1b0995cb09..0cad8e55e4 100644 --- a/docs/source/tendering/cfaua/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/cfaua/tutorial/patch-items-value-periods.http @@ -77,7 +77,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -111,7 +111,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/pre-qualification-confirmation.http b/docs/source/tendering/cfaua/tutorial/pre-qualification-confirmation.http index b0739ddefd..afc7d6113d 100644 --- a/docs/source/tendering/cfaua/tutorial/pre-qualification-confirmation.http +++ b/docs/source/tendering/cfaua/tutorial/pre-qualification-confirmation.http @@ -351,7 +351,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -385,7 +385,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/tender-agreement-get.http b/docs/source/tendering/cfaua/tutorial/tender-agreement-get.http index cdf827a248..b760b5b83e 100644 --- a/docs/source/tendering/cfaua/tutorial/tender-agreement-get.http +++ b/docs/source/tendering/cfaua/tutorial/tender-agreement-get.http @@ -67,7 +67,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -101,7 +101,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/tender-agreement-sign-date.http b/docs/source/tendering/cfaua/tutorial/tender-agreement-sign-date.http index 35ddd93ed7..1fc59ed8e3 100644 --- a/docs/source/tendering/cfaua/tutorial/tender-agreement-sign-date.http +++ b/docs/source/tendering/cfaua/tutorial/tender-agreement-sign-date.http @@ -76,7 +76,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -110,7 +110,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/tender-agreement-sign.http b/docs/source/tendering/cfaua/tutorial/tender-agreement-sign.http index 856b7bfdf6..47a8903990 100644 --- a/docs/source/tendering/cfaua/tutorial/tender-agreement-sign.http +++ b/docs/source/tendering/cfaua/tutorial/tender-agreement-sign.http @@ -80,7 +80,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -114,7 +114,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/tender-completed.http b/docs/source/tendering/cfaua/tutorial/tender-completed.http index 795cd9b3a8..cb6722561d 100644 --- a/docs/source/tendering/cfaua/tutorial/tender-completed.http +++ b/docs/source/tendering/cfaua/tutorial/tender-completed.http @@ -748,7 +748,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -782,7 +782,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], @@ -1019,7 +1019,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -1053,7 +1053,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/cfaua/tutorial/tender-post-attempt-json-data.http index 1b50c7ec26..bf52e0a9e2 100644 --- a/docs/source/tendering/cfaua/tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/cfaua/tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4408 +Content-Length: 4394 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -40,7 +40,7 @@ DATA: "items": [ { "unit": { - "code": "44617100-9", + "code": "KGM", "name": "item" }, "additionalClassifications": [ @@ -73,7 +73,7 @@ DATA: }, { "unit": { - "code": "44617100-8", + "code": "GRM", "name": "item" }, "additionalClassifications": [ @@ -215,7 +215,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -249,7 +249,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/tender-unsuccessful.http b/docs/source/tendering/cfaua/tutorial/tender-unsuccessful.http index cd8a8d476a..fb1dd7b3a0 100644 --- a/docs/source/tendering/cfaua/tutorial/tender-unsuccessful.http +++ b/docs/source/tendering/cfaua/tutorial/tender-unsuccessful.http @@ -379,7 +379,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -413,7 +413,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], @@ -650,7 +650,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -684,7 +684,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/cfaua/tutorial/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/cfaua/tutorial/update-tender-after-enqiery-with-update-periods.http index 750e128cb9..9f806ff3cf 100644 --- a/docs/source/tendering/cfaua/tutorial/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/cfaua/tutorial/update-tender-after-enqiery-with-update-periods.http @@ -123,7 +123,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM" } }, { @@ -157,7 +157,7 @@ X-Content-Type-Options: nosniff }, "unit": { "name": "item", - "code": "44617100-8" + "code": "GRM" } } ], diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/show_stage2.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/show_stage2.http index 0aed0f1ba5..12bcb40edc 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/show_stage2.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/show_stage2.http @@ -121,12 +121,12 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -155,12 +155,12 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-pending.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-pending.http index f226d35a4f..ec7fe9ee90 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-pending.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-pending.http @@ -252,10 +252,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -263,6 +259,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -286,10 +286,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -297,6 +293,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-waiting.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-waiting.http index 94dce20e93..4538676077 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-waiting.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/stage2-waiting.http @@ -260,10 +260,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -271,6 +267,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -294,10 +294,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -305,6 +301,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-add-relatedLot-to-item.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-add-relatedLot-to-item.http index 2b2d12498a..ff4c7cfd66 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-add-relatedLot-to-item.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-add-relatedLot-to-item.http @@ -151,10 +151,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -162,6 +158,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -185,10 +185,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -196,6 +192,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-post-attempt-json-data.http index d1d2f7de71..1f7ef74cf8 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4209 +Content-Length: 4282 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -72,11 +72,11 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, - "quantity": 1, "unit": { - "code": "44617100-9", - "name": "item" - } + "code": "KGM", + "name": "кілограм" + }, + "quantity": 1 }, { "additionalClassifications": [ @@ -93,6 +93,10 @@ DATA: "id": "37810000-9", "description": "Test" }, + "unit": { + "code": "PK", + "name": "упаковка" + }, "quantity": 1, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", @@ -104,10 +108,6 @@ DATA: "region": "м. Київ", "locality": "м. Київ", "streetAddress": "вул. Банкова 1" - }, - "unit": { - "code": "44617100-9", - "name": "item" } } ], @@ -238,16 +238,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -271,16 +271,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http index f3e7e7bf43..fac7bc09c9 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http @@ -260,10 +260,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -271,6 +267,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -294,10 +294,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -305,6 +301,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification.http index f99194e7c1..312912e479 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view-pre-qualification.http @@ -251,10 +251,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -262,6 +258,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -285,10 +285,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -296,6 +292,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view.http index 5f7cda8d7b..fec04303c6 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender-view.http @@ -135,10 +135,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -146,6 +142,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -169,10 +169,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -180,6 +176,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage1_complete.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage1_complete.http index eaddaa20cf..c2a76b02e3 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage1_complete.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage1_complete.http @@ -281,10 +281,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", "classification": { @@ -292,6 +288,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -315,10 +315,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", "classification": { @@ -326,6 +322,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage2_modify_status.http b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage2_modify_status.http index 908afa600c..ea9ec23303 100644 --- a/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage2_modify_status.http +++ b/docs/source/tendering/competitivedialogue/multiple_lots_tutorial/tender_stage2_modify_status.http @@ -129,12 +129,12 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "150e2750fa2942ce9315e80ddf78a62a", + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -163,12 +163,12 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "relatedLot": "a18842d9d4a349c799437d0102e40965", + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/blank-tender-view.http b/docs/source/tendering/competitivedialogue/tutorial/blank-tender-view.http index 1da8145137..09d08bc1ab 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/blank-tender-view.http +++ b/docs/source/tendering/competitivedialogue/tutorial/blank-tender-view.http @@ -99,16 +99,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -132,16 +132,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/patch-items-value-periods.http b/docs/source/tendering/competitivedialogue/tutorial/patch-items-value-periods.http index dbe3088e60..0dceec6539 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/competitivedialogue/tutorial/patch-items-value-periods.http @@ -110,16 +110,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -143,16 +143,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/pre-qualification-confirmation.http b/docs/source/tendering/competitivedialogue/tutorial/pre-qualification-confirmation.http index 14911e432b..2468d1e461 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/pre-qualification-confirmation.http +++ b/docs/source/tendering/competitivedialogue/tutorial/pre-qualification-confirmation.http @@ -380,16 +380,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -413,16 +413,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/set-bid-guarantee.http b/docs/source/tendering/competitivedialogue/tutorial/set-bid-guarantee.http index 0c63ea8176..040e1ba102 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/set-bid-guarantee.http +++ b/docs/source/tendering/competitivedialogue/tutorial/set-bid-guarantee.http @@ -115,16 +115,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -148,16 +148,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2-pending.http b/docs/source/tendering/competitivedialogue/tutorial/stage2-pending.http index ad357afb33..385be547ae 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2-pending.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2-pending.http @@ -392,16 +392,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -425,16 +425,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2-waiting.http b/docs/source/tendering/competitivedialogue/tutorial/stage2-waiting.http index df5edda29e..4f55336945 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2-waiting.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2-waiting.http @@ -400,16 +400,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -433,16 +433,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/auction-url.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/auction-url.http index 95b2faab86..f95051b1ca 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/auction-url.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/auction-url.http @@ -334,11 +334,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/patch-tender-periods.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/patch-tender-periods.http index 111c599c5e..370ed955a5 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/patch-tender-periods.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/patch-tender-periods.http @@ -109,11 +109,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -142,11 +142,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "упаковка", + "code": "PK" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/pre-qualification-confirmation.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/pre-qualification-confirmation.http index 97cf1a4903..d4434e56e9 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/pre-qualification-confirmation.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/pre-qualification-confirmation.http @@ -342,11 +342,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/qualifications-listing.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/qualifications-listing.http index a0c5f30784..a0623e4302 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/qualifications-listing.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/qualifications-listing.http @@ -327,11 +327,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-activate.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-activate.http index 3aadec7e11..ed3e9e7a85 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-activate.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-activate.http @@ -111,11 +111,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -144,11 +144,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "упаковка", + "code": "PK" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents-again.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents-again.http index 2d948f137e..d8b440e55f 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents-again.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents HTTP/1.0 +GET /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents.http index 40d64dfcff..0c6f82be6b 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents HTTP/1.0 +GET /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get.http index 68c930802c..168813b12f 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-get.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +GET /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,7 +7,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "e605f02b124a4f0ba1b73e911b8aaad0", + "id": "f725e638eb6e4019976025c1965779b9", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -84,11 +84,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-patch-document.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-patch-document.http index 8e6f2160cc..472750d3c6 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-patch-document.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-patch-document.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents/f899f8460f4543179f814d530342e79a?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents/f899f8460f4543179f814d530342e79a?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Content-Length: 106 Content-Type: application/json diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-period.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-period.http index 4b8fb24448..1d2f48659b 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-period.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "e605f02b124a4f0ba1b73e911b8aaad0", + "id": "f725e638eb6e4019976025c1965779b9", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -69,11 +69,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-set-contract-value.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-set-contract-value.http index 93a97be9a9..b883904814 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-set-contract-value.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Content-Length: 86 Content-Type: application/json @@ -19,7 +19,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "e605f02b124a4f0ba1b73e911b8aaad0", + "id": "f725e638eb6e4019976025c1965779b9", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -65,11 +65,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-sign-date.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-sign-date.http index ca0e6be87d..325e0355c7 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-sign-date.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +PATCH /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "e605f02b124a4f0ba1b73e911b8aaad0", + "id": "f725e638eb6e4019976025c1965779b9", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -62,11 +62,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-document.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-document.http index 54da761655..878527c037 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-document.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +POST /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Content-Length: 162 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents/64ed4bedb0044d06997a2771ddf5c20f +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents/64ed4bedb0044d06997a2771ddf5c20f X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-second-document.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-second-document.http index 5bb1d7629d..c85a2abf5d 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-second-document.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 +POST /api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents?acc_token=3ba9d3fdf58a40ac8a19d43f43de9e28 HTTP/1.0 Authorization: Bearer broker Content-Length: 163 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/e605f02b124a4f0ba1b73e911b8aaad0/documents/f899f8460f4543179f814d530342e79a +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/db1ddb06a5a44954bc0b9f555776112d/contracts/f725e638eb6e4019976025c1965779b9/documents/f899f8460f4543179f814d530342e79a X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/update-tender-after-enqiery-with-update-periods.http index a96fd00bd0..a2f59236c4 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/EU/update-tender-after-enqiery-with-update-periods.http @@ -169,11 +169,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/auction-url.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/auction-url.http index a2e0d6dfcf..abecb3bc84 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/auction-url.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/auction-url.http @@ -145,11 +145,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/patch-tender-periods.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/patch-tender-periods.http index 1687079b50..16d640f042 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/patch-tender-periods.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/patch-tender-periods.http @@ -103,11 +103,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-activate.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-activate.http index 5fe56ede2d..0230f80830 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-activate.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-activate.http @@ -105,11 +105,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-get.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-get.http index 89f972fc35..d6d9c7cb1b 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-get.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-get.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/7736a09ac3774898acffbed382b13b52?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 +GET /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/b149e882192648f5964d55614c2d30c5?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,7 +7,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7736a09ac3774898acffbed382b13b52", + "id": "b149e882192648f5964d55614c2d30c5", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -69,11 +69,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-period.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-period.http index 0a9951cfe2..7d4e625f23 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-period.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/7736a09ac3774898acffbed382b13b52?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 +PATCH /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/b149e882192648f5964d55614c2d30c5?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7736a09ac3774898acffbed382b13b52", + "id": "b149e882192648f5964d55614c2d30c5", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -68,11 +68,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-set-contract-value.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-set-contract-value.http index 0084cea53d..cc2c78e3e7 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-set-contract-value.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/7736a09ac3774898acffbed382b13b52?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 +PATCH /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/b149e882192648f5964d55614c2d30c5?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 Authorization: Bearer broker Content-Length: 54 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7736a09ac3774898acffbed382b13b52", + "id": "b149e882192648f5964d55614c2d30c5", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "suppliers": [ @@ -63,11 +63,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-sign-date.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-sign-date.http index 07e8f5d24c..eda30055a1 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-sign-date.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/7736a09ac3774898acffbed382b13b52?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 +PATCH /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/b149e882192648f5964d55614c2d30c5?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7736a09ac3774898acffbed382b13b52", + "id": "b149e882192648f5964d55614c2d30c5", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "dateSigned": "2021-03-16T00:00:03+02:00", @@ -61,11 +61,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-upload-document.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-upload-document.http index 8436a95aa8..83178f7395 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-upload-document.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/7736a09ac3774898acffbed382b13b52/documents?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 +POST /api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/b149e882192648f5964d55614c2d30c5/documents?acc_token=9234ea997d5a428fb67b1ae603020b64 HTTP/1.0 Authorization: Bearer broker Content-Length: 156 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/7736a09ac3774898acffbed382b13b52/documents/c214d9fee7f940009c2c2b0c31d5c8df +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/db4876add6b747dfafc1b99523c02097/contracts/b149e882192648f5964d55614c2d30c5/documents/c214d9fee7f940009c2c2b0c31d5c8df X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/update-tender-after-enqiery-with-update-periods.http index ec84deb442..9b3add1617 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/competitivedialogue/tutorial/stage2/UA/update-tender-after-enqiery-with-update-periods.http @@ -160,11 +160,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-04-16T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/competitivedialogue/tutorial/tender-post-attempt-json-data.http index 98767c148f..b6aef3a594 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/competitivedialogue/tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4209 +Content-Length: 4282 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -72,11 +72,11 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, - "quantity": 1, "unit": { - "code": "44617100-9", - "name": "item" - } + "code": "KGM", + "name": "кілограм" + }, + "quantity": 1 }, { "additionalClassifications": [ @@ -93,6 +93,10 @@ DATA: "id": "37810000-9", "description": "Test" }, + "unit": { + "code": "PK", + "name": "упаковка" + }, "quantity": 1, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", @@ -104,10 +108,6 @@ DATA: "region": "м. Київ", "locality": "м. Київ", "streetAddress": "вул. Банкова 1" - }, - "unit": { - "code": "44617100-9", - "name": "item" } } ], @@ -238,16 +238,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -271,16 +271,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/tender_stage1_complete.http b/docs/source/tendering/competitivedialogue/tutorial/tender_stage1_complete.http index 9222975365..368ecfbbc3 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/tender_stage1_complete.http +++ b/docs/source/tendering/competitivedialogue/tutorial/tender_stage1_complete.http @@ -402,16 +402,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -435,16 +435,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_get_token.http b/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_get_token.http index 54e95be6b2..36336a85f0 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_get_token.http +++ b/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_get_token.http @@ -103,11 +103,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -136,11 +136,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "упаковка", + "code": "PK" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_modify_status.http b/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_modify_status.http index 6507191649..585ab2aeec 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_modify_status.http +++ b/docs/source/tendering/competitivedialogue/tutorial/tender_stage2_modify_status.http @@ -111,11 +111,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -144,11 +144,11 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], + "quantity": 1.0, "unit": { - "name": "item", - "code": "44617100-9" + "name": "упаковка", + "code": "PK" }, - "quantity": 1.0, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery-with-update-periods.http index d0a25d6c4b..b9d0bae73e 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery-with-update-periods.http @@ -167,16 +167,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -200,16 +200,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery.http b/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery.http index d71307960d..11701566a7 100644 --- a/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery.http +++ b/docs/source/tendering/competitivedialogue/tutorial/update-tender-after-enqiery.http @@ -153,16 +153,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -186,16 +186,16 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 1.0, "classification": { "description": "Test", "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/auction-url.http b/docs/source/tendering/defense/http/auction-url.http index f09002e092..9078aa5b66 100644 --- a/docs/source/tendering/defense/http/auction-url.http +++ b/docs/source/tendering/defense/http/auction-url.http @@ -133,6 +133,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/blank-tender-view.http b/docs/source/tendering/defense/http/blank-tender-view.http index 2ca032590c..a427a91f9b 100644 --- a/docs/source/tendering/defense/http/blank-tender-view.http +++ b/docs/source/tendering/defense/http/blank-tender-view.http @@ -80,6 +80,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/patch-items-value-periods.http b/docs/source/tendering/defense/http/patch-items-value-periods.http index 82ac4d9b4e..3e15c5abe9 100644 --- a/docs/source/tendering/defense/http/patch-items-value-periods.http +++ b/docs/source/tendering/defense/http/patch-items-value-periods.http @@ -91,6 +91,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/set-bid-guarantee.http b/docs/source/tendering/defense/http/set-bid-guarantee.http index f943d79a6a..031d7ca870 100644 --- a/docs/source/tendering/defense/http/set-bid-guarantee.http +++ b/docs/source/tendering/defense/http/set-bid-guarantee.http @@ -96,6 +96,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/tender-contract-get.http b/docs/source/tendering/defense/http/tender-contract-get.http index a8c4dee41b..0fa6c9a702 100644 --- a/docs/source/tendering/defense/http/tender-contract-get.http +++ b/docs/source/tendering/defense/http/tender-contract-get.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/f190bafc3826498f9de5daa525e5e68b?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 +GET /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/6d7783508bcb40018036455355558edd?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,7 +7,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f190bafc3826498f9de5daa525e5e68b", + "id": "6d7783508bcb40018036455355558edd", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -75,6 +75,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/tender-contract-period.http b/docs/source/tendering/defense/http/tender-contract-period.http index 710cb15622..1534b8f147 100644 --- a/docs/source/tendering/defense/http/tender-contract-period.http +++ b/docs/source/tendering/defense/http/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/f190bafc3826498f9de5daa525e5e68b?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 +PATCH /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/6d7783508bcb40018036455355558edd?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f190bafc3826498f9de5daa525e5e68b", + "id": "6d7783508bcb40018036455355558edd", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -74,6 +74,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/tender-contract-set-contract-value.http b/docs/source/tendering/defense/http/tender-contract-set-contract-value.http index 1cd70987b4..53473d53d5 100644 --- a/docs/source/tendering/defense/http/tender-contract-set-contract-value.http +++ b/docs/source/tendering/defense/http/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/f190bafc3826498f9de5daa525e5e68b?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 +PATCH /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/6d7783508bcb40018036455355558edd?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 Authorization: Bearer broker Content-Length: 54 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f190bafc3826498f9de5daa525e5e68b", + "id": "6d7783508bcb40018036455355558edd", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "suppliers": [ @@ -69,6 +69,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/tender-contract-sign-date.http b/docs/source/tendering/defense/http/tender-contract-sign-date.http index c15ac6cf1d..e5401dc1ab 100644 --- a/docs/source/tendering/defense/http/tender-contract-sign-date.http +++ b/docs/source/tendering/defense/http/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/f190bafc3826498f9de5daa525e5e68b?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 +PATCH /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/6d7783508bcb40018036455355558edd?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f190bafc3826498f9de5daa525e5e68b", + "id": "6d7783508bcb40018036455355558edd", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "dateSigned": "2021-03-16T00:00:03+02:00", @@ -67,6 +67,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/tender-contract-upload-document.http b/docs/source/tendering/defense/http/tender-contract-upload-document.http index 41eb7204d8..b46d538e4c 100644 --- a/docs/source/tendering/defense/http/tender-contract-upload-document.http +++ b/docs/source/tendering/defense/http/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/f190bafc3826498f9de5daa525e5e68b/documents?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 +POST /api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/6d7783508bcb40018036455355558edd/documents?acc_token=38dfa7b7e6ef4691b199e71e4247e9dc HTTP/1.0 Authorization: Bearer broker Content-Length: 156 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/f190bafc3826498f9de5daa525e5e68b/documents/feed2076a94a48e1810496af9b9e403e +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/f8aae737ac8f4d34a52254e2f3416505/contracts/6d7783508bcb40018036455355558edd/documents/feed2076a94a48e1810496af9b9e403e X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/defense/http/tender-post-attempt-json-data.http b/docs/source/tendering/defense/http/tender-post-attempt-json-data.http index 67e8a049fc..ae3484c4df 100644 --- a/docs/source/tendering/defense/http/tender-post-attempt-json-data.http +++ b/docs/source/tendering/defense/http/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3059 +Content-Length: 3151 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -66,6 +66,13 @@ DATA: "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ], @@ -177,6 +184,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/defense/http/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/defense/http/update-tender-after-enqiery-with-update-periods.http index 76fc1ef6b3..fcbdede4ee 100644 --- a/docs/source/tendering/defense/http/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/defense/http/update-tender-after-enqiery-with-update-periods.http @@ -146,6 +146,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/esco/multiple_lots_tutorial/tender-add-relatedLot-to-item.http b/docs/source/tendering/esco/multiple_lots_tutorial/tender-add-relatedLot-to-item.http index f293b33eef..5fc3d68e75 100644 --- a/docs/source/tendering/esco/multiple_lots_tutorial/tender-add-relatedLot-to-item.http +++ b/docs/source/tendering/esco/multiple_lots_tutorial/tender-add-relatedLot-to-item.http @@ -69,10 +69,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "93256198e2e7429ab4d0300cc250244f", "classification": { "description": "Test", @@ -98,10 +94,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "ae36b7ca7b4a44d8b3c015a3e4043f4f", "classification": { "description": "Test", diff --git a/docs/source/tendering/esco/multiple_lots_tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/esco/multiple_lots_tutorial/tender-post-attempt-json-data.http index 45508d864a..5a0ffa8425 100644 --- a/docs/source/tendering/esco/multiple_lots_tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/esco/multiple_lots_tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4220 +Content-Length: 4124 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -65,11 +65,7 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, - "quantity": 1, - "unit": { - "code": "44617100-9", - "name": "item" - } + "quantity": 1 }, { "additionalClassifications": [ @@ -97,10 +93,6 @@ DATA: "region": "м. Київ", "locality": "м. Київ", "streetAddress": "вул. Банкова 1" - }, - "unit": { - "code": "44617100-9", - "name": "item" } } ], @@ -189,10 +181,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -217,10 +205,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http b/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http index 9d659063cf..2be724fdea 100644 --- a/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http +++ b/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http @@ -62,10 +62,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "93256198e2e7429ab4d0300cc250244f", "classification": { "description": "Test", @@ -91,10 +87,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "ae36b7ca7b4a44d8b3c015a3e4043f4f", "classification": { "description": "Test", diff --git a/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification.http b/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification.http index 7f83190e59..3f5e8c5a73 100644 --- a/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification.http +++ b/docs/source/tendering/esco/multiple_lots_tutorial/tender-view-pre-qualification.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "93256198e2e7429ab4d0300cc250244f", "classification": { "description": "Test", @@ -83,10 +79,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "ae36b7ca7b4a44d8b3c015a3e4043f4f", "classification": { "description": "Test", diff --git a/docs/source/tendering/esco/multiple_lots_tutorial/tender-view.http b/docs/source/tendering/esco/multiple_lots_tutorial/tender-view.http index 598faadbb3..49336b1f4f 100644 --- a/docs/source/tendering/esco/multiple_lots_tutorial/tender-view.http +++ b/docs/source/tendering/esco/multiple_lots_tutorial/tender-view.http @@ -53,10 +53,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "93256198e2e7429ab4d0300cc250244f", "classification": { "description": "Test", @@ -82,10 +78,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "relatedLot": "ae36b7ca7b4a44d8b3c015a3e4043f4f", "classification": { "description": "Test", diff --git a/docs/source/tendering/esco/tutorial/auction-url.http b/docs/source/tendering/esco/tutorial/auction-url.http index d28d8fa9b1..22f5accf58 100644 --- a/docs/source/tendering/esco/tutorial/auction-url.http +++ b/docs/source/tendering/esco/tutorial/auction-url.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -82,10 +78,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/blank-tender-view.http b/docs/source/tendering/esco/tutorial/blank-tender-view.http index 5e0cca397c..9ca11b374f 100644 --- a/docs/source/tendering/esco/tutorial/blank-tender-view.http +++ b/docs/source/tendering/esco/tutorial/blank-tender-view.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -82,10 +78,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/patch-items-value-periods.http b/docs/source/tendering/esco/tutorial/patch-items-value-periods.http index 8d0aee6bad..9000afe709 100644 --- a/docs/source/tendering/esco/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/esco/tutorial/patch-items-value-periods.http @@ -64,10 +64,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -92,10 +88,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/pre-qualification-confirmation.http b/docs/source/tendering/esco/tutorial/pre-qualification-confirmation.http index b7d646ea68..7347380ce3 100644 --- a/docs/source/tendering/esco/tutorial/pre-qualification-confirmation.http +++ b/docs/source/tendering/esco/tutorial/pre-qualification-confirmation.http @@ -62,10 +62,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -90,10 +86,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/qualifications-listing.http b/docs/source/tendering/esco/tutorial/qualifications-listing.http index 8ca3a5faff..deb6518503 100644 --- a/docs/source/tendering/esco/tutorial/qualifications-listing.http +++ b/docs/source/tendering/esco/tutorial/qualifications-listing.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -82,10 +78,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/set-bid-guarantee.http b/docs/source/tendering/esco/tutorial/set-bid-guarantee.http index 21571503f0..73a61e09ea 100644 --- a/docs/source/tendering/esco/tutorial/set-bid-guarantee.http +++ b/docs/source/tendering/esco/tutorial/set-bid-guarantee.http @@ -65,10 +65,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -93,10 +89,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/tender-cancelled.http b/docs/source/tendering/esco/tutorial/tender-cancelled.http index fa9ede25af..b6549ae41d 100644 --- a/docs/source/tendering/esco/tutorial/tender-cancelled.http +++ b/docs/source/tendering/esco/tutorial/tender-cancelled.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -82,10 +78,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -493,7 +485,7 @@ X-Content-Type-Options: nosniff ], "contracts": [ { - "id": "822f9c9611d5481da7dd19a283e8bb45", + "id": "a76cc37cebfc4323b5f352742483bc38", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -599,10 +591,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -627,10 +615,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/tender-contract-get-documents-again.http b/docs/source/tendering/esco/tutorial/tender-contract-get-documents-again.http index d4a5556901..00e942ce61 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-get-documents-again.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents HTTP/1.0 +GET /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/esco/tutorial/tender-contract-get-documents.http b/docs/source/tendering/esco/tutorial/tender-contract-get-documents.http index 04072c3b2c..e849f22919 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-get-documents.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents HTTP/1.0 +GET /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/esco/tutorial/tender-contract-get-separate.http b/docs/source/tendering/esco/tutorial/tender-contract-get-separate.http index 259d1f6c0e..2bb0f8ae77 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-get-separate.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-get-separate.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents/684c8d2eb94141d79dbe3d4d2eee7ae6?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +GET /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents/684c8d2eb94141d79dbe3d4d2eee7ae6?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/esco/tutorial/tender-contract-patch-document.http b/docs/source/tendering/esco/tutorial/tender-contract-patch-document.http index 1d497d7b9a..c3d070e4c9 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-patch-document.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-patch-document.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents/da68edd00d5d405bbd8987353fb01e9c?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents/da68edd00d5d405bbd8987353fb01e9c?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Content-Length: 106 Content-Type: application/json diff --git a/docs/source/tendering/esco/tutorial/tender-contract-period.http b/docs/source/tendering/esco/tutorial/tender-contract-period.http index fd565e7605..734698a92a 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-period.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "822f9c9611d5481da7dd19a283e8bb45", + "id": "a76cc37cebfc4323b5f352742483bc38", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -98,10 +98,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -126,10 +122,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/tender-contract-set-contract-value.http b/docs/source/tendering/esco/tutorial/tender-contract-set-contract-value.http index 4155893220..0dbacf46fd 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-set-contract-value.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Content-Length: 74 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "822f9c9611d5481da7dd19a283e8bb45", + "id": "a76cc37cebfc4323b5f352742483bc38", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -93,10 +93,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -121,10 +117,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/tender-contract-sign-date.http b/docs/source/tendering/esco/tutorial/tender-contract-sign-date.http index 039a3859df..518212fbb9 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-sign-date.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +PATCH /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "822f9c9611d5481da7dd19a283e8bb45", + "id": "a76cc37cebfc4323b5f352742483bc38", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -91,10 +91,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -119,10 +115,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/tender-contract-upload-document.http b/docs/source/tendering/esco/tutorial/tender-contract-upload-document.http index 853bafda12..800abe10a0 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-upload-document.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +POST /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Content-Length: 162 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents/684c8d2eb94141d79dbe3d4d2eee7ae6 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents/684c8d2eb94141d79dbe3d4d2eee7ae6 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/esco/tutorial/tender-contract-upload-second-document.http b/docs/source/tendering/esco/tutorial/tender-contract-upload-second-document.http index 59e92d63c8..c9ff54591e 100644 --- a/docs/source/tendering/esco/tutorial/tender-contract-upload-second-document.http +++ b/docs/source/tendering/esco/tutorial/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 +POST /api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents?acc_token=7cb87b2d0f3d446993a6da1f03746396 HTTP/1.0 Authorization: Bearer broker Content-Length: 163 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/822f9c9611d5481da7dd19a283e8bb45/documents/da68edd00d5d405bbd8987353fb01e9c +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/33f610abd0a54c8bb1da547c377a3324/contracts/a76cc37cebfc4323b5f352742483bc38/documents/da68edd00d5d405bbd8987353fb01e9c X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/esco/tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/esco/tutorial/tender-post-attempt-json-data.http index f30c4085f5..f5c0c9b2a8 100644 --- a/docs/source/tendering/esco/tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/esco/tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4220 +Content-Length: 4124 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -65,11 +65,7 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, - "quantity": 1, - "unit": { - "code": "44617100-9", - "name": "item" - } + "quantity": 1 }, { "additionalClassifications": [ @@ -97,10 +93,6 @@ DATA: "region": "м. Київ", "locality": "м. Київ", "streetAddress": "вул. Банкова 1" - }, - "unit": { - "code": "44617100-9", - "name": "item" } } ], @@ -189,10 +181,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -217,10 +205,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/esco/tutorial/update-tender-after-enqiery-with-update-periods.http index 1d4a944947..f9f1b9d49c 100644 --- a/docs/source/tendering/esco/tutorial/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/esco/tutorial/update-tender-after-enqiery-with-update-periods.http @@ -68,10 +68,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -96,10 +92,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/esco/tutorial/update-tender-after-enqiery.http b/docs/source/tendering/esco/tutorial/update-tender-after-enqiery.http index 8d7322ba33..329218a2c4 100644 --- a/docs/source/tendering/esco/tutorial/update-tender-after-enqiery.http +++ b/docs/source/tendering/esco/tutorial/update-tender-after-enqiery.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", @@ -82,10 +78,6 @@ X-Content-Type-Options: nosniff "description": "Послуги шкільних їдалень" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "classification": { "description": "Test", "scheme": "ДК021", diff --git a/docs/source/tendering/http/milestones/tender-patch-lot-milestones.http b/docs/source/tendering/http/milestones/tender-patch-lot-milestones.http index fd6cdb128e..a861a20d98 100644 --- a/docs/source/tendering/http/milestones/tender-patch-lot-milestones.http +++ b/docs/source/tendering/http/milestones/tender-patch-lot-milestones.http @@ -72,10 +72,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -92,6 +88,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/milestones/tender-patch-milestones.http b/docs/source/tendering/http/milestones/tender-patch-milestones.http index 856d76adfa..6a33a975c5 100644 --- a/docs/source/tendering/http/milestones/tender-patch-milestones.http +++ b/docs/source/tendering/http/milestones/tender-patch-milestones.http @@ -69,10 +69,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -89,6 +85,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/milestones/tender-post-milestones.http b/docs/source/tendering/http/milestones/tender-post-milestones.http index d2e08719f8..54a3feffe3 100644 --- a/docs/source/tendering/http/milestones/tender-post-milestones.http +++ b/docs/source/tendering/http/milestones/tender-post-milestones.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders HTTP/1.0 Authorization: Bearer broker -Content-Length: 2906 +Content-Length: 2931 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -53,8 +53,11 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } }, "quantity": 5, "deliveryDate": { @@ -157,10 +160,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -177,6 +176,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/auction-url.http b/docs/source/tendering/http/tutorial/auction-url.http index 163c08a9de..410c208ed3 100644 --- a/docs/source/tendering/http/tutorial/auction-url.http +++ b/docs/source/tendering/http/tutorial/auction-url.http @@ -115,10 +115,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -135,6 +131,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/blank-tender-view.http b/docs/source/tendering/http/tutorial/blank-tender-view.http index b699c42442..a557c119e8 100644 --- a/docs/source/tendering/http/tutorial/blank-tender-view.http +++ b/docs/source/tendering/http/tutorial/blank-tender-view.http @@ -54,10 +54,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -74,6 +70,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/create-tender-funders.http b/docs/source/tendering/http/tutorial/create-tender-funders.http index 55565a98de..8b035fd1df 100644 --- a/docs/source/tendering/http/tutorial/create-tender-funders.http +++ b/docs/source/tendering/http/tutorial/create-tender-funders.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3973 +Content-Length: 3998 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -53,8 +53,11 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } }, "quantity": 5, "deliveryDate": { @@ -207,10 +210,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -227,6 +226,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/create-tender-procuringEntity.http b/docs/source/tendering/http/tutorial/create-tender-procuringEntity.http index 1c4cc2caf5..fdfadd05bf 100644 --- a/docs/source/tendering/http/tutorial/create-tender-procuringEntity.http +++ b/docs/source/tendering/http/tutorial/create-tender-procuringEntity.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4584 +Content-Length: 4621 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -56,8 +56,8 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, "quantity": 5 } @@ -198,15 +198,15 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "classification": { "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кілограм", + "code": "KGM" } } ], diff --git a/docs/source/tendering/http/tutorial/patch-items-value-periods.http b/docs/source/tendering/http/tutorial/patch-items-value-periods.http index 545d9911e1..768cd9fe4b 100644 --- a/docs/source/tendering/http/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/http/tutorial/patch-items-value-periods.http @@ -64,10 +64,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -84,6 +80,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/patch-tender-funders.http b/docs/source/tendering/http/tutorial/patch-tender-funders.http index 4771206063..cdcf0ebd08 100644 --- a/docs/source/tendering/http/tutorial/patch-tender-funders.http +++ b/docs/source/tendering/http/tutorial/patch-tender-funders.http @@ -110,10 +110,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -130,6 +126,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/set-bid-guarantee.http b/docs/source/tendering/http/tutorial/set-bid-guarantee.http index 86ad018210..da8b4e66e7 100644 --- a/docs/source/tendering/http/tutorial/set-bid-guarantee.http +++ b/docs/source/tendering/http/tutorial/set-bid-guarantee.http @@ -89,10 +89,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -109,6 +105,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/tender-contract-get-contract-value.http b/docs/source/tendering/http/tutorial/tender-contract-get-contract-value.http index 72cd122ead..ab9d5f223f 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-get-contract-value.http +++ b/docs/source/tendering/http/tutorial/tender-contract-get-contract-value.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699 HTTP/1.0 +GET /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,43 +7,9 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "027191b3845a4d5ea4a8d7c448a2b699", + "id": "1ba34a7e1eb34f1db53c305525332f9f", "contractID": "UA-2021-03-16-000001-1", "status": "pending", - "items": [ - { - "id": "ca8069063cb44e45afe6bb5f71ef33f8", - "description": "футляри до державних нагород", - "classification": { - "description": "Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 5.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "ДКП «Книга»", @@ -74,7 +40,46 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 499.0 }, - "awardID": "c445545f4abb4af5a4a7d839b902beb2" + "awardID": "c445545f4abb4af5a4a7d839b902beb2", + "items": [ + { + "id": "ca8069063cb44e45afe6bb5f71ef33f8", + "description": "футляри до державних нагород", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } } diff --git a/docs/source/tendering/http/tutorial/tender-contract-get-documents-again.http b/docs/source/tendering/http/tutorial/tender-contract-get-documents-again.http index 04805b1ac0..2337d435df 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-get-documents-again.http +++ b/docs/source/tendering/http/tutorial/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699/documents HTTP/1.0 +GET /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/http/tutorial/tender-contract-get-documents.http b/docs/source/tendering/http/tutorial/tender-contract-get-documents.http index 8af5ce6188..95959d8955 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-get-documents.http +++ b/docs/source/tendering/http/tutorial/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699/documents HTTP/1.0 +GET /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/http/tutorial/tender-contract-period.http b/docs/source/tendering/http/tutorial/tender-contract-period.http index d12227ffc2..b5273fb035 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-period.http +++ b/docs/source/tendering/http/tutorial/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 +PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "027191b3845a4d5ea4a8d7c448a2b699", + "id": "1ba34a7e1eb34f1db53c305525332f9f", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract #13111", "status": "pending", @@ -27,40 +27,6 @@ X-Content-Type-Options: nosniff "endDate": "2022-03-16T00:00:03+02:00" }, "dateSigned": "2021-03-16T00:00:03+02:00", - "items": [ - { - "id": "ca8069063cb44e45afe6bb5f71ef33f8", - "description": "футляри до державних нагород", - "classification": { - "description": "Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 5.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "ДКП «Книга»", @@ -91,7 +57,46 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 230.0 }, - "awardID": "c445545f4abb4af5a4a7d839b902beb2" + "awardID": "c445545f4abb4af5a4a7d839b902beb2", + "items": [ + { + "id": "ca8069063cb44e45afe6bb5f71ef33f8", + "description": "футляри до державних нагород", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } } diff --git a/docs/source/tendering/http/tutorial/tender-contract-set-contract-value.http b/docs/source/tendering/http/tutorial/tender-contract-set-contract-value.http index ce50545fa5..ba9243cd73 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-set-contract-value.http +++ b/docs/source/tendering/http/tutorial/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 +PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 Authorization: Bearer broker Content-Length: 91 Content-Type: application/json @@ -19,44 +19,10 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "027191b3845a4d5ea4a8d7c448a2b699", + "id": "1ba34a7e1eb34f1db53c305525332f9f", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract #13111", "status": "pending", - "items": [ - { - "id": "ca8069063cb44e45afe6bb5f71ef33f8", - "description": "футляри до державних нагород", - "classification": { - "description": "Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 5.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "ДКП «Книга»", @@ -87,7 +53,46 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 230.0 }, - "awardID": "c445545f4abb4af5a4a7d839b902beb2" + "awardID": "c445545f4abb4af5a4a7d839b902beb2", + "items": [ + { + "id": "ca8069063cb44e45afe6bb5f71ef33f8", + "description": "футляри до державних нагород", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } } diff --git a/docs/source/tendering/http/tutorial/tender-contract-sign-date.http b/docs/source/tendering/http/tutorial/tender-contract-sign-date.http index 626d314c41..98a97b62ac 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-sign-date.http +++ b/docs/source/tendering/http/tutorial/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 +PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json diff --git a/docs/source/tendering/http/tutorial/tender-contract-sign.http b/docs/source/tendering/http/tutorial/tender-contract-sign.http index 1420eacafb..8449b0236e 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-sign.http +++ b/docs/source/tendering/http/tutorial/tender-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 +PATCH /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "027191b3845a4d5ea4a8d7c448a2b699", + "id": "1ba34a7e1eb34f1db53c305525332f9f", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract #13111", "status": "active", @@ -24,40 +24,6 @@ X-Content-Type-Options: nosniff "endDate": "2022-03-16T00:00:03+02:00" }, "dateSigned": "2021-03-16T00:00:03+02:00", - "items": [ - { - "id": "ca8069063cb44e45afe6bb5f71ef33f8", - "description": "футляри до державних нагород", - "classification": { - "description": "Cartons", - "scheme": "ДК021", - "id": "44617100-9" - }, - "additionalClassifications": [ - { - "scheme": "ДКПП", - "id": "17.21.1", - "description": "папір і картон гофровані, паперова й картонна тара" - } - ], - "unit": { - "name": "item", - "code": "44617100-9" - }, - "quantity": 5.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "ДКП «Книга»", @@ -110,6 +76,45 @@ X-Content-Type-Options: nosniff "dateModified": "2021-03-16T00:00:03+02:00", "documentOf": "tender" } + ], + "items": [ + { + "id": "ca8069063cb44e45afe6bb5f71ef33f8", + "description": "футляри до державних нагород", + "additionalClassifications": [ + { + "scheme": "ДКПП", + "id": "17.21.1", + "description": "папір і картон гофровані, паперова й картонна тара" + } + ], + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "classification": { + "description": "Cartons", + "scheme": "ДК021", + "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } ] } } diff --git a/docs/source/tendering/http/tutorial/tender-contract-upload-document.http b/docs/source/tendering/http/tutorial/tender-contract-upload-document.http index 89ea6c580c..b22fb54431 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-upload-document.http +++ b/docs/source/tendering/http/tutorial/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699/documents?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 +POST /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f/documents?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 Authorization: Bearer broker Content-Length: 348 Content-Type: application/json @@ -15,7 +15,7 @@ DATA: Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699/documents/5b95c75b7e224d23b340b05a0e81d513 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f/documents/5b95c75b7e224d23b340b05a0e81d513 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/http/tutorial/tender-contract-upload-second-document.http b/docs/source/tendering/http/tutorial/tender-contract-upload-second-document.http index 29caac852f..9f9865210f 100644 --- a/docs/source/tendering/http/tutorial/tender-contract-upload-second-document.http +++ b/docs/source/tendering/http/tutorial/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699/documents?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 +POST /api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f/documents?acc_token=e6b4c4ef7b894e8da225bae574bf7b61 HTTP/1.0 Authorization: Bearer broker Content-Length: 341 Content-Type: application/json @@ -15,7 +15,7 @@ DATA: Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/027191b3845a4d5ea4a8d7c448a2b699/documents/7f248929d5bc41488ea8f82f93ba1821 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/4826290bfb064165b70a94d71e93a63b/contracts/1ba34a7e1eb34f1db53c305525332f9f/documents/7f248929d5bc41488ea8f82f93ba1821 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/http/tutorial/tender-patch-2pc.http b/docs/source/tendering/http/tutorial/tender-patch-2pc.http index fb3f659549..5c9dd6ca1c 100644 --- a/docs/source/tendering/http/tutorial/tender-patch-2pc.http +++ b/docs/source/tendering/http/tutorial/tender-patch-2pc.http @@ -62,10 +62,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -82,6 +78,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/tender-post-2pc.http b/docs/source/tendering/http/tutorial/tender-post-2pc.http index 9a5bc49cd8..4ccc47270c 100644 --- a/docs/source/tendering/http/tutorial/tender-post-2pc.http +++ b/docs/source/tendering/http/tutorial/tender-post-2pc.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 2969 +Content-Length: 2994 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -53,8 +53,11 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } }, "quantity": 5, "deliveryDate": { @@ -159,10 +162,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -179,6 +178,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/http/tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/http/tutorial/tender-post-attempt-json-data.http index 94c25e512d..26bca44851 100644 --- a/docs/source/tendering/http/tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/http/tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 2950 +Content-Length: 2975 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -53,8 +53,11 @@ DATA: } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } }, "quantity": 5, "deliveryDate": { @@ -158,10 +161,6 @@ X-Content-Type-Options: nosniff "description": "папір і картон гофровані, паперова й картонна тара" } ], - "unit": { - "name": "item", - "code": "44617100-9" - }, "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", @@ -178,6 +177,15 @@ X-Content-Type-Options: nosniff "description": "Cartons", "scheme": "ДК021", "id": "44617100-9" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http index 36802bf268..75ad74555c 100644 --- a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http +++ b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http @@ -101,6 +101,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-set-contract-value.http b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-set-contract-value.http index 3882c52cab..fda37495b5 100644 --- a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-set-contract-value.http +++ b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/6fc7b4a587f847fcb61cdc861ce4d752/contracts/7fa53e14950f454c84da01b56afd29cd?acc_token=4838b1114c2645c0b455f9615e48ecf4 HTTP/1.0 +PATCH /api/2.5/tenders/6fc7b4a587f847fcb61cdc861ce4d752/contracts/16fd0c7e64d84bc1b26dd9c1d5e6d30c?acc_token=4838b1114c2645c0b455f9615e48ecf4 HTTP/1.0 Authorization: Bearer broker Content-Length: 54 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7fa53e14950f454c84da01b56afd29cd", + "id": "16fd0c7e64d84bc1b26dd9c1d5e6d30c", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "suppliers": [ @@ -70,6 +70,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-sign.http b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-sign.http index a808efbab3..4e61617286 100644 --- a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-sign.http +++ b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/6fc7b4a587f847fcb61cdc861ce4d752/contracts/7fa53e14950f454c84da01b56afd29cd?acc_token=4838b1114c2645c0b455f9615e48ecf4 HTTP/1.0 +PATCH /api/2.5/tenders/6fc7b4a587f847fcb61cdc861ce4d752/contracts/16fd0c7e64d84bc1b26dd9c1d5e6d30c?acc_token=4838b1114c2645c0b455f9615e48ecf4 HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7fa53e14950f454c84da01b56afd29cd", + "id": "16fd0c7e64d84bc1b26dd9c1d5e6d30c", "contractID": "UA-2021-03-16-000001-1", "status": "active", "dateSigned": "2021-03-16T00:00:01+02:00", @@ -68,6 +68,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-post-attempt-json-data.http index 667490d432..aa5bdc86f1 100644 --- a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3973 +Content-Length: 4065 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -32,6 +32,13 @@ DATA: "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ], @@ -190,6 +197,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-view.http b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-view.http index 3131c38517..48e35bfa7c 100644 --- a/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-view.http +++ b/docs/source/tendering/limited/http/multiple_lots_tutorial/tender-view.http @@ -88,6 +88,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-procuringEntity.http b/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-procuringEntity.http index 6065cff350..8d05a00ae2 100644 --- a/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-procuringEntity.http +++ b/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-procuringEntity.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3968 +Content-Length: 4060 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -32,6 +32,13 @@ DATA: "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ], @@ -190,6 +197,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": false + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-quick-procuringEntity.http b/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-quick-procuringEntity.http index 28d00b11fc..c88db74f2d 100644 --- a/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-quick-procuringEntity.http +++ b/docs/source/tendering/limited/http/tutorial/create-tender-negotiation-quick-procuringEntity.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3973 +Content-Length: 4065 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -32,6 +32,13 @@ DATA: "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ], @@ -190,6 +197,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/tutorial/create-tender-procuringEntity.http b/docs/source/tendering/limited/http/tutorial/create-tender-procuringEntity.http index 4dbcc1a6c5..5d6c921aad 100644 --- a/docs/source/tendering/limited/http/tutorial/create-tender-procuringEntity.http +++ b/docs/source/tendering/limited/http/tutorial/create-tender-procuringEntity.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3421 +Content-Length: 3513 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -32,6 +32,13 @@ DATA: "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ], @@ -158,6 +165,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/tutorial/patch-items-value-periods.http b/docs/source/tendering/limited/http/tutorial/patch-items-value-periods.http index 7618d266fd..5788614376 100644 --- a/docs/source/tendering/limited/http/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/limited/http/tutorial/patch-items-value-periods.http @@ -76,6 +76,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "month", + "code": "MON", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -86,10 +95,6 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - }, - "unit": { - "name": "month", - "code": "MON" } } ], diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents-again.http b/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents-again.http index c75bb545f9..9d98388861 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents-again.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +GET /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents.http b/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents.http index 18b012ca2c..d8bbcfbd24 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +GET /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-period.http b/docs/source/tendering/limited/http/tutorial/tender-contract-period.http index 9482da877b..fdf0aad466 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-period.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "ed432ce551d546599b7182b1940c77b7", + "id": "c740a0b6a218410699113259337e654c", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -74,6 +74,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "month", + "code": "MON", + "value": { + "amount": 12.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -84,15 +93,6 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - }, - "unit": { - "name": "month", - "code": "MON", - "value": { - "amount": 12.0, - "currency": "UAH", - "valueAddedTaxIncluded": true - } } } ] diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract-value.http b/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract-value.http index fff327af8a..511264f2aa 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract-value.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 54 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "ed432ce551d546599b7182b1940c77b7", + "id": "c740a0b6a218410699113259337e654c", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "suppliers": [ @@ -69,6 +69,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "month", + "code": "MON", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -79,10 +88,6 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - }, - "unit": { - "name": "month", - "code": "MON" } } ] diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract_items_unit-value.http b/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract_items_unit-value.http index edfe4c43d1..a82d30ea77 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract_items_unit-value.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-set-contract_items_unit-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 58 Content-Type: application/json @@ -23,7 +23,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "ed432ce551d546599b7182b1940c77b7", + "id": "c740a0b6a218410699113259337e654c", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "suppliers": [ @@ -74,6 +74,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "month", + "code": "MON", + "value": { + "amount": 12.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -84,15 +93,6 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - }, - "unit": { - "name": "month", - "code": "MON", - "value": { - "amount": 12.0, - "currency": "UAH", - "valueAddedTaxIncluded": true - } } } ] diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-sign-date.http b/docs/source/tendering/limited/http/tutorial/tender-contract-sign-date.http index 3d7a96877a..2d08d5efa7 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-sign-date.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "ed432ce551d546599b7182b1940c77b7", + "id": "c740a0b6a218410699113259337e654c", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "dateSigned": "2021-03-16T00:00:00+02:00", @@ -67,6 +67,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "month", + "code": "MON", + "value": { + "amount": 12.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -77,15 +86,6 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - }, - "unit": { - "name": "month", - "code": "MON", - "value": { - "amount": 12.0, - "currency": "UAH", - "valueAddedTaxIncluded": true - } } } ] diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-sign.http b/docs/source/tendering/limited/http/tutorial/tender-contract-sign.http index 30067f72e4..33d6003ee9 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-sign.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "ed432ce551d546599b7182b1940c77b7", + "id": "c740a0b6a218410699113259337e654c", "contractID": "UA-2021-03-16-000001-1", "status": "active", "period": { @@ -93,6 +93,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "month", + "code": "MON", + "value": { + "amount": 12.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -103,15 +112,6 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" - }, - "unit": { - "name": "month", - "code": "MON", - "value": { - "amount": 12.0, - "currency": "UAH", - "valueAddedTaxIncluded": true - } } } ] diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-upload-document.http b/docs/source/tendering/limited/http/tutorial/tender-contract-upload-document.http index d8c2993595..ce77c6b511 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-upload-document.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +POST /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 162 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7/documents/b32ffc2c2e3a490bab77e2fb6184d5c3 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c/documents/b32ffc2c2e3a490bab77e2fb6184d5c3 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/limited/http/tutorial/tender-contract-upload-second-document.http b/docs/source/tendering/limited/http/tutorial/tender-contract-upload-second-document.http index bdde69ec0a..335879bd0e 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-contract-upload-second-document.http +++ b/docs/source/tendering/limited/http/tutorial/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +POST /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c/documents?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 163 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/ed432ce551d546599b7182b1940c77b7/documents/2f8a539a00474c00bc7fb4dea11523ba +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/c740a0b6a218410699113259337e654c/documents/2f8a539a00474c00bc7fb4dea11523ba X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/limited/http/tutorial/tender-negotiation-contract-sign.http b/docs/source/tendering/limited/http/tutorial/tender-negotiation-contract-sign.http index 572fc62f8b..d5a83b53eb 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-negotiation-contract-sign.http +++ b/docs/source/tendering/limited/http/tutorial/tender-negotiation-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/dfbaafa9abe9480f82c92b3baf7667b1?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/749cef977af34429a4293180560fcdd1?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "dfbaafa9abe9480f82c92b3baf7667b1", + "id": "749cef977af34429a4293180560fcdd1", "contractID": "UA-2021-03-16-000001-1", "status": "active", "dateSigned": "2021-03-16T00:00:01+02:00", @@ -67,6 +67,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": false + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/http/tutorial/tender-negotiation-quick-contract-sign.http b/docs/source/tendering/limited/http/tutorial/tender-negotiation-quick-contract-sign.http index e0597c1ada..640437cbc0 100644 --- a/docs/source/tendering/limited/http/tutorial/tender-negotiation-quick-contract-sign.http +++ b/docs/source/tendering/limited/http/tutorial/tender-negotiation-quick-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/dfbaafa9abe9480f82c92b3baf7667b1?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 +PATCH /api/2.5/tenders/378a1443b2704a2e9f13816acfe5898f/contracts/749cef977af34429a4293180560fcdd1?acc_token=31c9e71e63b64c82b49271b02ebc3c7b HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "dfbaafa9abe9480f82c92b3baf7667b1", + "id": "749cef977af34429a4293180560fcdd1", "contractID": "UA-2021-03-16-000001-1", "status": "active", "dateSigned": "2021-03-16T00:00:01+02:00", @@ -67,6 +67,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": false + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/limited/tutorial.rst b/docs/source/tendering/limited/tutorial.rst index 42fd5656c5..bae9c46cc6 100644 --- a/docs/source/tendering/limited/tutorial.rst +++ b/docs/source/tendering/limited/tutorial.rst @@ -184,6 +184,9 @@ Setting value per item's unit `200 OK` response was returned with successfully set item.unit.value structure. +Item.unit.value.currency and Item.unit.value.valueAddedTaxIncluded are created using +contract.value(if exists), otherwise using tender.value data + Setting contract signature date ------------------------------- diff --git a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http index 928500a090..43d1458018 100644 --- a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http +++ b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-add-relatedLot-to-item.http @@ -97,6 +97,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -127,6 +131,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-post-attempt-json-data.http index 5b234a1e4d..9073f0a095 100644 --- a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4108 +Content-Length: 4277 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -72,6 +72,10 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, + "unit": { + "code": "KGM", + "name": "кілограм" + }, "quantity": 1 }, { @@ -89,6 +93,10 @@ DATA: "id": "37810000-9", "description": "Test" }, + "unit": { + "code": "PK", + "name": "упаковка" + }, "quantity": 1, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", @@ -214,6 +222,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -243,6 +255,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http index 94984a2e3f..f500e93d5b 100644 --- a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http +++ b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification-stand-still.http @@ -90,6 +90,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -120,6 +124,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification.http b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification.http index 41bbf6c6ce..45ccc55875 100644 --- a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification.http +++ b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view-pre-qualification.http @@ -82,6 +82,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -112,6 +116,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view.http b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view.http index 14b39102e1..b82881767d 100644 --- a/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view.http +++ b/docs/source/tendering/openeu/http/multiple_lots_tutorial/tender-view.http @@ -81,6 +81,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -111,6 +115,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/auction-url.http b/docs/source/tendering/openeu/http/tutorial/auction-url.http index 4517a94a61..eea3ce3bb3 100644 --- a/docs/source/tendering/openeu/http/tutorial/auction-url.http +++ b/docs/source/tendering/openeu/http/tutorial/auction-url.http @@ -139,6 +139,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -168,6 +172,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/blank-tender-view.http b/docs/source/tendering/openeu/http/tutorial/blank-tender-view.http index 00009d6257..c904c6f0cb 100644 --- a/docs/source/tendering/openeu/http/tutorial/blank-tender-view.http +++ b/docs/source/tendering/openeu/http/tutorial/blank-tender-view.http @@ -83,6 +83,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -112,6 +116,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/patch-items-value-periods.http b/docs/source/tendering/openeu/http/tutorial/patch-items-value-periods.http index 06d3996bb6..1d22c7b999 100644 --- a/docs/source/tendering/openeu/http/tutorial/patch-items-value-periods.http +++ b/docs/source/tendering/openeu/http/tutorial/patch-items-value-periods.http @@ -94,6 +94,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -123,6 +127,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/pre-qualification-confirmation.http b/docs/source/tendering/openeu/http/tutorial/pre-qualification-confirmation.http index 546b3b386b..b00e24256b 100644 --- a/docs/source/tendering/openeu/http/tutorial/pre-qualification-confirmation.http +++ b/docs/source/tendering/openeu/http/tutorial/pre-qualification-confirmation.http @@ -145,6 +145,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -174,6 +178,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/qualifications-listing.http b/docs/source/tendering/openeu/http/tutorial/qualifications-listing.http index 45fc14b39d..64501d4ee7 100644 --- a/docs/source/tendering/openeu/http/tutorial/qualifications-listing.http +++ b/docs/source/tendering/openeu/http/tutorial/qualifications-listing.http @@ -134,6 +134,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -163,6 +167,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/set-bid-guarantee.http b/docs/source/tendering/openeu/http/tutorial/set-bid-guarantee.http index 1b65cd0698..fae2146464 100644 --- a/docs/source/tendering/openeu/http/tutorial/set-bid-guarantee.http +++ b/docs/source/tendering/openeu/http/tutorial/set-bid-guarantee.http @@ -99,6 +99,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -128,6 +132,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents-again.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents-again.http index 687b0f0926..d737c62e8d 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents-again.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents HTTP/1.0 +GET /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents.http index 2006b2e182..d918fd0427 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents HTTP/1.0 +GET /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-get.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-get.http index d411c38933..9aa02d427c 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-get.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-get.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +GET /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,7 +7,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7b1a9e2857ae47f78a76fdb104dc9a46", + "id": "9af6ce404f64490b943e5edfa40da762", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -90,6 +90,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -119,6 +123,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-patch-document.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-patch-document.http index 41176c157b..4937cf2876 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-patch-document.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-patch-document.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents/a188292b5c8c4989beccd36d5725ff92?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents/a188292b5c8c4989beccd36d5725ff92?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Content-Length: 106 Content-Type: application/json diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-period.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-period.http index 515e2f0e8b..24d5bc0bf5 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-period.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7b1a9e2857ae47f78a76fdb104dc9a46", + "id": "9af6ce404f64490b943e5edfa40da762", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -75,6 +75,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -104,6 +108,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-set-contract-value.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-set-contract-value.http index 9cc8f21847..22c88fdcca 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-set-contract-value.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Content-Length: 86 Content-Type: application/json @@ -19,7 +19,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7b1a9e2857ae47f78a76fdb104dc9a46", + "id": "9af6ce404f64490b943e5edfa40da762", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -71,6 +71,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -100,6 +104,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-sign-date.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-sign-date.http index 577c58124b..41b4f4603d 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-sign-date.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +PATCH /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "7b1a9e2857ae47f78a76fdb104dc9a46", + "id": "9af6ce404f64490b943e5edfa40da762", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract#1", "status": "pending", @@ -68,6 +68,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -97,6 +101,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-document.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-document.http index 456f1e6188..955c2f2392 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-document.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +POST /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Content-Length: 162 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents/b777651c0e5c4bb494527f2f4c3e87a5 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents/b777651c0e5c4bb494527f2f4c3e87a5 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-second-document.http b/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-second-document.http index 2d472eb5df..6a01b1c9b6 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-second-document.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 +POST /api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents?acc_token=a18895cc933048798f66084924c3fdf5 HTTP/1.0 Authorization: Bearer broker Content-Length: 163 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/7b1a9e2857ae47f78a76fdb104dc9a46/documents/a188292b5c8c4989beccd36d5725ff92 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/5d65b887e53f4c0d97374b32fe5c6b8a/contracts/9af6ce404f64490b943e5edfa40da762/documents/a188292b5c8c4989beccd36d5725ff92 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/openeu/http/tutorial/tender-post-attempt-json-data.http b/docs/source/tendering/openeu/http/tutorial/tender-post-attempt-json-data.http index 55083882fc..538ede2b93 100644 --- a/docs/source/tendering/openeu/http/tutorial/tender-post-attempt-json-data.http +++ b/docs/source/tendering/openeu/http/tutorial/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 4108 +Content-Length: 4277 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -72,6 +72,10 @@ DATA: "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, + "unit": { + "code": "KGM", + "name": "кілограм" + }, "quantity": 1 }, { @@ -89,6 +93,10 @@ DATA: "id": "37810000-9", "description": "Test" }, + "unit": { + "code": "PK", + "name": "упаковка" + }, "quantity": 1, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", @@ -214,6 +222,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -243,6 +255,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery-with-update-periods.http index 59118fe7db..7dcff96d8e 100644 --- a/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery-with-update-periods.http @@ -151,6 +151,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -180,6 +184,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery.http b/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery.http index c2d5b1844c..9249b36b37 100644 --- a/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery.http +++ b/docs/source/tendering/openeu/http/tutorial/update-tender-after-enqiery.http @@ -137,6 +137,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "кілограм", + "code": "KGM" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" @@ -166,6 +170,10 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "37810000-9" }, + "unit": { + "name": "упаковка", + "code": "PK" + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/auction-url.http b/docs/source/tendering/openua/http/auction-url.http index 7c6d836f4a..4c9e63423e 100644 --- a/docs/source/tendering/openua/http/auction-url.http +++ b/docs/source/tendering/openua/http/auction-url.http @@ -156,6 +156,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/blank-tender-view.http b/docs/source/tendering/openua/http/blank-tender-view.http index 0b01102681..edcde1e063 100644 --- a/docs/source/tendering/openua/http/blank-tender-view.http +++ b/docs/source/tendering/openua/http/blank-tender-view.http @@ -103,6 +103,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/patch-items-value-periods.http b/docs/source/tendering/openua/http/patch-items-value-periods.http index b679a35d9b..e077df54dd 100644 --- a/docs/source/tendering/openua/http/patch-items-value-periods.http +++ b/docs/source/tendering/openua/http/patch-items-value-periods.http @@ -114,6 +114,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/set-bid-guarantee.http b/docs/source/tendering/openua/http/set-bid-guarantee.http index 79f3e9157f..3788446d54 100644 --- a/docs/source/tendering/openua/http/set-bid-guarantee.http +++ b/docs/source/tendering/openua/http/set-bid-guarantee.http @@ -119,6 +119,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/tender-contract-get.http b/docs/source/tendering/openua/http/tender-contract-get.http index 375ab52783..190cbe789c 100644 --- a/docs/source/tendering/openua/http/tender-contract-get.http +++ b/docs/source/tendering/openua/http/tender-contract-get.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/f87dcf81aedf43d194092296791a7bca?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 +GET /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/1887b19211b94348a8c5810a9a72ae60?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,7 +7,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f87dcf81aedf43d194092296791a7bca", + "id": "1887b19211b94348a8c5810a9a72ae60", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -75,6 +75,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/tender-contract-period.http b/docs/source/tendering/openua/http/tender-contract-period.http index 5061545274..7f70870913 100644 --- a/docs/source/tendering/openua/http/tender-contract-period.http +++ b/docs/source/tendering/openua/http/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/f87dcf81aedf43d194092296791a7bca?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 +PATCH /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/1887b19211b94348a8c5810a9a72ae60?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f87dcf81aedf43d194092296791a7bca", + "id": "1887b19211b94348a8c5810a9a72ae60", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "period": { @@ -74,6 +74,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/tender-contract-set-contract-value.http b/docs/source/tendering/openua/http/tender-contract-set-contract-value.http index b74bd1d09f..745045e0e1 100644 --- a/docs/source/tendering/openua/http/tender-contract-set-contract-value.http +++ b/docs/source/tendering/openua/http/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/f87dcf81aedf43d194092296791a7bca?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 +PATCH /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/1887b19211b94348a8c5810a9a72ae60?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 Authorization: Bearer broker Content-Length: 54 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f87dcf81aedf43d194092296791a7bca", + "id": "1887b19211b94348a8c5810a9a72ae60", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "suppliers": [ @@ -69,6 +69,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/tender-contract-sign-date.http b/docs/source/tendering/openua/http/tender-contract-sign-date.http index 079323be8e..0a18178e24 100644 --- a/docs/source/tendering/openua/http/tender-contract-sign-date.http +++ b/docs/source/tendering/openua/http/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/f87dcf81aedf43d194092296791a7bca?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 +PATCH /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/1887b19211b94348a8c5810a9a72ae60?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "f87dcf81aedf43d194092296791a7bca", + "id": "1887b19211b94348a8c5810a9a72ae60", "contractID": "UA-2021-03-16-000001-1", "status": "pending", "dateSigned": "2021-03-16T00:00:01+02:00", @@ -67,6 +67,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/tender-contract-upload-document.http b/docs/source/tendering/openua/http/tender-contract-upload-document.http index 476d30bb7d..6e74dd055d 100644 --- a/docs/source/tendering/openua/http/tender-contract-upload-document.http +++ b/docs/source/tendering/openua/http/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/f87dcf81aedf43d194092296791a7bca/documents?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 +POST /api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/1887b19211b94348a8c5810a9a72ae60/documents?acc_token=ecfd2afb0d2844039379a26cddd96d93 HTTP/1.0 Authorization: Bearer broker Content-Length: 156 Content-Type: multipart/form-data; boundary=---BOUNDARY @@ -14,7 +14,7 @@ content Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/f87dcf81aedf43d194092296791a7bca/documents/49d518207c374a94ab17bbf6b66facdf +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/bac835240efd4adea01560554d7bfdb4/contracts/1887b19211b94348a8c5810a9a72ae60/documents/49d518207c374a94ab17bbf6b66facdf X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/openua/http/tender-post-attempt-json-data.http b/docs/source/tendering/openua/http/tender-post-attempt-json-data.http index f27df7e98b..bbb44af76f 100644 --- a/docs/source/tendering/openua/http/tender-post-attempt-json-data.http +++ b/docs/source/tendering/openua/http/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 3051 +Content-Length: 3143 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -66,6 +66,13 @@ DATA: "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ], @@ -200,6 +207,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/openua/http/update-tender-after-enqiery-with-update-periods.http b/docs/source/tendering/openua/http/update-tender-after-enqiery-with-update-periods.http index 712ab76de7..032b2ddcca 100644 --- a/docs/source/tendering/openua/http/update-tender-after-enqiery-with-update-periods.http +++ b/docs/source/tendering/openua/http/update-tender-after-enqiery-with-update-periods.http @@ -169,6 +169,15 @@ X-Content-Type-Options: nosniff "scheme": "ДК021", "id": "55523100-3" }, + "unit": { + "name": "папір", + "code": "KGM", + "value": { + "amount": 10.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + }, "deliveryDate": { "startDate": "2021-04-05T00:00:00+02:00", "endDate": "2021-05-05T00:00:00+02:00" diff --git a/docs/source/tendering/pricequotation/http/award-active.http b/docs/source/tendering/pricequotation/http/award-active.http index 9130d64e9b..ca5fd0a883 100644 --- a/docs/source/tendering/pricequotation/http/award-active.http +++ b/docs/source/tendering/pricequotation/http/award-active.http @@ -51,9 +51,14 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнання", "unit": { "name": "штук", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, "code": "H87" }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" diff --git a/docs/source/tendering/pricequotation/http/award-unsuccesful.http b/docs/source/tendering/pricequotation/http/award-unsuccesful.http index cb0d12f778..a7ed69ac08 100644 --- a/docs/source/tendering/pricequotation/http/award-unsuccesful.http +++ b/docs/source/tendering/pricequotation/http/award-unsuccesful.http @@ -51,9 +51,14 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнання", "unit": { "name": "штук", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, "code": "H87" }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" diff --git a/docs/source/tendering/pricequotation/http/awards-listing-after-cancel.http b/docs/source/tendering/pricequotation/http/awards-listing-after-cancel.http index feb688053a..b14cd71441 100644 --- a/docs/source/tendering/pricequotation/http/awards-listing-after-cancel.http +++ b/docs/source/tendering/pricequotation/http/awards-listing-after-cancel.http @@ -44,9 +44,14 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнання", "unit": { "name": "штук", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, "code": "H87" }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -104,9 +109,14 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнання", "unit": { "name": "штук", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, "code": "H87" }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" diff --git a/docs/source/tendering/pricequotation/http/awards-listing.http b/docs/source/tendering/pricequotation/http/awards-listing.http index 687d43b4d5..86c8a359b0 100644 --- a/docs/source/tendering/pricequotation/http/awards-listing.http +++ b/docs/source/tendering/pricequotation/http/awards-listing.http @@ -44,9 +44,14 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнання", "unit": { "name": "штук", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, "code": "H87" }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -104,9 +109,14 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнання", "unit": { "name": "штук", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + }, "code": "H87" }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" diff --git a/docs/source/tendering/pricequotation/http/blank-tender-view.http b/docs/source/tendering/pricequotation/http/blank-tender-view.http index f111b77f7b..5e9535031d 100644 --- a/docs/source/tendering/pricequotation/http/blank-tender-view.http +++ b/docs/source/tendering/pricequotation/http/blank-tender-view.http @@ -20,7 +20,7 @@ X-Content-Type-Options: nosniff { "id": "61a6737049384b08876fb0407eda182f", "description": "Комп’ютерне обладнання", - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -31,6 +31,15 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/pricequotation/http/contract-listing.http b/docs/source/tendering/pricequotation/http/contract-listing.http index bafeaddfc3..a694213160 100644 --- a/docs/source/tendering/pricequotation/http/contract-listing.http +++ b/docs/source/tendering/pricequotation/http/contract-listing.http @@ -8,36 +8,9 @@ X-Content-Type-Options: nosniff { "data": [ { - "id": "17ef9f4806964b4183a7be2adfdccb9e", + "id": "5d8bb2b40e5f43d18d5541a2297fa3c7", "contractID": "UA-2021-03-16-000001-1", "status": "pending", - "items": [ - { - "id": "61a6737049384b08876fb0407eda182f", - "description": "Комп’ютерне обладнання", - "classification": { - "description": "Комп’ютерне обладнанн", - "scheme": "ДК021", - "id": "30230000-0" - }, - "unit": { - "name": "штук", - "code": "H87" - }, - "quantity": 1.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -67,7 +40,39 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 479.0 }, - "awardID": "2457dbf1f0fa43daaf6148695865ce39" + "awardID": "2457dbf1f0fa43daaf6148695865ce39", + "items": [ + { + "id": "61a6737049384b08876fb0407eda182f", + "description": "Комп’ютерне обладнання", + "classification": { + "description": "Комп’ютерне обладнанн", + "scheme": "ДК021", + "id": "30230000-0" + }, + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "unit": { + "name": "штук", + "code": "H87", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } ] } diff --git a/docs/source/tendering/pricequotation/http/patch-tender-data.http b/docs/source/tendering/pricequotation/http/patch-tender-data.http index 78f9e7ff7a..5819f2d937 100644 --- a/docs/source/tendering/pricequotation/http/patch-tender-data.http +++ b/docs/source/tendering/pricequotation/http/patch-tender-data.http @@ -30,7 +30,7 @@ X-Content-Type-Options: nosniff { "id": "61a6737049384b08876fb0407eda182f", "description": "Комп’ютерне обладнання", - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -41,6 +41,15 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/pricequotation/http/publish-tender.http b/docs/source/tendering/pricequotation/http/publish-tender.http index 282a237c88..03221c2a20 100644 --- a/docs/source/tendering/pricequotation/http/publish-tender.http +++ b/docs/source/tendering/pricequotation/http/publish-tender.http @@ -28,7 +28,7 @@ X-Content-Type-Options: nosniff { "id": "58875aff79b44134818670145fe82398", "description": "Комп’ютерне обладнання", - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -39,6 +39,15 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/pricequotation/http/tender-after-bot-active.http b/docs/source/tendering/pricequotation/http/tender-after-bot-active.http index 5059a95915..435091ad28 100644 --- a/docs/source/tendering/pricequotation/http/tender-after-bot-active.http +++ b/docs/source/tendering/pricequotation/http/tender-after-bot-active.http @@ -20,11 +20,7 @@ X-Content-Type-Options: nosniff { "id": "58875aff79b44134818670145fe82398", "description": "Комп’ютерне обладнання", - "unit": { - "name": "штук", - "code": "H87" - }, - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -40,6 +36,15 @@ X-Content-Type-Options: nosniff "description": "Комп’ютерне обладнанн", "scheme": "ДК021", "id": "30230000-0" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/pricequotation/http/tender-after-bot-unsuccessful.http b/docs/source/tendering/pricequotation/http/tender-after-bot-unsuccessful.http index 32443f5cce..127ecb4f33 100644 --- a/docs/source/tendering/pricequotation/http/tender-after-bot-unsuccessful.http +++ b/docs/source/tendering/pricequotation/http/tender-after-bot-unsuccessful.http @@ -20,7 +20,7 @@ X-Content-Type-Options: nosniff { "id": "8362da99fda44bcfa6516e34c6cd86b6", "description": "Комп’ютерне обладнання", - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -31,6 +31,15 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/source/tendering/pricequotation/http/tender-contract-get-contract-value.http b/docs/source/tendering/pricequotation/http/tender-contract-get-contract-value.http index 876300d46f..64e8bfbbeb 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-get-contract-value.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-get-contract-value.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e HTTP/1.0 +GET /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7 HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua @@ -7,36 +7,9 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "17ef9f4806964b4183a7be2adfdccb9e", + "id": "5d8bb2b40e5f43d18d5541a2297fa3c7", "contractID": "UA-2021-03-16-000001-1", "status": "pending", - "items": [ - { - "id": "61a6737049384b08876fb0407eda182f", - "description": "Комп’ютерне обладнання", - "classification": { - "description": "Комп’ютерне обладнанн", - "scheme": "ДК021", - "id": "30230000-0" - }, - "unit": { - "name": "штук", - "code": "H87" - }, - "quantity": 1.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -66,7 +39,39 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 479.0 }, - "awardID": "2457dbf1f0fa43daaf6148695865ce39" + "awardID": "2457dbf1f0fa43daaf6148695865ce39", + "items": [ + { + "id": "61a6737049384b08876fb0407eda182f", + "description": "Комп’ютерне обладнання", + "classification": { + "description": "Комп’ютерне обладнанн", + "scheme": "ДК021", + "id": "30230000-0" + }, + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "unit": { + "name": "штук", + "code": "H87", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } } diff --git a/docs/source/tendering/pricequotation/http/tender-contract-get-documents-again.http b/docs/source/tendering/pricequotation/http/tender-contract-get-documents-again.http index 61a8b6e60f..16cf39ebda 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-get-documents-again.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-get-documents-again.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e/documents HTTP/1.0 +GET /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/pricequotation/http/tender-contract-get-documents.http b/docs/source/tendering/pricequotation/http/tender-contract-get-documents.http index 4b57c3c22a..df9f403e30 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-get-documents.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-get-documents.http @@ -1,4 +1,4 @@ -GET /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e/documents HTTP/1.0 +GET /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7/documents HTTP/1.0 Authorization: Bearer broker Host: lb-api-sandbox.prozorro.gov.ua diff --git a/docs/source/tendering/pricequotation/http/tender-contract-period.http b/docs/source/tendering/pricequotation/http/tender-contract-period.http index ebf48756f7..a87f088dd7 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-period.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-period.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 +PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 Authorization: Bearer broker Content-Length: 104 Content-Type: application/json @@ -18,7 +18,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "17ef9f4806964b4183a7be2adfdccb9e", + "id": "5d8bb2b40e5f43d18d5541a2297fa3c7", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract #13111", "status": "pending", @@ -27,33 +27,6 @@ X-Content-Type-Options: nosniff "endDate": "2022-03-16T00:00:03+02:00" }, "dateSigned": "2021-03-16T00:00:03+02:00", - "items": [ - { - "id": "61a6737049384b08876fb0407eda182f", - "description": "Комп’ютерне обладнання", - "classification": { - "description": "Комп’ютерне обладнанн", - "scheme": "ДК021", - "id": "30230000-0" - }, - "unit": { - "name": "штук", - "code": "H87" - }, - "quantity": 1.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -83,7 +56,39 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 230.0 }, - "awardID": "2457dbf1f0fa43daaf6148695865ce39" + "awardID": "2457dbf1f0fa43daaf6148695865ce39", + "items": [ + { + "id": "61a6737049384b08876fb0407eda182f", + "description": "Комп’ютерне обладнання", + "classification": { + "description": "Комп’ютерне обладнанн", + "scheme": "ДК021", + "id": "30230000-0" + }, + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "unit": { + "name": "штук", + "code": "H87", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } } diff --git a/docs/source/tendering/pricequotation/http/tender-contract-set-contract-value.http b/docs/source/tendering/pricequotation/http/tender-contract-set-contract-value.http index 39b0d7aea3..d0a318cc54 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-set-contract-value.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-set-contract-value.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 +PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 Authorization: Bearer broker Content-Length: 91 Content-Type: application/json @@ -19,37 +19,10 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "17ef9f4806964b4183a7be2adfdccb9e", + "id": "5d8bb2b40e5f43d18d5541a2297fa3c7", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract #13111", "status": "pending", - "items": [ - { - "id": "61a6737049384b08876fb0407eda182f", - "description": "Комп’ютерне обладнання", - "classification": { - "description": "Комп’ютерне обладнанн", - "scheme": "ДК021", - "id": "30230000-0" - }, - "unit": { - "name": "штук", - "code": "H87" - }, - "quantity": 1.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -79,7 +52,39 @@ X-Content-Type-Options: nosniff "valueAddedTaxIncluded": true, "amountNet": 230.0 }, - "awardID": "2457dbf1f0fa43daaf6148695865ce39" + "awardID": "2457dbf1f0fa43daaf6148695865ce39", + "items": [ + { + "id": "61a6737049384b08876fb0407eda182f", + "description": "Комп’ютерне обладнання", + "classification": { + "description": "Комп’ютерне обладнанн", + "scheme": "ДК021", + "id": "30230000-0" + }, + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "unit": { + "name": "штук", + "code": "H87", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } + ] } } diff --git a/docs/source/tendering/pricequotation/http/tender-contract-sign-date.http b/docs/source/tendering/pricequotation/http/tender-contract-sign-date.http index 1fab6ae40f..779c29083d 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-sign-date.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-sign-date.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 +PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 Authorization: Bearer broker Content-Length: 53 Content-Type: application/json diff --git a/docs/source/tendering/pricequotation/http/tender-contract-sign.http b/docs/source/tendering/pricequotation/http/tender-contract-sign.http index 60f62ed5fa..1d080acdd3 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-sign.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-sign.http @@ -1,4 +1,4 @@ -PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 +PATCH /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 Authorization: Bearer broker Content-Length: 30 Content-Type: application/json @@ -15,7 +15,7 @@ Content-Type: application/json X-Content-Type-Options: nosniff { "data": { - "id": "17ef9f4806964b4183a7be2adfdccb9e", + "id": "5d8bb2b40e5f43d18d5541a2297fa3c7", "contractID": "UA-2021-03-16-000001-1", "contractNumber": "contract #13111", "status": "active", @@ -24,33 +24,6 @@ X-Content-Type-Options: nosniff "endDate": "2022-03-16T00:00:03+02:00" }, "dateSigned": "2021-03-16T00:00:03+02:00", - "items": [ - { - "id": "61a6737049384b08876fb0407eda182f", - "description": "Комп’ютерне обладнання", - "classification": { - "description": "Комп’ютерне обладнанн", - "scheme": "ДК021", - "id": "30230000-0" - }, - "unit": { - "name": "штук", - "code": "H87" - }, - "quantity": 1.0, - "deliveryDate": { - "startDate": "2021-03-18T00:00:00+02:00", - "endDate": "2021-03-21T00:00:00+02:00" - }, - "deliveryAddress": { - "streetAddress": "вул. Банкова 1", - "locality": "м. Київ", - "region": "м. Київ", - "postalCode": "79000", - "countryName": "Україна" - } - } - ], "suppliers": [ { "name": "Державне управління справами", @@ -102,6 +75,38 @@ X-Content-Type-Options: nosniff "dateModified": "2021-03-16T00:00:03+02:00", "documentOf": "tender" } + ], + "items": [ + { + "id": "61a6737049384b08876fb0407eda182f", + "description": "Комп’ютерне обладнання", + "classification": { + "description": "Комп’ютерне обладнанн", + "scheme": "ДК021", + "id": "30230000-0" + }, + "quantity": 5.0, + "deliveryDate": { + "startDate": "2021-03-18T00:00:00+02:00", + "endDate": "2021-03-21T00:00:00+02:00" + }, + "deliveryAddress": { + "streetAddress": "вул. Банкова 1", + "locality": "м. Київ", + "region": "м. Київ", + "postalCode": "79000", + "countryName": "Україна" + }, + "unit": { + "name": "штук", + "code": "H87", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } + } + } ] } } diff --git a/docs/source/tendering/pricequotation/http/tender-contract-upload-document.http b/docs/source/tendering/pricequotation/http/tender-contract-upload-document.http index c86b26225b..c6bcd71fc8 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-upload-document.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-upload-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e/documents?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 +POST /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7/documents?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 Authorization: Bearer broker Content-Length: 342 Content-Type: application/json @@ -15,7 +15,7 @@ DATA: Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e/documents/58630a9dee574cedba85e5d5983775ff +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7/documents/58630a9dee574cedba85e5d5983775ff X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/pricequotation/http/tender-contract-upload-second-document.http b/docs/source/tendering/pricequotation/http/tender-contract-upload-second-document.http index 23dcd2c087..807dfd9dfc 100644 --- a/docs/source/tendering/pricequotation/http/tender-contract-upload-second-document.http +++ b/docs/source/tendering/pricequotation/http/tender-contract-upload-second-document.http @@ -1,4 +1,4 @@ -POST /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e/documents?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 +POST /api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7/documents?acc_token=c87b58b4160f425b8973621e89008a15 HTTP/1.0 Authorization: Bearer broker Content-Length: 343 Content-Type: application/json @@ -15,7 +15,7 @@ DATA: Response: 201 Created Content-Type: application/json -Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/17ef9f4806964b4183a7be2adfdccb9e/documents/f24744ecea6646e09d832d9136d84890 +Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/e821f507458c4e99bdd9928981355ffa/contracts/5d8bb2b40e5f43d18d5541a2297fa3c7/documents/f24744ecea6646e09d832d9136d84890 X-Content-Type-Options: nosniff { "data": { diff --git a/docs/source/tendering/pricequotation/http/tender-post-attempt-json-data.http b/docs/source/tendering/pricequotation/http/tender-post-attempt-json-data.http index b0d5268d9d..b31eadd6c2 100644 --- a/docs/source/tendering/pricequotation/http/tender-post-attempt-json-data.http +++ b/docs/source/tendering/pricequotation/http/tender-post-attempt-json-data.http @@ -1,6 +1,6 @@ POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0 Authorization: Bearer broker -Content-Length: 1803 +Content-Length: 1876 Content-Type: application/json Host: lb-api-sandbox.prozorro.gov.ua DATA: @@ -32,7 +32,14 @@ DATA: "items": [ { "description": "Комп’ютерне обладнання", - "quantity": 1, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6 + } + }, + "quantity": 5, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -77,7 +84,7 @@ X-Content-Type-Options: nosniff { "id": "61a6737049384b08876fb0407eda182f", "description": "Комп’ютерне обладнання", - "quantity": 1.0, + "quantity": 5.0, "deliveryDate": { "startDate": "2021-03-18T00:00:00+02:00", "endDate": "2021-03-21T00:00:00+02:00" @@ -88,6 +95,15 @@ X-Content-Type-Options: nosniff "region": "м. Київ", "postalCode": "79000", "countryName": "Україна" + }, + "unit": { + "name": "кг", + "code": "KGM", + "value": { + "amount": 6.0, + "currency": "UAH", + "valueAddedTaxIncluded": true + } } } ], diff --git a/docs/tests/base/data.py b/docs/tests/base/data.py index d5d5c9e07d..27aa46d58a 100644 --- a/docs/tests/base/data.py +++ b/docs/tests/base/data.py @@ -377,8 +377,8 @@ } ], "unit": { - "name": "item", - "code": "44617100-9" + "name": "кілограм", + "code": "KGM" }, "quantity": 5 } @@ -411,6 +411,10 @@ "locality": "м. Київ", "streetAddress": "вул. Банкова 1" }, + "unit": { + "code": "KGM", + "name": "кілограм" + }, "quantity": 1 }, { "additionalClassifications": [ @@ -427,6 +431,10 @@ "id": "37810000-9", "description": "Test" }, + "unit": { + "code": "PK", + "name": "упаковка" + }, "quantity": 1, "deliveryDate": { "startDate": (parse(MOCK_DATETIME) + timedelta(days=20)).isoformat(), @@ -442,20 +450,6 @@ } ] -items_en_unit = deepcopy(items_en) -items_en_unit[0].update({ - "unit": { - "code": "44617100-9", - "name": "item" - } -}) -items_en_unit[1].update({ - "unit": { - "code": "44617100-9", - "name": "item" - } -}) - items_ua = [ { "additionalClassifications": [ @@ -482,18 +476,17 @@ "id": "55523100-3", "scheme": "ДК021" }, + "unit": { + "code": "KGM", + "name": "папір", + "value": { + "amount": 10 + } + }, "quantity": 1 } ] -items_ua_unit = deepcopy(items_ua) -items_ua_unit[0].update({ - "unit": { - "code": "44617100-9", - "name": "item" - } -}) - procuring_entity = { "name": "Державне управління справами", "identifier": { @@ -674,7 +667,7 @@ "amount": 500 }, "procuringEntity": procuring_entity_en, - "items": items_en_unit, + "items": items_en, "milestones": test_milestones, "mainProcurementCategory": "services", } @@ -696,7 +689,7 @@ "shortlistedFirms": shortlisted_firms, "owner": "broker", "procuringEntity": procuring_entity_en, - "items": items_en_unit + "items": items_en } tender_stage2EU = { @@ -717,7 +710,7 @@ "shortlistedFirms": shortlisted_firms, "owner": "broker", "procuringEntity": procuring_entity_en, - "items": items_en_unit + "items": items_en } tender_stage2UA = { @@ -736,7 +729,7 @@ "shortlistedFirms": shortlisted_firms, "owner": "broker", "procuringEntity": procuring_entity_ua, - "items": items_ua_unit + "items": items_ua } tender_limited = { @@ -801,6 +794,10 @@ "mainProcurementCategory": "services", } +items_esco = deepcopy(items_en) +items_esco[0].pop("unit") +items_esco[1].pop("unit") + tender_esco = { "tenderPeriod": { "endDate": (parse(MOCK_DATETIME) + timedelta(days=31)).isoformat() @@ -810,7 +807,7 @@ "procurementMethodType": "esco", "minimalStepPercentage": 0.006, "procuringEntity": procuring_entity_en, - "items": items_en_unit, + "items": items_esco, "NBUdiscountRate": 0.22986, "fundingKind": "other", "yearlyPaymentsPercentageRange": 0.8, diff --git a/docs/tests/test_centralized_procurements.py b/docs/tests/test_centralized_procurements.py index 6d48811526..7ecc2e8d19 100644 --- a/docs/tests/test_centralized_procurements.py +++ b/docs/tests/test_centralized_procurements.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import os +from uuid import uuid4 from copy import deepcopy from freezegun import freeze_time from openprocurement.planning.api.tests.base import BasePlanWebTest @@ -68,14 +69,14 @@ def test_docs(self): {'data': test_plan_data}) self.assertEqual(response.status, '201 Created') - plan = response.json['data'] - self.plan_id = plan["id"] + _plan = response.json['data'] + self.plan_id = _plan["id"] owner_token = response.json['access']['token'] with freeze_time("2019-05-02 01:01:00"): with open(TARGET_DIR + 'patch-plan-status-scheduled.http', 'w') as self.app.file_obj: response = self.app.patch_json( - '/plans/{}?acc_token={}'.format(plan['id'], owner_token), + '/plans/{}?acc_token={}'.format(_plan['id'], owner_token), {'data': {"status": "scheduled"}} ) self.assertEqual(response.json["data"]["status"], "scheduled") @@ -83,7 +84,7 @@ def test_docs(self): with freeze_time("2019-05-02 02:00:00"): with open(TARGET_DIR + 'post-plan-milestone.http', 'w') as self.app.file_obj: response = self.app.post_json( - '/plans/{}/milestones'.format(plan['id']), + '/plans/{}/milestones'.format(_plan['id']), {'data': { "title": MILESTONE_APPROVAL_TITLE, "description": MILESTONE_APPROVAL_DESCRIPTION, @@ -100,7 +101,7 @@ def test_docs(self): with open(TARGET_DIR + 'patch-plan-milestone.http', 'w') as self.app.file_obj: response = self.app.patch_json( '/plans/{}/milestones/{}?acc_token={}'.format( - plan['id'], milestone["id"], milestone_token + _plan['id'], milestone["id"], milestone_token ), {'data': { "status": "met", @@ -114,7 +115,7 @@ def test_docs(self): with open(TARGET_DIR + 'post-plan-milestone-document.http', 'w') as self.app.file_obj: response = self.app.post_json( '/plans/{}/milestones/{}/documents?acc_token={}'.format( - plan["id"], milestone["id"], milestone_token + _plan["id"], milestone["id"], milestone_token ), {"data": { "title": "Notice.pdf", @@ -141,8 +142,20 @@ def test_docs(self): endDate="2019-10-30T01:00:00+03:00", ) test_tender_data["procuringEntity"] = procuring_entity - test_tender_data["buyers"] = test_plan_data["buyers"] - test_tender_data["items"] = test_plan_data["items"] + + buyer1 = deepcopy(test_plan_data["buyers"][0]) + buyer1["id"] = uuid4().hex + + buyer2 = deepcopy(test_plan_data["buyers"][0]) + buyer2["id"] = uuid4().hex + buyer2["identifier"]["id"] = "222983" + + test_tender_data["buyers"] = [buyer1, buyer2] + test_tender_data["items"] = deepcopy(plan["items"]) + test_tender_data["items"][0]["relatedBuyer"] = buyer1["id"] # assign buyers + test_tender_data["items"][1]["relatedBuyer"] = buyer1["id"] + test_tender_data["items"][2]["relatedBuyer"] = buyer2["id"] + test_tender_data["status"] = "draft" with freeze_time("2019-05-12 09:00:00"): @@ -162,12 +175,12 @@ def test_docs(self): tender["data"]["id"], tender["access"]["token"] ), - {"data": {"id": plan['id']}} + {"data": {"id": _plan['id']}} ) self.assertEqual(response.status, '200 OK') with open(TARGET_DIR + 'plan-complete.http', 'w') as self.app.file_obj: - response = self.app.get('/plans/{}'.format(plan['id'])) + response = self.app.get('/plans/{}'.format(_plan['id'])) self.assertEqual(response.status, '200 OK') with open(TARGET_DIR + 'tender-get.http', 'w') as self.app.file_obj: diff --git a/docs/tests/test_cfaua.py b/docs/tests/test_cfaua.py index ca0d6be829..eecc7fa8fe 100644 --- a/docs/tests/test_cfaua.py +++ b/docs/tests/test_cfaua.py @@ -77,7 +77,7 @@ def test_docs(self): lot['value'] = test_tender_data['value'] lot['minimalStep'] = test_tender_data['minimalStep'] second_item = deepcopy(test_tender_data['items'][0]) - second_item['unit']['code'] = '44617100-8' + second_item['unit']['code'] = 'GRM' test_tender_data['items'] = [test_tender_data['items'][0], second_item] test_tender_data['lots'] = [lot] for item in test_tender_data['items']: diff --git a/docs/tests/test_contracting.py b/docs/tests/test_contracting.py index 40991abb22..500cde9c0f 100644 --- a/docs/tests/test_contracting.py +++ b/docs/tests/test_contracting.py @@ -4,14 +4,17 @@ from copy import deepcopy from openprocurement.api.models import get_now -from openprocurement.tender.belowthreshold.tests.base import BaseTenderWebTest +from openprocurement.tender.belowthreshold.tests.base import BaseTenderWebTest, test_tender_data_multi_buyers from openprocurement.contracting.api.tests.base import test_contract_data from openprocurement.tender.belowthreshold.tests.base import test_tender_data, test_organization from tests.base.test import DumpsWebTestApp, MockWebTestMixin from tests.base.constants import DOCS_URL +from freezegun import freeze_time + test_tender_data = deepcopy(test_tender_data) +test_tender_data_multi_buyers = deepcopy(test_tender_data_multi_buyers) TARGET_DIR = 'docs/source/contracting/http/' @@ -109,7 +112,7 @@ def test_docs(self): #### Exploring basic rules - with open(TARGET_DIR + 'contracts-listing-0.http', 'w') as self.app.file_obj: + with open(TARGET_DIR + 'contracts-listing-0.http', 'w') as self.app.file_obj: self.app.authorization = None response = self.app.get(request_path) self.assertEqual(response.status, '200 OK') @@ -286,3 +289,125 @@ def test_docs(self): "amountPaid": {"amount": 430, "amountNet": 420} }}) self.assertEqual(response.status, '200 OK') + + +class MultiContractsTenderResourceTest(BaseTenderWebTest, MockWebTestMixin): + AppClass = DumpsWebTestApp + + relative_to = os.path.dirname(__file__) + initial_data = test_tender_data_multi_buyers + docservice = False + docservice_url = DOCS_URL + + def setUp(self): + super(MultiContractsTenderResourceTest, self).setUp() + self.setUpMock() + + def tearDown(self): + self.tearDownMock() + super(MultiContractsTenderResourceTest, self).tearDown() + + def test_docs(self): + self.app.authorization = ('Basic', ('broker', '')) + # empty tenders listing + response = self.app.get('/tenders') + test_tender_data_multi_buyers["buyers"][0]["id"] = "1"*32 + test_tender_data_multi_buyers["buyers"][1]["id"] = "2" * 32 + + test_tender_data_multi_buyers["items"][0]["relatedBuyer"] = "1" * 32 + test_tender_data_multi_buyers["items"][1]["relatedBuyer"] = "2" * 32 + test_tender_data_multi_buyers["items"][2]["relatedBuyer"] = "2" * 32 + + for item in test_tender_data_multi_buyers['items']: + item['deliveryDate'] = { + "startDate": (get_now() + timedelta(days=2)).isoformat(), + "endDate": (get_now() + timedelta(days=5)).isoformat() + } + test_tender_data_multi_buyers.update({ + "enquiryPeriod": {"endDate": (get_now() + timedelta(days=7)).isoformat()}, + "tenderPeriod": {"endDate": (get_now() + timedelta(days=14)).isoformat()} + }) + self.assertEqual(response.json['data'], []) + with open(TARGET_DIR + 'create-multiple-buyers-tender.http', 'w') as self.app.file_obj: + response = self.app.post_json( + '/tenders', + {'data': test_tender_data_multi_buyers}) + self.assertEqual(response.status, '201 Created') + response = self.app.post_json('/tenders', {"data": test_tender_data_multi_buyers}) + tender_id = self.tender_id = response.json['data']['id'] + owner_token = response.json['access']['token'] + # switch to active.tendering + response = self.set_status( + 'active.tendering', + {"auctionPeriod": {"startDate": (get_now() + timedelta(days=10)).isoformat()}}) + self.assertIn("auctionPeriod", response.json['data']) + # create bid + self.app.authorization = ('Basic', ('broker', '')) + response = self.app.post_json( + '/tenders/{}/bids'.format(tender_id), + {'data': {'tenderers': [test_organization], "value": {"amount": 500}}}) + # switch to active.qualification + self.set_status('active.auction', {'status': 'active.tendering'}) + self.app.authorization = ('Basic', ('chronograph', '')) + response = self.app.patch_json( + '/tenders/{}'.format(tender_id), + {'data': {"id": tender_id}}) + self.assertNotIn('auctionPeriod', response.json['data']) + # get awards + self.app.authorization = ('Basic', ('broker', '')) + response = self.app.get('/tenders/{}/awards?acc_token={}'.format(tender_id, owner_token)) + # get pending award + award_id = [i['id'] for i in response.json['data'] if i['status'] == 'pending'][0] + # set award as active + with open(TARGET_DIR + 'set-active-award.http', 'w') as self.app.file_obj: + response = self.app.patch_json( + '/tenders/{}/awards/{}?acc_token={}'.format(tender_id, award_id, owner_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, '200 OK') + # get contract id + with open(TARGET_DIR + 'get-multi-contracts.http', 'w') as self.app.file_obj: + response = self.app.get('/tenders/{}/contracts'.format(tender_id)) + self.assertEqual(response.status, '200 OK') + contracts = response.json['data'] + # after stand slill period + self.app.authorization = ('Basic', ('chronograph', '')) + self.set_status('complete', {'status': 'active.awarded'}) + self.tick() + # time travel + tender = self.db.get(tender_id) + for i in tender.get('awards', []): + i['complaintPeriod']['endDate'] = i['complaintPeriod']['startDate'] + self.db.save(tender) + + self.app.authorization = ('Basic', ('broker', '')) + with open(TARGET_DIR + 'patch-1st-contract-value.http', 'w') as self.app.file_obj: + self.app.patch_json( + '/tenders/{}/contracts/{}?acc_token={}'.format(tender_id, contracts[0]["id"], owner_token), + {"data": {"value": {"amount": 100, "amountNet": 95}}} + ) + self.assertEqual(response.status, '200 OK') + with open(TARGET_DIR + 'patch-2nd-contract-value.http', 'w') as self.app.file_obj: + self.app.patch_json( + '/tenders/{}/contracts/{}?acc_token={}'.format(tender_id, contracts[1]["id"], owner_token), + {"data": {"value": {"amount": 200, "amountNet": 190}}} + ) + self.assertEqual(response.status, '200 OK') + + self.app.patch_json( + '/tenders/{}/contracts/{}?acc_token={}'.format(tender_id, contracts[0]["id"], owner_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, '200 OK') + + self.app.patch_json( + '/tenders/{}/contracts/{}?acc_token={}'.format(tender_id, contracts[1]["id"], owner_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, '200 OK') + + response = self.app.get( + '/tenders/{}'.format(tender_id) + ) + self.assertEqual(response.json["data"]["status"], "complete") + diff --git a/docs/tests/test_pricequotation.py b/docs/tests/test_pricequotation.py index 5ea00eee63..6527b565c3 100644 --- a/docs/tests/test_pricequotation.py +++ b/docs/tests/test_pricequotation.py @@ -67,7 +67,7 @@ def test_docs_publish_tenders(self): self.assertEqual(len(tender["items"]), 1) self.assertNotIn("shortlistedFirms", tender) self.assertNotIn("classification", tender["items"][0]) - self.assertNotIn("unit", tender["items"][0]) + self.assertIn("unit", tender["items"][0]) self.assertEqual(tender["profile"], test_short_profile["id"]) with open(TARGET_DIR + 'publish-tender.http', 'w') as self.app.file_obj: @@ -81,7 +81,6 @@ def test_docs_publish_tenders(self): items = deepcopy(tender["items"]) items[0]["classification"] = test_short_profile["classification"] - items[0]["unit"] = test_short_profile["unit"] criteria = deepcopy(test_short_profile["criteria"]) data = { "data": { diff --git a/src/openprocurement/api/constants.ini b/src/openprocurement/api/constants.ini index 8adabaaf4f..d51536b7b3 100644 --- a/src/openprocurement/api/constants.ini +++ b/src/openprocurement/api/constants.ini @@ -29,3 +29,5 @@ RELEASE_METRICS_FROM = 2021-03-01T00:00:00+03:00 VALIDATE_TELEPHONE_FROM = 2021-02-01T00:00:00+03:00 REQUIRED_FIELDS_BY_SUBMISSION_FROM = 2021-04-28T00:00:00+03:00 VALIDATE_CURRENCY_FROM = 2021-05-18T00:00:00+03:00 +UNIT_PRICE_REQUIRED_FROM = 2021-01-30T00:00:00+03:00 +MULTI_CONTRACTS_REQUIRED_FROM = 2021-02-20T00:00:00+03:00 diff --git a/src/openprocurement/api/constants.py b/src/openprocurement/api/constants.py index f837b4aed0..487669b85c 100644 --- a/src/openprocurement/api/constants.py +++ b/src/openprocurement/api/constants.py @@ -190,7 +190,12 @@ def get_constant(config, constant, section=DEFAULTSECT, parse_func=parse_constan # CS-10305 validation required fields by submission REQUIRED_FIELDS_BY_SUBMISSION_FROM = get_constant(CONSTANTS_CONFIG, "REQUIRED_FIELDS_BY_SUBMISSION_FROM") +# CS-9333 unit object required for item +UNIT_PRICE_REQUIRED_FROM = get_constant(CONSTANTS_CONFIG, "UNIT_PRICE_REQUIRED_FROM") # CS-10431 validation currency CURRENCIES = standards.load("codelists/tender/tender_currency.json") VALIDATE_CURRENCY_FROM = get_constant(CONSTANTS_CONFIG, "VALIDATE_CURRENCY_FROM") + +# CS-10207 multi contracts required for multi buyers +MULTI_CONTRACTS_REQUIRED_FROM = get_constant(CONSTANTS_CONFIG, "MULTI_CONTRACTS_REQUIRED_FROM") diff --git a/src/openprocurement/api/models.py b/src/openprocurement/api/models.py index d7f487b099..914625d902 100644 --- a/src/openprocurement/api/models.py +++ b/src/openprocurement/api/models.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import standards from datetime import datetime, timedelta from decimal import Decimal, InvalidOperation, ROUND_HALF_UP from isodate import ISO8601Error, parse_duration, duration_isoformat @@ -50,10 +51,12 @@ VALIDATE_TELEPHONE_FROM, CURRENCIES, VALIDATE_CURRENCY_FROM, + UNIT_PRICE_REQUIRED_FROM, ) schematics_default_role = SchematicsDocument.Options.roles["default"] + blacklist("__parent__") schematics_embedded_role = SchematicsDocument.Options.roles["embedded"] + blacklist("__parent__") +UNIT_CODES = standards.load("unit_codes/recommended.json") plain_role = blacklist("_attachments", "revisions", "dateModified") + schematics_embedded_role listing_role = whitelist("dateModified", "doc_id") @@ -417,6 +420,13 @@ class Unit(Model): value = ModelType(Value) code = StringType(required=True) + def validate_code(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM: + if value not in UNIT_CODES: + raise ValidationError(u"Code should be one of valid unit codes.") + class Address(Model): streetAddress = StringType() @@ -630,6 +640,7 @@ class Item(Model): deliveryAddress = ModelType(Address) deliveryLocation = ModelType(Location) relatedLot = MD5Type() + relatedBuyer = MD5Type() class ContactPoint(Model): @@ -694,6 +705,7 @@ class Revision(Model): class Contract(Model): id = MD5Type(required=True, default=lambda: uuid4().hex) + buyerID = StringType() awardID = StringType() contractID = StringType() contractNumber = StringType() diff --git a/src/openprocurement/contracting/api/tests/contract_blanks.py b/src/openprocurement/contracting/api/tests/contract_blanks.py index 6ad4cb2da6..1c5a962fea 100644 --- a/src/openprocurement/contracting/api/tests/contract_blanks.py +++ b/src/openprocurement/contracting/api/tests/contract_blanks.py @@ -1051,9 +1051,43 @@ def contract_items_change(self): response = self.app.patch_json( "/contracts/{}?acc_token={}".format(self.contract["id"], token), {"data": {"items": [{"quantity": 12, "description": "тапочки для тараканів"}]}}, + status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], + [ + { + "location": "body", + "name": "data", + "description": "Total amount of unit values can't be greater than contract.value.amount" + } + ] + ) + + response = self.app.patch_json( + "/contracts/{}?acc_token={}".format(self.contract["id"], token), + { + "data": + { + "items": + [ + { + "quantity": 12, + "description": "тапочки для тараканів", + "unit": { + "value": { + "amount": 3.2394 + }, + } + } + ] + } + }, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["items"][0]["quantity"], 12) + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["amount"], 3.2394) self.assertEqual(response.json["data"]["items"][0]["description"], "тапочки для тараканів") # add one more item diff --git a/src/openprocurement/contracting/api/tests/data.py b/src/openprocurement/contracting/api/tests/data.py index 99bdd41677..bcdf25a1cf 100644 --- a/src/openprocurement/contracting/api/tests/data.py +++ b/src/openprocurement/contracting/api/tests/data.py @@ -31,7 +31,15 @@ "endDate": "2016-03-23T18:47:47.136678+02:00", }, "id": "c6c6e8ed4b1542e4bf13d3f98ec5ab59", - "unit": {"code": "44617100-9", "name": "item"}, + "unit": { + "code": "KGM", + "name": "кг", + "value": { + "currency": "UAH", + "amount": 20.8, + "valueAddedTaxIncluded": True + } + }, "quantity": 5, } ], diff --git a/src/openprocurement/contracting/api/tests/data/tender-contract-complete.json b/src/openprocurement/contracting/api/tests/data/tender-contract-complete.json index 727c63196b..693e781f80 100644 --- a/src/openprocurement/contracting/api/tests/data/tender-contract-complete.json +++ b/src/openprocurement/contracting/api/tests/data/tender-contract-complete.json @@ -71,7 +71,7 @@ }, "id": "668d0c872d5e457fa13615698bdc7efa", "unit": { - "code": "44617100-9", + "code": "MTR", "name": "item" }, "quantity": 5 @@ -150,7 +150,7 @@ }, "id": "95a791af529d402483e4a19ed7de1fee", "unit": { - "code": "44617100-9", + "code": "MTR", "name": "item" }, "quantity": 5 @@ -221,7 +221,7 @@ }, "id": "668d0c872d5e457fa13615698bdc7efa", "unit": { - "code": "44617100-9", + "code": "MTQ", "name": "item" }, "quantity": 5 diff --git a/src/openprocurement/contracting/api/validation.py b/src/openprocurement/contracting/api/validation.py index 19ed009517..ca484a8e5d 100644 --- a/src/openprocurement/contracting/api/validation.py +++ b/src/openprocurement/contracting/api/validation.py @@ -20,6 +20,7 @@ validate_update_contract_value, validate_update_contract_value_amount, validate_update_contract_value_net_required, + validate_contract_items_unit_value_amount, ) from openprocurement.api.models import Model, IsoDateTimeType, Guarantee from openprocurement.contracting.api.models import OrganizationReference @@ -147,6 +148,12 @@ def validate_file_transaction_upload(request, **kwargs): return validate_data(request, model) +def validate_update_contracting_items_unit_value_amount(request, **kwargs): + contract = request.validated["contract"] + if contract.items: + validate_contract_items_unit_value_amount(request, contract) + + def validate_add_document_to_active_change(request, **kwargs): data = request.validated["data"] if "relatedItem" in data and data.get("documentOf") == "change": @@ -159,7 +166,9 @@ def validate_add_document_to_active_change(request, **kwargs): def validate_update_contracting_value_amount(request, name="value", **kwargs): schematics_document = get_schematics_document(request.validated["contract"]) validation_date = get_first_revision_date(schematics_document, default=get_now()) - validate_update_contract_value_amount(request, name=name, allow_equal=validation_date < VAT_FROM) + validate_update_contract_value_amount( + request, name=name, allow_equal=validation_date < VAT_FROM, scope="contracting" + ) def validate_update_contracting_paid_amount(request, **kwargs): diff --git a/src/openprocurement/contracting/api/views/contract.py b/src/openprocurement/contracting/api/views/contract.py index 066d8a8f4f..216852059e 100644 --- a/src/openprocurement/contracting/api/views/contract.py +++ b/src/openprocurement/contracting/api/views/contract.py @@ -22,6 +22,7 @@ validate_update_contract_paid_net_required, validate_put_transaction_to_contract, validate_transaction_existence, + validate_update_contracting_items_unit_value_amount, ) from openprocurement.contracting.api.design import ( FIELDS, @@ -113,6 +114,7 @@ def patch(self): apply_patch(self.request, save=False, src=self.request.validated["contract_src"]) validate_terminate_contract_without_amountPaid(self.request) + validate_update_contracting_items_unit_value_amount(self.request) if save_contract(self.request): self.LOGGER.info( diff --git a/src/openprocurement/framework/cfaua/tests/data/agreement.json b/src/openprocurement/framework/cfaua/tests/data/agreement.json index cadb930bb3..e4cc016a6a 100644 --- a/src/openprocurement/framework/cfaua/tests/data/agreement.json +++ b/src/openprocurement/framework/cfaua/tests/data/agreement.json @@ -146,7 +146,7 @@ }, "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", "unit": { - "code": "44617100-9", + "code": "KGM", "name": "item" }, "quantity": 5 diff --git a/src/openprocurement/planning/api/models.py b/src/openprocurement/planning/api/models.py index b079bedca9..6963b884ca 100644 --- a/src/openprocurement/planning/api/models.py +++ b/src/openprocurement/planning/api/models.py @@ -196,6 +196,7 @@ def validate_additionalClassifications(self, data, items): class BaseOrganization(Model): """Base organization""" + id = MD5Type(default=lambda: uuid4().hex) name = StringType(required=True) name_en = StringType() name_ru = StringType() diff --git a/src/openprocurement/planning/api/tests/plan_blanks.py b/src/openprocurement/planning/api/tests/plan_blanks.py index 61c029e755..bc572a61a5 100644 --- a/src/openprocurement/planning/api/tests/plan_blanks.py +++ b/src/openprocurement/planning/api/tests/plan_blanks.py @@ -976,8 +976,10 @@ def create_plan_invalid_procuring_entity(self): self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") + procuring_entity = response.json['data']['procuringEntity'] + procuring_entity.pop("id") self.assertEqual( - response.json['data']['procuringEntity'], + procuring_entity, {"identifier": {"scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Управління Справами"}, "name": "new_name123"} ) @@ -993,8 +995,10 @@ def create_plan_invalid_procuring_entity(self): ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") + procuring_entity = response.json['data']['procuringEntity'] + procuring_entity.pop("id") self.assertEqual( - response.json['data']['procuringEntity'], + procuring_entity, {"identifier": {"scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Управління Справами"}, "name": "new_name123", "address": {"countryName": "Ірландія"}, @@ -1149,8 +1153,10 @@ def create_plan_invalid_buyers(self): self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") + buyers = response.json['data']['buyers'][0] + buyers.pop("id") self.assertEqual( - response.json['data']['buyers'][0], + buyers, {"identifier": {"scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Управління Справами"}, "name": "new_name123"} ) @@ -1166,8 +1172,10 @@ def create_plan_invalid_buyers(self): ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") + buyers = response.json['data']['buyers'][0] + buyers.pop("id") self.assertEqual( - response.json['data']['buyers'][0], + buyers, {"identifier": {"scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Управління Справами"}, "name": "new_name123", "address": {"countryName": "Ірландія"}, @@ -1739,6 +1747,7 @@ def create_plan_with_buyers(self): data = deepcopy(self.initial_data) data["buyers"] = [ dict( + id=uuid.uuid4().hex, name="", name_en="", identifier=dict(scheme="UA-EDR", id="111983", legalName="ДП Державне Управління Справами"), diff --git a/src/openprocurement/planning/api/tests/plan_centralized_procurement.py b/src/openprocurement/planning/api/tests/plan_centralized_procurement.py index 282a648878..7c4ec1f289 100644 --- a/src/openprocurement/planning/api/tests/plan_centralized_procurement.py +++ b/src/openprocurement/planning/api/tests/plan_centralized_procurement.py @@ -11,10 +11,12 @@ from openprocurement.api.utils import get_now, parse_date from datetime import timedelta, datetime from copy import deepcopy +from uuid import uuid4 import pytest milestone_author = { + "id": "1"*32, "identifier": { "scheme": "UA-EDR", "id": "11111", @@ -24,6 +26,7 @@ } central_procuring_entity = { + "id": "2"*32, "identifier": { "scheme": "UA-EDR", "id": "11111", @@ -603,6 +606,7 @@ def test_success_patch_plan_procuring_entity_in_time(app, centralized_milestone, app.app.registry.databases.plans.save(plan_source) new_procuring_entity = { + "id": uuid4().hex, "identifier": { "scheme": "UA-EDR", "id": "222222", @@ -715,6 +719,7 @@ def test_success_patch_plan_procuring_entity_not_in_time(app, centralized_milest app.app.registry.databases.plans.save(plan_source) request_entity = { + "id": uuid4().hex, "identifier": { "scheme": "UA-EDR", "id": "222222", diff --git a/src/openprocurement/tender/belowthreshold/models.py b/src/openprocurement/tender/belowthreshold/models.py index 9d23bedbe8..e9fb6b1a98 100644 --- a/src/openprocurement/tender/belowthreshold/models.py +++ b/src/openprocurement/tender/belowthreshold/models.py @@ -11,9 +11,9 @@ from barbecue import vnmax from zope.interface import implementer -from openprocurement.api.models import ListType, Period, Value, Guarantee +from openprocurement.api.models import ListType, Period, Value, Guarantee, Model, Unit as BaseUnit from openprocurement.api.utils import get_now, get_first_revision_date -from openprocurement.api.constants import TZ, RELEASE_2020_04_19, CPV_ITEMS_CLASS_FROM +from openprocurement.api.constants import TZ, RELEASE_2020_04_19, CPV_ITEMS_CLASS_FROM, UNIT_PRICE_REQUIRED_FROM from openprocurement.api.validation import validate_items_uniq, validate_cpv_group, validate_classification_id from openprocurement.tender.core.constants import COMPLAINT_STAND_STILL_TIME from openprocurement.tender.core.validation import validate_minimalstep @@ -26,9 +26,9 @@ Tender as BaseTender, Bid as BaseBid, ProcuringEntity, - Item, + Item as BaseItem, Award, - Contract, + Contract as BaseContract, Question, Cancellation as BaseCancellation, Feature, @@ -37,7 +37,7 @@ BidResponsesMixin, validate_features_uniq, validate_lots_uniq, - get_tender + get_tender, ) from openprocurement.tender.core.utils import ( @@ -90,6 +90,71 @@ class Bid(BaseBid, BidResponsesMixin): pass +class UnitValue(Value): + currency = StringType(default=u"UAH", max_length=3, min_length=3) + valueAddedTaxIncluded = BooleanType(default=True) + + @serializable(serialized_name="currency", serialize_when_none=False) + def unit_currency(self): + + context = self.__parent__ if isinstance(self.__parent__, Model) else {} + while isinstance(context.__parent__, Model): + context = context.__parent__ + if isinstance(context, BaseContract): + if context.get("value"): + break + if isinstance(context, BaseTender): + break + + value = context.get("value", {}) + return value.get("currency", None) + + @serializable(serialized_name="valueAddedTaxIncluded", serialize_when_none=False) + def unit_valueAddedTaxIncluded(self): + + context = self.__parent__ if isinstance(self.__parent__, Model) else {} + while isinstance(context.__parent__, Model): + context = context.__parent__ + if isinstance(context, BaseContract): + if context.get("value"): + break + if isinstance(context, BaseTender): + break + + value = context.get("value", {}) + return value.get("valueAddedTaxIncluded", None) + + +class Unit(BaseUnit): + class Options: + roles = {"edit_contract": whitelist("value")} + + value = ModelType(UnitValue) + + +class Item(BaseItem): + class Options: + roles = {"edit_contract": whitelist("unit")} + + unit = ModelType(Unit) + + def validate_unit(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM and not value: + raise ValidationError(u"This field is required.") + + def validate_quantity(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM and value is None: + raise ValidationError(u"This field is required.") + + +class Contract(BaseContract): + items = ListType(ModelType(Item, required=True)) + + @implementer(IBelowThresholdTender) class Tender(BaseTender): """Data regarding tender process - publicly inviting prospective contractors diff --git a/src/openprocurement/tender/belowthreshold/tests/base.py b/src/openprocurement/tender/belowthreshold/tests/base.py index f30d9607ea..43e593592e 100644 --- a/src/openprocurement/tender/belowthreshold/tests/base.py +++ b/src/openprocurement/tender/belowthreshold/tests/base.py @@ -67,7 +67,11 @@ "additionalClassifications": [ {"scheme": "ДКПП", "id": "17.21.1", "description": "папір і картон гофровані, паперова й картонна тара"} ], - "unit": {"name": "item", "code": "44617100-9"}, + "unit": { + "name": "кг", + "code": "KGM", + "value": {"amount": 6}, + }, "quantity": 5, "deliveryDate": { "startDate": (now + timedelta(days=2)).isoformat(), @@ -251,6 +255,54 @@ def set_bid_lotvalues(bid, lots): return bid +def set_tender_multi_buyers(_test_tender_data, _test_item, _test_organization): + _tender_data = deepcopy(_test_tender_data) + + # create 3 items + test_item1 = deepcopy(_test_item) + test_item1["description"] = "телевізори" + + test_item2 = deepcopy(_test_item) + test_item2["description"] = "портфелі" + test_item2.pop("id", None) + + test_item3 = deepcopy(_test_item) + test_item3["description"] = "столи" + test_item3.pop("id", None) + + _tender_data["items"] = [test_item1, test_item2, test_item2] + + # create 2 buyers + buyer1_id = uuid4().hex + buyer2_id = uuid4().hex + + _test_organization_1 = deepcopy(_test_organization) + _test_organization_2 = deepcopy(_test_organization) + _test_organization_2["identifier"]["id"] = "00037254" + + _tender_data["buyers"] = [ + { + "id": buyer1_id, + "name": _test_organization_1["name"], + "identifier": _test_organization_1["identifier"] + }, + { + "id": buyer2_id, + "name": _test_organization_2["name"], + "identifier": _test_organization_2["identifier"] + }, + ] + # assign items to buyers + _tender_data["items"][0]["relatedBuyer"] = buyer1_id + _tender_data["items"][1]["relatedBuyer"] = buyer2_id + _tender_data["items"][2]["relatedBuyer"] = buyer2_id + + return _tender_data + + +test_tender_data_multi_buyers = set_tender_multi_buyers(test_tender_data, test_item, test_organization) + + class BaseApiWebTest(BaseWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/belowthreshold/tests/contract.py b/src/openprocurement/tender/belowthreshold/tests/contract.py index a859d29963..fa3a60edc9 100644 --- a/src/openprocurement/tender/belowthreshold/tests/contract.py +++ b/src/openprocurement/tender/belowthreshold/tests/contract.py @@ -8,6 +8,7 @@ test_bids, test_lots, test_organization, + test_tender_data_multi_buyers, ) from openprocurement.tender.belowthreshold.tests.contract_blanks import ( # TenderContractResourceTest @@ -44,6 +45,9 @@ lot2_create_tender_contract_document_by_others, lot2_put_tender_contract_document_by_supplier, lot2_patch_tender_contract_document_by_supplier, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, + patch_tender_multi_contracts, ) @@ -64,9 +68,7 @@ class TenderContractResourceTest(TenderContentWebTest, TenderContractResourceTes initial_status = "active.qualification" initial_bids = test_bids - def setUp(self): - super(TenderContractResourceTest, self).setUp() - # Create award + def create_award(self): auth = self.app.authorization self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( @@ -92,6 +94,10 @@ def setUp(self): {"data": {"status": "active"}}, ) + def setUp(self): + super(TenderContractResourceTest, self).setUp() + self.create_award() + test_create_tender_contract = snitch(create_tender_contract) test_create_tender_contract_in_complete_status = snitch(create_tender_contract_in_complete_status) test_patch_tender_contract = snitch(patch_tender_contract) @@ -100,6 +106,8 @@ def setUp(self): test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(TenderContentWebTest, TenderContractResourceTestMixin): @@ -268,12 +276,25 @@ def setUp(self): test_lot2_patch_tender_contract_document_by_supplier = snitch(lot2_patch_tender_contract_document_by_supplier) +class TenderContractMultiBuyersResourceTest(TenderContentWebTest): + initial_status = "active.qualification" + initial_bids = test_bids + initial_data = test_tender_data_multi_buyers + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + TenderContractResourceTest.create_award(self) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest)) suite.addTest(unittest.makeSuite(TenderContractDocumentResourceTest)) suite.addTest(unittest.makeSuite(TenderContractVATNotIncludedResourceTest)) suite.addTest(unittest.makeSuite(Tender2LotContractDocumentResourceTest)) + suite.addTest(unittest.makeSuite(TenderContractMultiBuyersResourceTest)) return suite diff --git a/src/openprocurement/tender/belowthreshold/tests/contract_blanks.py b/src/openprocurement/tender/belowthreshold/tests/contract_blanks.py index 95b1c3d5f8..6166964b7b 100644 --- a/src/openprocurement/tender/belowthreshold/tests/contract_blanks.py +++ b/src/openprocurement/tender/belowthreshold/tests/contract_blanks.py @@ -3,6 +3,7 @@ from datetime import timedelta from copy import deepcopy from openprocurement.api.utils import get_now +from uuid import uuid4 from openprocurement.tender.belowthreshold.tests.base import test_claim, test_cancellation from openprocurement.tender.core.tests.cancellation import activate_cancellation_after_2020_04_19 @@ -147,6 +148,121 @@ def create_tender_contract(self): ) +def patch_tender_multi_contracts(self): + contracts_response = self.app.get("/tenders/{}/contracts".format(self.tender_id)) + contracts = contracts_response.json["data"] + # 1st contract contains 1 item, 2nd contract contains 2 items + self.assertEqual(len(contracts), 2) + self.assertEqual(len(contracts[0]["items"]), 1) + self.assertEqual(len(contracts[1]["items"]), 2) + + self.assertEqual(contracts[0]["value"]["amount"], 0) + self.assertEqual(contracts[1]["value"]["amount"], 0) + + self.assertEqual(contracts[0]["value"]["valueAddedTaxIncluded"], True) + self.assertEqual(contracts[1]["value"]["valueAddedTaxIncluded"], True) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[0]["id"], self.tender_token), + {"data": {"value": {"amount": 200}}}, + status=403, + ) + self.assertEqual(response.status, "403 Forbidden") + + self.assertEqual( + response.json["errors"], [ + { + 'location': 'body', + 'name': 'value', + 'description': 'Amount should be greater than amountNet and differ by no more than 20.0%' + } + ] + ) + # patch 1st contract + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[0]["id"], self.tender_token), + {"data": {"value": {"amount": 200, "amountNet": 195}}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["value"]["amount"], 200) + self.assertEqual(response.json["data"]["value"]["amountNet"], 195) + + # patch 2nd contract + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[1]["id"], self.tender_token), + {"data": {"value": {"amount": 400, "amountNet": 390}}}, + status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + + self.assertEqual( + response.json["errors"], [ + { + 'location': 'body', + 'name': 'value', + 'description': 'Amount should be less or equal to awarded amount' + } + ] + ) + + # 1st contract.value + 2nd contract.value <= award.amount.value + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[1]["id"], self.tender_token), + {"data": {"value": {"amount": 190, "amountNet": 185}}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["value"]["amount"], 190) + self.assertEqual(response.json["data"]["value"]["amountNet"], 185) + + # overall amountNet/amount % -> (195 + 140) / (200 + 190) = 0.85 >= 0.8 + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[1]["id"], self.tender_token), + {"data": {"value": {"amount": 190, "amountNet": 140}}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["value"]["amount"], 190) + self.assertEqual(response.json["data"]["value"]["amountNet"], 140) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[1]["id"], self.tender_token), + {"data": {"value": {"amount": 190, "amountNet": 140}}}, + ) + + # prepare contract for activating + doc = self.db.get(self.tender_id) + for i in doc.get("awards", []): + if 'complaintPeriod' in i: + i["complaintPeriod"]["endDate"] = i["complaintPeriod"]["startDate"] + if doc['contracts'][0]['value']['valueAddedTaxIncluded']: + doc['contracts'][0]['value']['amountNet'] = str(float(doc['contracts'][0]['value']['amount']) - 1) + self.db.save(doc) + + response = self.app.get("/tenders/{}".format(self.tender_id)) + if response.json["data"].get("lots"): + return + + # in case any contract become active and there are no pending contracts -> tender should have complete status + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[0]["id"], self.tender_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, "200 OK") + + response = self.app.get("/tenders/{}".format(self.tender_id)) + self.assertEqual(response.status, "200 OK") + self.assertNotEqual(response.json["data"]["status"], "complete") # because second contract still in pending + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[1]["id"], self.tender_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, "200 OK") + + response = self.app.get("/tenders/{}".format(self.tender_id)) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["status"], "complete") + + def create_tender_contract_in_complete_status(self): self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( @@ -590,6 +706,313 @@ def patch_tender_contract_value_vat_not_included(self): ) +def patch_contract_single_item_unit_value(self): + response = self.app.get("/tenders/{}/contracts".format(self.tender_id)) + contract = response.json["data"][0] + contract_id = contract["id"] + self.assertEqual(len(contract["items"]), 1) + expected_item_unit_currency = contract["items"][0]["unit"]["value"]["currency"] # "UAH" + expected_item_quantity = contract["items"][0]["quantity"] + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 2000, # all Item fields except amount will be ignored by edit_contract role + "currency": "GPB", + }, + }, + "quantity": 100500 + } + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["amount"], 2000.0) + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["currency"], expected_item_unit_currency) + self.assertEqual(response.json["data"]["items"][0]["quantity"], expected_item_quantity) + + # prepare contract + doc = self.db.get(self.tender_id) + for i in doc.get("awards", []): + if 'complaintPeriod' in i: + i["complaintPeriod"]["endDate"] = i["complaintPeriod"]["startDate"] + if doc['contracts'][0]['value']['valueAddedTaxIncluded']: + doc['contracts'][0]['value']['amountNet'] = str(float(doc['contracts'][0]['value']['amount']) - 1) + self.db.save(doc) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], [{ + "description": "Total amount of unit values can't be greater than contract.value.amount", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 15 + }, + } + } + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["amount"], 15.0) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=200 + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["status"], "active") + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 555555 + }, + } + } + ] + }}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], [{ + "description": "Can't update contract in current (complete) tender status", + "location": "body", + "name": "data" + }] + ) + + +def patch_contract_multi_items_unit_value(self): + + auth = self.app.authorization + self.app.authorization = ("Basic", ("token", "")) + + contract_items = [] + for i in range(3): + item = deepcopy(self.initial_data["items"][0]) + item['id'] = str(i+1)*10 + del item['unit']['value'] + contract_items.append(item) + + contract_items[0]['quantity'] = 10 + contract_items[0]['unit']['value'] = { + "amount": 200, + "currency": "UAH", + } + + contract_items[1]['quantity'] = 8 + + contract_items[2]['quantity'] = 0 + contract_items[2]['unit']['value'] = { + "amount": 100, + "currency": "UAH", + } + + response = self.app.post_json( + "/tenders/{}/contracts".format(self.tender_id), + { + "data": { + "title": "contract title", + "description": "contract description", + "awardID": self.award_id, + "value": { + "amount": 300, + "valueAddedTaxIncluded": True, + "currency": 'UAH', + "amountNet": 285, + }, + "suppliers": self.award_suppliers, + "items": contract_items, + } + }, + ) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + contract = response.json["data"] + contract_id = contract['id'] + self.assertEqual(len(contract["items"]), 3) + + if self.initial_status != 'active.awarded': + self.set_status("complete", {"status": "active.awarded"}) + + # prepare contract + doc = self.db.get(self.tender_id) + for i in doc.get("awards", []): + if 'complaintPeriod' in i: + i["complaintPeriod"]["endDate"] = i["complaintPeriod"]["startDate"] + if doc['contracts'][1]['value']['valueAddedTaxIncluded']: + doc['contracts'][1]['value']['amountNet'] = str(float(doc['contracts'][1]['value']['amount']) - 1) + self.db.save(doc) + + self.app.authorization = auth + + contracts_response = self.app.get("/tenders/{}/contracts".format(self.tender_id)) + self.assertEqual(contracts_response.status, "200 OK") + contracts = contracts_response.json["data"] + self.assertEqual(len(contracts), 2) + total_contracts_amount = sum( + [contract["value"]["amount"] for contract in contracts + if contract["awardID"] == self.award_id] + ) + + if total_contracts_amount > self.award_value["amount"]: + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual(response.json["status"], "error") + self.assertEqual( + response.json["errors"], [{ + "description": "Amount should be less or equal to awarded amount", + "location": "body", + "name": "value" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[0]["id"], self.tender_token), + {"data": {"value": {"amount": 100, "amountNet": 95}}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["value"]["amount"], 100) + self.assertEqual(response.json["data"]["value"]["amountNet"], 95) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual(response.json["status"], "error") + self.assertEqual( + response.json["errors"], [{ + "description": "Item.unit.value.amount should be updated to 0 if item.quantity equal to 0", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + {}, {}, + { + "unit": { + "value": { + "amount": 0 + }, + } + } + ] + }}, + ) + + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json['data']['items'][2]["unit"]["value"]["amount"], 0.0) + self.assertEqual(response.json["data"]["status"], "pending") + + unit_value_amount_sum = sum([ + item['unit']['value']['amount'] * item['quantity'] + for item in response.json['data']['items'] if item['unit'].get('value') + ]) + self.assertEqual(unit_value_amount_sum, 2000) # 10 * 200 for first item + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], [{ + "description": "Total amount of unit values can't be greater than contract.value.amount", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 7.56345 + }, + } + }, + {}, {} + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json['data']['items'][0]["unit"]["value"]["amount"], 7.56345) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + + self.assertEqual( + response.json["errors"], [{ + "description": "Can't activate contract while 'Unit.Value' is not set for each Item", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + {}, + { + "unit": { + "value": { + "amount": 10 + }, + } + }, + {} + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json['data']['items'][1]["unit"]["value"]["amount"], 10.0) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, "200 OK") + + def patch_tender_contract_status_by_owner(self): response = self.app.get("/tenders/{}/contracts".format(self.tender_id)) contract = response.json["data"][0] diff --git a/src/openprocurement/tender/belowthreshold/tests/tender.py b/src/openprocurement/tender/belowthreshold/tests/tender.py index 22210365a5..650c9fb393 100644 --- a/src/openprocurement/tender/belowthreshold/tests/tender.py +++ b/src/openprocurement/tender/belowthreshold/tests/tender.py @@ -52,7 +52,10 @@ create_tender_central_invalid, tender_minimalstep_validation, patch_tender_minimalstep_validation, + create_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, patch_item_with_zero_quantity, + patch_items_related_buyer_id, ) @@ -76,6 +79,7 @@ class TenderResourceTestMixin(object): test_tender_finance_milestones = snitch(tender_finance_milestones) test_tender_token_invalid = snitch(tender_token_invalid) test_patch_item_with_zero_quantity = snitch(patch_item_with_zero_quantity) + test_patch_items_related_buyer_id = snitch(patch_items_related_buyer_id) class TenderTestMixin: @@ -110,6 +114,8 @@ class TenderResourceTest(BaseTenderWebTest, TenderResourceTestMixin): test_patch_tender_lots_none = snitch(patch_tender_lots_none) test_tender_minimalstep_validation = snitch(tender_minimalstep_validation) test_patch_tender_minimalstep_validation = snitch(patch_tender_minimalstep_validation) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) class TenderProcessTest(BaseTenderWebTest): diff --git a/src/openprocurement/tender/belowthreshold/tests/tender_blanks.py b/src/openprocurement/tender/belowthreshold/tests/tender_blanks.py index 5439ffaf80..6c6e5b4304 100644 --- a/src/openprocurement/tender/belowthreshold/tests/tender_blanks.py +++ b/src/openprocurement/tender/belowthreshold/tests/tender_blanks.py @@ -1030,6 +1030,141 @@ def create_tender_with_inn_before(self): self.assertGreater(validation.CPV_336_INN_FROM, get_now()) +@mock.patch( + "openprocurement.tender.belowthreshold.models.UNIT_PRICE_REQUIRED_FROM", get_now() + timedelta(days=1)) +def create_tender_with_earlier_non_required_unit(self): + # can be removed later + + response = self.app.get("/tenders") + self.assertEqual(response.status, "200 OK") + self.assertEqual(len(response.json["data"]), 0) + tender_data = deepcopy(self.initial_data) + + _unit = tender_data["items"][0].pop("unit") + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + self.assertNotIn("unit", response.json["data"]['items'][0]) + + _quantity = tender_data["items"][0].pop("quantity") + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + self.assertNotIn("quantity", response.json["data"]['items'][0]) + self.assertNotIn("unit", response.json["data"]['items'][0]) + + +def create_tender_with_required_unit(self): + response = self.app.get("/tenders") + self.assertEqual(response.status, "200 OK") + self.assertEqual(len(response.json["data"]), 0) + tender_data = deepcopy(self.initial_data) + + _unit = tender_data["items"][0].pop("unit") + _quantity = tender_data["items"][0].pop("quantity") + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"], + [ + { + 'description': [ + { + 'unit': ['This field is required.'], + 'quantity': ['This field is required.'] + } + ], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['quantity'] = _quantity + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"], + [ + { + 'description': [{'unit': ['This field is required.']}], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['unit'] = _unit + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + self.assertIn("quantity", response.json["data"]['items'][0]) + self.assertIn("unit", response.json["data"]['items'][0]) + + _unit_code = tender_data["items"][0]["unit"].pop("code") + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"], + [ + { + 'description': [{'unit': {'code': ['This field is required.']}}], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['unit']['code'] = _unit_code + tender_data["items"][0]['unit']['value'] = { + "currency": "USD", # should be ignored during serializable + "valueAddedTaxIncluded": False + } + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json['errors'], + [ + { + 'description': [ + {'unit': {'value': {'amount': ['This field is required.']}}} + ], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['unit']['value']['amount'] = 100 + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + resp = response.json["data"] + self.assertIn("value", resp['items'][0]['unit']) + self.assertEqual('UAH', resp['value']['currency']) + self.assertEqual(True, resp['value']['valueAddedTaxIncluded']) + + self.assertEqual( + resp['items'][0]['unit']['value']['currency'], + resp['value']['currency'] + ) + self.assertEqual( + resp['items'][0]['unit']['value']['valueAddedTaxIncluded'], + resp['value']['valueAddedTaxIncluded'] + ) + + tender_data["items"][0]["unit"]["code"] = "unknown_code" + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json['errors'], + [ + { + 'description': [ + {u'unit': {u'code': [u'Code should be one of valid unit codes.']}} + ], + 'location': 'body', 'name': 'items' + } + ] + ) + + tender_data["items"][0]["unit"]["code"] = "KGM" + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + resp = response.json["data"] + self.assertEqual("KGM", resp["items"][0]["unit"]["code"]) + + def create_tender_generated(self): data = self.initial_data.copy() data.update({"id": "hash", "doc_id": "hash2", "tenderID": "hash3"}) @@ -2826,6 +2961,98 @@ def patch_item_with_zero_quantity(self): 'location': 'body', 'name': 'data'}]) +def patch_items_related_buyer_id(self): + # create tender with two buyers + data = deepcopy(self.initial_data) + test_organization1 = deepcopy(test_organization) + test_organization2 = deepcopy(test_organization) + test_organization2["name"] = "Управління міжнародних справ" + test_organization2["identifier"]["id"] = "00055555" + + data["buyers"] = [ + {"name": test_organization1["name"], "identifier": test_organization1["identifier"]}, + {"name": test_organization2["name"], "identifier": test_organization2["identifier"]}, + ] + + response = self.app.post_json("/tenders", {"data": data}) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + self.assertEqual(len(response.json["data"]["buyers"]), 2) + + tender_id = response.json["data"]["id"] + tender_token = response.json["access"]["token"] + + buyer1_id, buyer2_id = response.json["data"]["buyers"][0]["id"], response.json["data"]["buyers"][1]["id"] + + self.assertEqual(len(response.json["data"]["buyers"]), 2) + self.assertEqual(len(response.json["data"]["items"]), 1) + + patch_request_path = "/tenders/{}?acc_token={}".format(tender_id, tender_token) + + response = self.app.patch_json( + patch_request_path, + {"data": {"items": [{"description_en": "new cases for state awards"}]}}, + status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], + [{'description': 'Each item should contain relatedBuyer id', + 'location': 'body', + 'name': 'data'}], + ) + response = self.app.patch_json( + patch_request_path, + {"data": {"items": [ + { + "description_en": "new cases for state awards", + "relatedBuyer": buyer1_id + } + ]}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][0]["description_en"], "new cases for state awards") + self.assertEqual(response.json["data"]["items"][0]["relatedBuyer"], buyer1_id) + + # adding new unassigned items + second_item = deepcopy(self.initial_data["items"][0]) + second_item["description"] = "телевізори" + third_item = deepcopy(self.initial_data["items"][0]) + third_item["description"] = "ноутбуки" + + response = self.app.patch_json( + patch_request_path, + {"data": {"items": [{}, second_item, third_item]}}, + status=403 + ) + + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual(response.content_type, "application/json") + self.assertIn("errors", response.json) + self.assertEqual( + response.json["errors"], + [{'description': 'Each item should contain relatedBuyer id', + 'location': 'body', + 'name': 'data'}], + ) + + # assign items + second_item["relatedBuyer"] = buyer2_id + third_item["relatedBuyer"] = buyer2_id + + response = self.app.patch_json( + patch_request_path, + {"data": {"items": [{}, second_item, third_item]}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][1]["relatedBuyer"], buyer2_id) + self.assertEqual(response.json["data"]["items"][2]["relatedBuyer"], buyer2_id) + + self.assertEqual(response.json["data"]["items"][1]["description"], "телевізори") + self.assertEqual(response.json["data"]["items"][2]["description"], "ноутбуки") + self.assertEqual(len(response.json["data"]["items"]), 3) + + @mock.patch("openprocurement.tender.core.validation.RELEASE_GUARANTEE_CRITERION_FROM", get_now() - timedelta(days=1)) def tender_with_guarantee(self): data = deepcopy(self.initial_data) diff --git a/src/openprocurement/tender/belowthreshold/utils.py b/src/openprocurement/tender/belowthreshold/utils.py index d892aefcd1..bd6cc5be0a 100644 --- a/src/openprocurement/tender/belowthreshold/utils.py +++ b/src/openprocurement/tender/belowthreshold/utils.py @@ -4,6 +4,7 @@ TZ, NEW_DEFENSE_COMPLAINTS_FROM, NEW_DEFENSE_COMPLAINTS_TO, + MULTI_CONTRACTS_REQUIRED_FROM, ) from openprocurement.api.utils import get_now, context_unpack from openprocurement.tender.core.utils import ( @@ -82,26 +83,60 @@ def check_ignored_claim(tender): complaint.status = "ignored" -def add_contract(request, award, now=None): +def add_contracts(request, award, now=None): tender = request.validated["tender"] + contract_item_model = type(tender).contracts.model_class.items.model_class + + if tender.buyers and get_first_revision_date(tender) >= MULTI_CONTRACTS_REQUIRED_FROM: + + multi_contracts = True if len(tender.buyers) > 1 else False + contract_value = generate_contract_value(tender, award, multi_contracts=multi_contracts) + + for buyer in tender.buyers: + contract_items = [] + for item in tender.items: + if buyer.id == item.relatedBuyer: + if not hasattr(award, "lotID") or item.relatedLot == award.lotID: + contract_items.append(contract_item_model(dict(item))) + add_contract_to_tender( + tender, contract_items, contract_value, buyer.id, award, request.registry.server_id, now + ) + + else: + contract_value = generate_contract_value(tender, award, multi_contracts=False) + contract_items = [] + for item in tender.items: + if not hasattr(award, "lotID") or item.relatedLot == award.lotID: + contract_items.append(contract_item_model(dict(item))) + add_contract_to_tender( + tender, contract_items, contract_value, None, award, request.registry.server_id, now + ) + + +def add_contract_to_tender(tender, contract_items, contract_value, buyer_id, award, server_id, now): + contract_model = type(tender).contracts.model_class tender.contracts.append( - type(tender).contracts.model_class( + contract_model( { + "buyerID": buyer_id, "awardID": award.id, "suppliers": award.suppliers, - "value": generate_contract_value(tender, award), + "value": contract_value, "date": now or get_now(), - "items": [i for i in tender.items if not hasattr(award, "lotID") or i.relatedLot == award.lotID], - "contractID": "{}-{}{}".format(tender.tenderID, request.registry.server_id, len(tender.contracts) + 1), + "items": contract_items, + "contractID": "{}-{}{}".format(tender.tenderID, server_id, len(tender.contracts) + 1), } ) ) -def generate_contract_value(tender, award): +def generate_contract_value(tender, award, multi_contracts=False): if award.value: value = type(tender).contracts.model_class.value.model_class(dict(award.value.items())) - value.amountNet = award.value.amount + if multi_contracts: + value.amount, value.amountNet = 0, 0 + else: + value.amountNet = award.value.amount return value return None @@ -114,7 +149,7 @@ def check_status(request): check_complaint_status(request, complaint, now) for award in tender.awards: if award.status == "active" and not any([i.awardID == award.id for i in tender.contracts]): - add_contract(request, award, now) + add_contracts(request, award, now) add_next_award(request) for complaint in award.complaints: check_complaint_status(request, complaint, now) @@ -312,8 +347,13 @@ def check_tender_status(request): if tender.get("agreements") else tender.get("contracts", []) ) - if contracts and contracts[-1].status == "active": + if ( + contracts + and any([contract.status == "active" for contract in contracts]) + and not any([contract.status == "pending" for contract in contracts]) + ): tender.status = "complete" + if tender.procurementMethodType == "belowThreshold": check_ignored_claim(tender) diff --git a/src/openprocurement/tender/belowthreshold/views/award.py b/src/openprocurement/tender/belowthreshold/views/award.py index 7b28ef94b4..cce1f3bc61 100644 --- a/src/openprocurement/tender/belowthreshold/views/award.py +++ b/src/openprocurement/tender/belowthreshold/views/award.py @@ -17,7 +17,7 @@ from openprocurement.tender.belowthreshold.constants import STAND_STILL_TIME -from openprocurement.tender.belowthreshold.utils import add_next_award, add_contract +from openprocurement.tender.belowthreshold.utils import add_next_award, add_contracts from openprocurement.tender.belowthreshold.validation import ( validate_create_award_only_for_active_lot, @@ -325,7 +325,7 @@ def patch(self): if award_status == "pending" and award.status == "active": award.complaintPeriod.endDate = calculate_tender_business_date(now, STAND_STILL_TIME, tender, True) - add_contract(self.request, award, now) + add_contracts(self.request, award, now) add_next_award(self.request) elif award_status == "active" and award.status == "cancelled": if award.complaintPeriod.endDate > now: diff --git a/src/openprocurement/tender/belowthreshold/views/contract.py b/src/openprocurement/tender/belowthreshold/views/contract.py index 1dcccd3955..e7f49b3cc4 100644 --- a/src/openprocurement/tender/belowthreshold/views/contract.py +++ b/src/openprocurement/tender/belowthreshold/views/contract.py @@ -12,6 +12,7 @@ validate_update_contract_value_amount, validate_update_contract_value_net_required, validate_update_contract_status_by_supplier, + validate_activate_contract, ) from openprocurement.tender.belowthreshold.utils import check_tender_status @@ -75,6 +76,7 @@ def get(self): validate_update_contract_value_net_required, validate_update_contract_value_with_award, validate_update_contract_value_amount, + validate_activate_contract, ), ) def patch(self): diff --git a/src/openprocurement/tender/belowthreshold/views/tender.py b/src/openprocurement/tender/belowthreshold/views/tender.py index 13773ddd58..d1578c7ac2 100644 --- a/src/openprocurement/tender/belowthreshold/views/tender.py +++ b/src/openprocurement/tender/belowthreshold/views/tender.py @@ -11,6 +11,7 @@ validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ) @@ -122,6 +123,7 @@ def get(self): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/cfaselectionua/models/submodels/Contract.csv b/src/openprocurement/tender/cfaselectionua/models/submodels/Contract.csv index 3e46f14cb5..b036ea13fb 100644 --- a/src/openprocurement/tender/cfaselectionua/models/submodels/Contract.csv +++ b/src/openprocurement/tender/cfaselectionua/models/submodels/Contract.csv @@ -1,6 +1,6 @@ rolename,status,value,documents,description,title,items,suppliers,contractNumber,title_en,period,description_en,dateSigned,title_ru,date,awardID,description_ru,id,__parent__,contractID admins,1,1,,1,1,,,1,1,1,1,1,1,,,1,,1, -edit_tender_owner,1,1,,1,1,,,1,1,1,1,1,1,,,1,,1, +edit_tender_owner,1,1,,1,1,1,,1,1,1,1,1,1,,,1,,1, edit_contract_supplier,1,,,,,,,,,,,,,,,,,, default,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1 create,,1,,1,1,1,1,1,1,1,1,,1,,1,1,,1,1 diff --git a/src/openprocurement/tender/cfaselectionua/models/submodels/Item.csv b/src/openprocurement/tender/cfaselectionua/models/submodels/Item.csv index 672a3eaafd..b1ae370f3a 100644 --- a/src/openprocurement/tender/cfaselectionua/models/submodels/Item.csv +++ b/src/openprocurement/tender/cfaselectionua/models/submodels/Item.csv @@ -1,4 +1,4 @@ -rolename,relatedLot,description,classification,description_en,additionalClassifications,unit,deliveryAddress,deliveryDate,deliveryLocation,description_ru,id,__parent__,quantity -default,1,1,1,1,1,1,1,1,1,1,1,,1 -embedded,1,1,1,1,1,1,1,1,1,1,1,,1 -edit_active.enquiries,,1,,1,,,1,1,,1,1,1,1 +rolename,relatedLot,relatedBuyer,description,classification,description_en,additionalClassifications,unit,deliveryAddress,deliveryDate,deliveryLocation,description_ru,id,__parent__,quantity +default,1,1,1,1,1,1,1,1,1,1,1,1,,1 +embedded,1,1,1,1,1,1,1,1,1,1,1,1,,1 +edit_active.enquiries,,1,1,,1,,,1,1,,1,1,1,1 diff --git a/src/openprocurement/tender/cfaselectionua/models/submodels/contract.py b/src/openprocurement/tender/cfaselectionua/models/submodels/contract.py index a931fffe26..276356cdcb 100644 --- a/src/openprocurement/tender/cfaselectionua/models/submodels/contract.py +++ b/src/openprocurement/tender/cfaselectionua/models/submodels/contract.py @@ -7,6 +7,7 @@ from openprocurement.tender.core.utils import get_contract_supplier_roles, get_contract_supplier_permissions from openprocurement.api.utils import get_now from openprocurement.api.models import Model, ListType, Contract as BaseContract, Document +from openprocurement.tender.cfaselectionua.models.submodels.item import Item class Contract(BaseContract): @@ -16,6 +17,7 @@ class Options: value = ModelType(ContractValue) awardID = StringType(required=True) documents = ListType(ModelType(Document, required=True), default=list()) + items = ListType(ModelType(Item)) def __acl__(self): return get_contract_supplier_permissions(self) diff --git a/src/openprocurement/tender/cfaselectionua/models/submodels/item.py b/src/openprocurement/tender/cfaselectionua/models/submodels/item.py index d64c1959c3..d02799c7a5 100644 --- a/src/openprocurement/tender/cfaselectionua/models/submodels/item.py +++ b/src/openprocurement/tender/cfaselectionua/models/submodels/item.py @@ -1,7 +1,22 @@ from openprocurement.api.roles import RolesFromCsv from openprocurement.tender.core.models import Item as BaseItem +from openprocurement.api.utils import get_now, get_first_revision_date +from openprocurement.api.constants import UNIT_PRICE_REQUIRED_FROM +from schematics.exceptions import ValidationError class Item(BaseItem): class Options: roles = RolesFromCsv("Item.csv", relative_to=__file__) + + def validate_unit(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM and not value: + raise ValidationError(u"This field is required.") + + def validate_quantity(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM and value is None: + raise ValidationError(u"This field is required.") diff --git a/src/openprocurement/tender/cfaselectionua/tests/base.py b/src/openprocurement/tender/cfaselectionua/tests/base.py index 614055a208..e748480fb4 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/base.py +++ b/src/openprocurement/tender/cfaselectionua/tests/base.py @@ -8,7 +8,7 @@ from openprocurement.api.constants import SANDBOX_MODE, TZ from openprocurement.api.tests.base import BaseWebTest from openprocurement.api.utils import get_now -from openprocurement.tender.belowthreshold.tests.base import set_tender_criteria +from openprocurement.tender.belowthreshold.tests.base import set_tender_criteria, set_tender_multi_buyers from openprocurement.tender.cfaselectionua.constants import BOT_NAME from openprocurement.tender.cfaselectionua.models.tender import CFASelectionUATender from openprocurement.tender.core.tests.base import BaseCoreWebTest @@ -66,6 +66,11 @@ test_agreement_features = deepcopy(test_agreement) test_agreement_features["features"] = test_features +test_tender_data_multi_buyers = set_tender_multi_buyers( + test_tender_data, test_tender_data["items"][0], + test_organization +) + class BaseApiWebTest(BaseWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/cfaselectionua/tests/contract.py b/src/openprocurement/tender/cfaselectionua/tests/contract.py index 80e5f23d75..3803258348 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/contract.py +++ b/src/openprocurement/tender/cfaselectionua/tests/contract.py @@ -9,6 +9,7 @@ test_bids, test_lots, test_organization, + test_tender_data_multi_buyers, ) from openprocurement.tender.cfaselectionua.tests.contract_blanks import ( # TenderContractResourceTest @@ -29,6 +30,8 @@ lot2_create_tender_contract_document, lot2_put_tender_contract_document, lot2_patch_tender_contract_document, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, ) from openprocurement.tender.belowthreshold.tests.contract_blanks import ( patch_tender_contract_value_vat_not_included, @@ -45,6 +48,7 @@ lot2_create_tender_contract_document_by_others, lot2_put_tender_contract_document_by_supplier, lot2_patch_tender_contract_document_by_supplier, + patch_tender_multi_contracts, ) @@ -73,6 +77,8 @@ class TenderContractResourceTest(TenderContentWebTest, TenderContractResourceTes test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(TenderContentWebTest, TenderContractResourceTestMixin): @@ -201,6 +207,44 @@ def setUp(self): test_lot2_patch_tender_contract_document_by_supplier = snitch(lot2_patch_tender_contract_document_by_supplier) +class TenderContractMultiBuyersResourceTest(TenderContentWebTest): + initial_status = "active.qualification" + initial_bids = test_bids + initial_lots = test_lots + initial_data = test_tender_data_multi_buyers + + def create_award(self): + auth = self.app.authorization + self.app.authorization = ("Basic", ("token", "")) + response = self.app.post_json( + "/tenders/{}/awards".format(self.tender_id), + { + "data": { + "suppliers": [test_organization], + "status": "pending", + "bid_id": self.initial_bids[0]["id"], + "lotID": self.initial_lots[0]["id"], + "value": {"amount": 500, "currency": "UAH", "valueAddedTaxIncluded": True}, + } + }, + ) + award = response.json["data"] + self.award_id = award["id"] + self.award_value = award["value"] + self.award_suppliers = award["suppliers"] + self.app.authorization = auth + self.app.patch_json( + "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), + {"data": {"status": "active"}}, + ) + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + self.create_award() + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest)) diff --git a/src/openprocurement/tender/cfaselectionua/tests/contract_blanks.py b/src/openprocurement/tender/cfaselectionua/tests/contract_blanks.py index ac8cbee05d..29b5d9540d 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/contract_blanks.py +++ b/src/openprocurement/tender/cfaselectionua/tests/contract_blanks.py @@ -3,7 +3,7 @@ from openprocurement.api.utils import get_now from openprocurement.tender.belowthreshold.tests.base import test_claim, test_cancellation - +from copy import deepcopy from openprocurement.tender.cfaselectionua.tests.base import test_organization @@ -351,6 +351,309 @@ def patch_tender_contract(self): self.assertEqual(response.json["data"]["dateSigned"], custom_signature_date) +def patch_contract_single_item_unit_value(self): + response = self.app.get("/tenders/{}/contracts".format(self.tender_id)) + contract = response.json["data"][0] + contract_id = contract["id"] + self.assertEqual(len(contract["items"]), 1) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 100, + "currency": "GPB", + }, + }, + "quantity": 20 + } + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["amount"], 100.0) + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["currency"], "GPB") + self.assertEqual(response.json["data"]["items"][0]["quantity"], 20) + + # prepare contract + doc = self.db.get(self.tender_id) + for i in doc.get("awards", []): + if 'complaintPeriod' in i: + i["complaintPeriod"]["endDate"] = i["complaintPeriod"]["startDate"] + if doc['contracts'][0]['value']['valueAddedTaxIncluded']: + doc['contracts'][0]['value']['amountNet'] = str(float(doc['contracts'][0]['value']['amount']) - 1) + self.db.save(doc) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], [{ + "description": "Total amount of unit values can't be greater than contract.value.amount", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 10 + }, + } + } + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][0]["unit"]["value"]["amount"], 10.0) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=200 + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["status"], "active") + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 555555 + }, + } + } + ] + }}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], [{ + "description": "Can't update contract in current (complete) tender status", + "location": "body", + "name": "data" + }] + ) + + +def patch_contract_multi_items_unit_value(self): + + auth = self.app.authorization + self.app.authorization = ("Basic", ("token", "")) + + contract_items = [] + for i in range(3): + item = deepcopy(self.initial_data["items"][0]) + item['id'] = str(i + 1) * 10 + del item['unit']['value'] + contract_items.append(item) + + contract_items[0]['quantity'] = 10 + contract_items[0]['unit']['value'] = { + "amount": 200, + "currency": "UAH", + } + + contract_items[1]['quantity'] = 8 + + contract_items[2]['quantity'] = 0 + contract_items[2]['unit']['value'] = { + "amount": 100, + "currency": "UAH", + } + + response = self.app.post_json( + "/tenders/{}/contracts".format(self.tender_id), + { + "data": { + "title": "contract title", + "description": "contract description", + "awardID": self.award_id, + "value": { + "amount": 300, + "valueAddedTaxIncluded": True, + "currency": 'UAH', + "amountNet": 285, + }, + "items": contract_items, + } + }, + ) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + contract = response.json["data"] + contract_id = contract['id'] + self.assertEqual(len(contract["items"]), 3) + + # prepare contract + doc = self.db.get(self.tender_id) + for i in doc.get("awards", []): + if 'complaintPeriod' in i: + i["complaintPeriod"]["endDate"] = i["complaintPeriod"]["startDate"] + if doc['contracts'][1]['value']['valueAddedTaxIncluded']: + doc['contracts'][1]['value']['amountNet'] = str(float(doc['contracts'][1]['value']['amount']) - 1) + self.db.save(doc) + + self.app.authorization = auth + + response = self.app.get("/tenders/{}/awards/{}".format(self.tender_id, self.award_id)) + award = response.json["data"] + + contracts_response = self.app.get("/tenders/{}/contracts".format(self.tender_id)) + self.assertEqual(contracts_response.status, "200 OK") + contracts = contracts_response.json["data"] + self.assertEqual(len(contracts), 2) + total_contracts_amount = sum( + [contract["value"]["amount"] for contract in contracts + if contract["awardID"] == self.award_id] + ) + self.assertTrue(total_contracts_amount > award["value"]["amount"]) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual(response.json["status"], "error") + self.assertEqual( + response.json["errors"], [{ + "description": "Amount should be less or equal to awarded amount", + "location": "body", + "name": "value" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contracts[0]["id"], self.tender_token), + {"data": {"value": {"amount": 100, "amountNet": 95}}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["value"]["amount"], 100) + self.assertEqual(response.json["data"]["value"]["amountNet"], 95) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual(response.json["status"], "error") + self.assertEqual( + response.json["errors"], [{ + "description": "Item.unit.value.amount should be updated to 0 if item.quantity equal to 0", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + {}, {}, + { + "unit": { + "value": { + "amount": 0 + }, + } + } + ] + }}, + ) + + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json['data']['items'][2]["unit"]["value"]["amount"], 0.0) + self.assertEqual(response.json["data"]["status"], "pending") + + unit_value_amount_sum = sum([ + item['unit']['value']['amount'] * item['quantity'] + for item in response.json['data']['items'] if item['unit'].get('value') + ]) + self.assertEqual(unit_value_amount_sum, 2000) # 10 * 200 for first item + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], [{ + "description": "Total amount of unit values can't be greater than contract.value.amount", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + { + "unit": { + "value": { + "amount": 7.56345 + }, + } + }, + {}, {} + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json['data']['items'][0]["unit"]["value"]["amount"], 7.56345) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}}, status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + + self.assertEqual( + response.json["errors"], [{ + "description": "Can't activate contract while 'Unit.Value' is not set for each Item", + "location": "body", + "name": "data" + }] + ) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": { + "items": [ + {}, + { + "unit": { + "value": { + "amount": 10 + }, + } + }, + {} + ] + }}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json['data']['items'][1]["unit"]["value"]["amount"], 10.0) + + response = self.app.patch_json( + "/tenders/{}/contracts/{}?acc_token={}".format(self.tender_id, contract_id, self.tender_token), + {"data": {"status": "active"}} + ) + self.assertEqual(response.status, "200 OK") + + def get_tender_contract(self): self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( diff --git a/src/openprocurement/tender/cfaselectionua/tests/data/agreement.json b/src/openprocurement/tender/cfaselectionua/tests/data/agreement.json index 26161c664e..3d1a5ab52a 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/data/agreement.json +++ b/src/openprocurement/tender/cfaselectionua/tests/data/agreement.json @@ -170,7 +170,7 @@ }, "id": "1662b0e1d59f4e2f8e2c5bd48e03a7bc", "unit": { - "code": "44617100-9", + "code": "KGM", "name": "item" }, "quantity": 5 diff --git a/src/openprocurement/tender/cfaselectionua/tests/data/items.json b/src/openprocurement/tender/cfaselectionua/tests/data/items.json index f95c10de3f..10d0d4e537 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/data/items.json +++ b/src/openprocurement/tender/cfaselectionua/tests/data/items.json @@ -17,7 +17,8 @@ ], "unit": { "name": "item", - "code": "44617100-9" + "code": "KGM", + "value": {"amount": 6} }, "quantity": 5, "deliveryAddress": { diff --git a/src/openprocurement/tender/cfaselectionua/tests/tender.py b/src/openprocurement/tender/cfaselectionua/tests/tender.py index cdd7caa58f..a911921544 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/tender.py +++ b/src/openprocurement/tender/cfaselectionua/tests/tender.py @@ -60,6 +60,9 @@ # TenderTest create_tender_with_available_language, edit_tender_in_active_enquiries, + patch_items_related_buyer_id, + create_cfaselectionua_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, ) @@ -92,6 +95,7 @@ class TenderResourceTestMixin(object): test_tender_funders = snitch(tender_funders) test_patch_tender_bot = snitch(patch_tender_bot) test_create_tender_with_available_language = snitch(create_tender_with_available_language) + test_patch_items_related_buyer_id = snitch(patch_items_related_buyer_id) class CFASelectionTenderTest(TenderTestMixin, BaseApiWebTest): @@ -120,6 +124,10 @@ class TenderResourceTest(BaseTenderWebTest, TenderResourceTestMixin): test_edit_tender_in_active_enquiries = snitch(edit_tender_in_active_enquiries) test_patch_tender_lots_none = snitch(patch_tender_lots_none) test_tender_milestones_not_required = snitch(tender_milestones_not_required) + test_create_tender_with_earlier_non_required_unit = snitch( + create_cfaselectionua_tender_with_earlier_non_required_unit + ) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) class TenderProcessTest(BaseTenderWebTest): @@ -138,7 +146,7 @@ def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderProcessTest)) suite.addTest(unittest.makeSuite(TenderResourceTest)) - suite.addTest(unittest.makeSuite(TenderTest)) + suite.addTest(unittest.makeSuite(CFASelectionTenderTest)) return suite diff --git a/src/openprocurement/tender/cfaselectionua/tests/tender_blanks.py b/src/openprocurement/tender/cfaselectionua/tests/tender_blanks.py index c38e6a559a..b50d519c91 100644 --- a/src/openprocurement/tender/cfaselectionua/tests/tender_blanks.py +++ b/src/openprocurement/tender/cfaselectionua/tests/tender_blanks.py @@ -25,6 +25,7 @@ ) from openprocurement.tender.cfaselectionua.tests.base import test_organization, test_features from openprocurement.tender.core.utils import calculate_tender_business_date +from openprocurement.tender.belowthreshold.tests.tender_blanks import create_tender_with_earlier_non_required_unit # TenderResourceTest @@ -146,6 +147,113 @@ def listing(self): self.assertEqual(len(response.json["data"]), 4) +@mock.patch( + "openprocurement.tender.cfaselectionua.models.submodels.item.UNIT_PRICE_REQUIRED_FROM", get_now() + timedelta(days=1)) +def create_cfaselectionua_tender_with_earlier_non_required_unit(self): + create_tender_with_earlier_non_required_unit(self) + + +def create_tender_with_required_unit(self): + response = self.app.get("/tenders") + self.assertEqual(response.status, "200 OK") + self.assertEqual(len(response.json["data"]), 0) + tender_data = deepcopy(self.initial_data) + + _unit = tender_data["items"][0].pop("unit") + _quantity = tender_data["items"][0].pop("quantity") + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"], + [ + { + 'description': [ + { + 'unit': ['This field is required.'], + 'quantity': ['This field is required.'] + } + ], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['quantity'] = _quantity + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"], + [ + { + 'description': [{'unit': ['This field is required.']}], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['unit'] = _unit + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + self.assertIn("quantity", response.json["data"]['items'][0]) + self.assertIn("unit", response.json["data"]['items'][0]) + + _unit_code = tender_data["items"][0]["unit"].pop("code") + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"], + [ + { + 'description': [{'unit': {'code': ['This field is required.']}}], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['unit']['code'] = _unit_code + tender_data["items"][0]['unit']['value'] = { + "currency": "USD", + "valueAddedTaxIncluded": False + } + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json['errors'], + [ + { + 'description': [ + {'unit': {'value': {'amount': ['This field is required.']}}} + ], + 'location': 'body', 'name': 'items' + } + ] + ) + tender_data["items"][0]['unit']['value']['amount'] = 100 + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + resp = response.json["data"] + self.assertEqual('USD', resp["items"][0]['unit']['value']['currency']) + self.assertEqual(False, resp["items"][0]['unit']['value']['valueAddedTaxIncluded']) + + tender_data["items"][0]["unit"]["code"] = "unknown_code" + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json['errors'], + [ + { + 'description': [ + {u'unit': {u'code': [u'Code should be one of valid unit codes.']}} + ], + 'location': 'body', 'name': 'items' + } + ] + ) + + tender_data["items"][0]["unit"]["code"] = "KGM" + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + resp = response.json["data"] + self.assertEqual("KGM", resp["items"][0]["unit"]["code"]) + + def listing_changes(self): response = self.app.get("/tenders?feed=changes") self.assertEqual(response.status, "200 OK") @@ -1608,6 +1716,62 @@ def patch_tender(self): self.assertEqual(response.json["errors"][0]["description"], "Can't update tender in current (complete) status") +def patch_items_related_buyer_id(self): + # create tender with two buyers + data = deepcopy(self.initial_data) + test_organization1 = deepcopy(test_organization) + test_organization2 = deepcopy(test_organization) + test_organization2["name"] = "Управління міжнародних справ" + test_organization2["identifier"]["id"] = "00055555" + + data["buyers"] = [ + {"name": test_organization1["name"], "identifier": test_organization1["identifier"]}, + {"name": test_organization2["name"], "identifier": test_organization2["identifier"]}, + ] + + response = self.app.post_json("/tenders", {"data": data}) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + self.assertEqual(len(response.json["data"]["buyers"]), 2) + + self.tender_id = response.json["data"]["id"] + self.tender_token = response.json["access"]["token"] + + buyer1_id, buyer2_id = response.json["data"]["buyers"][0]["id"], response.json["data"]["buyers"][1]["id"] + + self.assertEqual(len(response.json["data"]["buyers"]), 2) + self.assertEqual(len(response.json["data"]["items"]), 1) + + self.set_status("active.enquiries") + + patch_request_path = "/tenders/{}?acc_token={}".format(self.tender_id, self.tender_token) + + response = self.app.patch_json( + patch_request_path, + {"data": {"items": [{"description_en": "new cases for state awards"}]}}, + status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], + [{'description': 'Each item should contain relatedBuyer id', + 'location': 'body', + 'name': 'data'}], + ) + response = self.app.patch_json( + patch_request_path, + {"data": {"items": [ + { + "description_en": "new cases for state awards", + "relatedBuyer": buyer1_id + } + ]}}, + ) + self.assertEqual(response.status, "200 OK") + self.assertEqual(response.json["data"]["items"][0]["description_en"], "new cases for state awards") + self.assertEqual(response.json["data"]["items"][0]["relatedBuyer"], buyer1_id) + + def patch_tender_bot(self): # only bot can change tender in draft.pending tender, owner_token = self.create_tender_and_prepare_for_bot_patch() @@ -2638,7 +2802,7 @@ def edit_tender_in_active_enquiries(self): "startDate": get_now().isoformat(), "endDate": (get_now() + timedelta(days=92)).isoformat(), }, - "unit": {"code": "LTM", "name": "Sheet"}, + "unit": {"code": "LTR", "name": "Sheet"}, } ], diff --git a/src/openprocurement/tender/cfaselectionua/utils.py b/src/openprocurement/tender/cfaselectionua/utils.py index ebc5f13cf2..af53763884 100644 --- a/src/openprocurement/tender/cfaselectionua/utils.py +++ b/src/openprocurement/tender/cfaselectionua/utils.py @@ -2,7 +2,8 @@ from logging import getLogger from openprocurement.api.constants import TZ from openprocurement.api.models import Value -from openprocurement.tender.belowthreshold.utils import add_contract, add_next_award +from openprocurement.tender.belowthreshold.utils import add_contracts, add_next_award +from openprocurement.api.constants import RELEASE_2020_04_19 from openprocurement.tender.cfaselectionua.constants import ( AGREEMENT_STATUS, AGREEMENT_ITEMS, @@ -62,7 +63,7 @@ def check_status(request): now = get_now() for award in tender.awards: if award.status == "active" and not any([i.awardID == award.id for i in tender.contracts]): - add_contract(request, award, now) + add_contracts(request, award, now) add_next_award(request) after_enquiryPeriod_endDate = ( @@ -154,7 +155,12 @@ def check_tender_status(request): extra=context_unpack(request, {"MESSAGE_ID": "switched_tender_unsuccessful"}), ) tender.status = "unsuccessful" - if tender.contracts and tender.contracts[-1].status == "active": + + if ( + tender.contracts + and any([contract.status == "active" for contract in tender.contracts]) + and not any([contract.status == "pending" for contract in tender.contracts]) + ): tender.status = "complete" diff --git a/src/openprocurement/tender/cfaselectionua/views/award.py b/src/openprocurement/tender/cfaselectionua/views/award.py index bf8448c979..bcf24a1718 100644 --- a/src/openprocurement/tender/cfaselectionua/views/award.py +++ b/src/openprocurement/tender/cfaselectionua/views/award.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from openprocurement.api.utils import get_now, json_view, APIResource, context_unpack, raise_operation_error -from openprocurement.tender.belowthreshold.utils import add_contract, add_next_award +from openprocurement.tender.belowthreshold.utils import add_contracts, add_next_award from openprocurement.tender.core.utils import ( save_tender, @@ -312,7 +312,7 @@ def patch(self): award_status = award.status apply_patch(self.request, save=False, src=self.request.context.serialize()) if award_status == "pending" and award.status == "active": - add_contract(self.request, award) + add_contracts(self.request, award) add_next_award(self.request) elif award_status == "active" and award.status == "cancelled": for i in tender.contracts: diff --git a/src/openprocurement/tender/cfaselectionua/views/contract.py b/src/openprocurement/tender/cfaselectionua/views/contract.py index a795aeda86..bad2a00461 100644 --- a/src/openprocurement/tender/cfaselectionua/views/contract.py +++ b/src/openprocurement/tender/cfaselectionua/views/contract.py @@ -11,6 +11,7 @@ validate_update_contract_value_amount, validate_update_contract_value_net_required, validate_update_contract_status_by_supplier, + validate_activate_contract, ) from openprocurement.tender.cfaselectionua.utils import check_tender_status @@ -73,6 +74,7 @@ def get(self): validate_update_contract_value_net_required, validate_update_contract_value_with_award, validate_update_contract_value_amount, + validate_activate_contract, ), ) def patch(self): diff --git a/src/openprocurement/tender/cfaselectionua/views/tender.py b/src/openprocurement/tender/cfaselectionua/views/tender.py index ed7e4730bc..85db03a1eb 100644 --- a/src/openprocurement/tender/cfaselectionua/views/tender.py +++ b/src/openprocurement/tender/cfaselectionua/views/tender.py @@ -11,6 +11,7 @@ ) from openprocurement.tender.core.validation import ( validate_tender_not_in_terminated_status, + validate_items_buyer_id, ) from openprocurement.tender.cfaselectionua.validation import ( validate_patch_tender_in_draft_pending, @@ -137,6 +138,7 @@ def get(self): validate_tender_not_in_terminated_status, validate_patch_tender_in_draft_pending, validate_patch_tender_bot_only_in_draft_pending, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/cfaua/models/submodels/Item.csv b/src/openprocurement/tender/cfaua/models/submodels/Item.csv index d234b7f164..2c9fd03643 100644 --- a/src/openprocurement/tender/cfaua/models/submodels/Item.csv +++ b/src/openprocurement/tender/cfaua/models/submodels/Item.csv @@ -1,3 +1,3 @@ -rolename,relatedLot,description,classification,description_en,unit,additionalClassifications,deliveryLocation,deliveryAddress,deliveryDate,description_ru,id,__parent__,quantity -default,1,1,1,1,1,1,1,1,1,1,1,,1 -embedded,1,1,1,1,1,1,1,1,1,1,1,,1 +rolename,relatedLot,relatedBuyer,description,classification,description_en,unit,additionalClassifications,deliveryLocation,deliveryAddress,deliveryDate,description_ru,id,__parent__,quantity +default,1,1,1,1,1,1,1,1,1,1,1,1,,1 +embedded,1,1,1,1,1,1,1,1,1,1,1,1,,1 diff --git a/src/openprocurement/tender/cfaua/tests/data/test_tender.json b/src/openprocurement/tender/cfaua/tests/data/test_tender.json index 17886fe944..eded9d5053 100644 --- a/src/openprocurement/tender/cfaua/tests/data/test_tender.json +++ b/src/openprocurement/tender/cfaua/tests/data/test_tender.json @@ -33,7 +33,7 @@ "items": [ { "unit": { - "code": "44617100-9", + "code": "KGM", "name": "item" }, "additionalClassifications": [ diff --git a/src/openprocurement/tender/cfaua/views/tender.py b/src/openprocurement/tender/cfaua/views/tender.py index c7bc35dde5..3c27d84f1b 100644 --- a/src/openprocurement/tender/cfaua/views/tender.py +++ b/src/openprocurement/tender/cfaua/views/tender.py @@ -16,6 +16,7 @@ validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ) from openprocurement.tender.belowthreshold.views.tender import TenderResource from openprocurement.tender.cfaua.utils import check_status, all_bids_are_reviewed, all_awards_are_reviewed @@ -50,6 +51,7 @@ class TenderEUResource(TenderResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/competitivedialogue/models.py b/src/openprocurement/tender/competitivedialogue/models.py index a2f000ff23..d7ae917545 100644 --- a/src/openprocurement/tender/competitivedialogue/models.py +++ b/src/openprocurement/tender/competitivedialogue/models.py @@ -466,6 +466,16 @@ class Options: classification = ModelType(CPVClassification, required=True) + def validate_unit(self, data, value): + """ + Ignore validating required field to avoid case when bot moves items from stage1 to stage2 in time range: + stage1.first_revision_date < UNIT_PRICE_REQUIRED_FROM < stage2.first_revision_date + """ + pass + + def validate_quantity(self, data, value): + pass + ItemStage2EU = Item @@ -476,6 +486,12 @@ class Options: classification = ModelType(CPVClassification, required=True) + def validate_unit(self, data, value): + pass + + def validate_quantity(self, data, value): + pass + ItemStage2UA = Item diff --git a/src/openprocurement/tender/competitivedialogue/tests/base.py b/src/openprocurement/tender/competitivedialogue/tests/base.py index 3a92ed18a1..e56ce7b59f 100644 --- a/src/openprocurement/tender/competitivedialogue/tests/base.py +++ b/src/openprocurement/tender/competitivedialogue/tests/base.py @@ -14,7 +14,11 @@ ) from openprocurement.tender.competitivedialogue.tests.periods import PERIODS, PERIODS_UA_STAGE_2 from openprocurement.tender.openua.tests.base import BaseTenderUAWebTest as BaseTenderWebTest -from openprocurement.tender.belowthreshold.tests.base import test_organization, set_bid_responses +from openprocurement.tender.belowthreshold.tests.base import ( + test_organization, + set_bid_responses, + set_tender_multi_buyers, +) from openprocurement.tender.openeu.tests.base import ( test_tender_data as base_test_tender_data_eu, test_features_tender_data, @@ -114,6 +118,17 @@ test_tender_data_ua["procurementMethodDetails"] = "quick, accelerator=1440" +test_tender_data_stage2_eu_multi_buyers = set_tender_multi_buyers( + test_tender_stage2_data_eu, test_tender_stage2_data_eu["items"][0], + test_organization +) + +test_tender_data_stage2_ua_multi_buyers = set_tender_multi_buyers( + test_tender_stage2_data_ua, test_tender_stage2_data_ua["items"][0], + test_organization +) + + class BaseCompetitiveDialogApiWebTest(BaseWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/competitivedialogue/tests/stage1/tender.py b/src/openprocurement/tender/competitivedialogue/tests/stage1/tender.py index d8d0b02fe0..75df90adb8 100644 --- a/src/openprocurement/tender/competitivedialogue/tests/stage1/tender.py +++ b/src/openprocurement/tender/competitivedialogue/tests/stage1/tender.py @@ -12,6 +12,8 @@ create_tender_central_invalid, tender_minimalstep_validation, patch_tender_minimalstep_validation, + create_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, ) from openprocurement.tender.openua.tests.tender_blanks import ( @@ -88,6 +90,8 @@ class CompetitiveDialogEUResourceTest(BaseCompetitiveDialogEUWebTest, TenderReso test_tender_milestones_required = snitch(tender_milestones_required) test_tender_minimalstep_validation = snitch(tender_minimalstep_validation) test_patch_tender_minimalstep_validation = snitch(patch_tender_minimalstep_validation) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) class CompetitiveDialogUAResourceTest(BaseCompetitiveDialogUAWebTest, TenderResourceTestMixin): @@ -109,6 +113,8 @@ class CompetitiveDialogUAResourceTest(BaseCompetitiveDialogUAWebTest, TenderReso test_patch_tender_lots_none = snitch(patch_tender_lots_none) test_tender_minimalstep_validation = snitch(tender_minimalstep_validation) test_patch_tender_minimalstep_validation = snitch(patch_tender_minimalstep_validation) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) def suite(): diff --git a/src/openprocurement/tender/competitivedialogue/tests/stage2/contract.py b/src/openprocurement/tender/competitivedialogue/tests/stage2/contract.py index 91ced82f82..74e35fbba5 100644 --- a/src/openprocurement/tender/competitivedialogue/tests/stage2/contract.py +++ b/src/openprocurement/tender/competitivedialogue/tests/stage2/contract.py @@ -11,6 +11,8 @@ test_tenderer, test_tender_stage2_data_eu, test_author, + test_tender_data_stage2_eu_multi_buyers, + test_tender_data_stage2_ua_multi_buyers, ) from openprocurement.tender.belowthreshold.tests.contract import ( TenderContractResourceTestMixin, @@ -29,6 +31,9 @@ put_tender_contract_document_by_supplier, put_tender_contract_document_by_others, patch_tender_contract_document_by_supplier, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, + patch_tender_multi_contracts, ) from openprocurement.tender.openua.tests.contract_blanks import ( # TenderStage2EU(UA)ContractResourceTest @@ -53,9 +58,7 @@ class TenderStage2EUContractResourceTest(BaseCompetitiveDialogEUStage2ContentWeb initial_auth = ("Basic", ("broker", "")) author_data = test_author - def setUp(self): - super(TenderStage2EUContractResourceTest, self).setUp() - # Create award + def create_award(self): self.supplier_info = deepcopy(test_tenderer) self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( @@ -65,7 +68,7 @@ def setUp(self): "suppliers": [self.supplier_info], "status": "pending", "bid_id": self.bids[0]["id"], - "value": {"amount": 500, "currency": "UAH", "valueAddedTaxIncluded": True}, + "value": self.initial_data["value"], "items": test_tender_stage2_data_eu["items"], } }, @@ -82,6 +85,10 @@ def setUp(self): {"data": {"status": "active", "qualified": True, "eligible": True}}, ) + def setUp(self): + super(TenderStage2EUContractResourceTest, self).setUp() + self.create_award() + test_contract_termination = snitch(contract_termination) test_create_tender_contract = snitch(create_tender_contract) test_patch_tender_contract_datesigned = snitch(patch_tender_contract_datesigned) @@ -133,9 +140,8 @@ class TenderStage2UAContractResourceTest(BaseCompetitiveDialogUAStage2ContentWeb initial_status = "active.qualification" initial_bids = test_tender_bids - def setUp(self): - super(TenderStage2UAContractResourceTest, self).setUp() - # Create award + def create_award(self): + auth = self.app.authorization self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( "/tenders/{}/awards".format(self.tender_id), @@ -144,14 +150,14 @@ def setUp(self): "suppliers": [test_tenderer], "status": "pending", "bid_id": self.bids[0]["id"], - "value": self.bids[0]["value"], + "value": self.initial_data["value"], "items": self.initial_data["items"], } }, ) award = response.json["data"] self.award_id = award["id"] - self.app.authotization = ("Basic", ("broker", "")) + self.app.authorization = auth self.award_value = award["value"] self.award_suppliers = award["suppliers"] self.award_items = award["items"] @@ -160,6 +166,10 @@ def setUp(self): {"data": {"status": "active", "qualified": True, "eligible": True}}, ) + def setUp(self): + super(TenderStage2UAContractResourceTest, self).setUp() + self.create_award() + test_create_tender_contract = snitch(create_tender_contract) test_patch_tender_contract_datesigned = snitch(patch_tender_contract_datesigned) test_patch_tender_contract = snitch(patch_tender_contract) @@ -167,6 +177,8 @@ def setUp(self): test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(BaseCompetitiveDialogUAStage2ContentWebTest): @@ -245,6 +257,43 @@ def setUp(self): test_patch_tender_contract_document_by_supplier = snitch(patch_tender_contract_document_by_supplier) +class TenderStage2EUContractUnitValueResourceTest(BaseCompetitiveDialogEUStage2ContentWebTest): + initial_status = "active.qualification" + initial_bids = test_tender_bids + + def setUp(self): + super(TenderStage2EUContractUnitValueResourceTest, self).setUp() + auth = self.app.authorization + TenderStage2EUContractResourceTest.create_award(self) + self.app.authorization = auth + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) + + +class TenderContractEUStage2MultiBuyersResourceTest(BaseCompetitiveDialogEUStage2ContentWebTest): + initial_status = "active.qualification" + initial_bids = test_tender_bids + initial_data = test_tender_data_stage2_eu_multi_buyers + + def setUp(self): + super(TenderContractEUStage2MultiBuyersResourceTest, self).setUp() + TenderStage2EUContractResourceTest.create_award(self) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + +class TenderContractUAStage2MultiBuyersResourceTest(BaseCompetitiveDialogUAStage2ContentWebTest): + initial_status = "active.qualification" + initial_bids = test_tender_bids + initial_data = test_tender_data_stage2_ua_multi_buyers + + def setUp(self): + super(TenderContractUAStage2MultiBuyersResourceTest, self).setUp() + TenderStage2UAContractResourceTest.create_award(self) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderStage2EUContractResourceTest)) @@ -252,6 +301,8 @@ def suite(): suite.addTest(unittest.makeSuite(TenderStage2UAContractResourceTest)) suite.addTest(unittest.makeSuite(TenderStage2UAContractDocumentResourceTest)) suite.addTest(unittest.makeSuite(TenderContractVATNotIncludedResourceTest)) + suite.addTest(unittest.makeSuite(TenderContractEUStage2MultiBuyersResourceTest)) + suite.addTest(unittest.makeSuite(TenderContractUAStage2MultiBuyersResourceTest)) return suite diff --git a/src/openprocurement/tender/competitivedialogue/tests/stage2/tender.py b/src/openprocurement/tender/competitivedialogue/tests/stage2/tender.py index 582acb380d..3b0ffdb9eb 100644 --- a/src/openprocurement/tender/competitivedialogue/tests/stage2/tender.py +++ b/src/openprocurement/tender/competitivedialogue/tests/stage2/tender.py @@ -42,6 +42,7 @@ first_bid_tender, tender_milestones_not_required, create_tender_central, + create_tender_with_non_required_unit, ) from openprocurement.tender.competitivedialogue.tests.base import ( BaseCompetitiveDialogApiWebTest, @@ -53,6 +54,9 @@ test_author, ) from openprocurement.tender.core.tests.criteria_utils import add_criteria +from openprocurement.tender.belowthreshold.tests.tender_blanks import ( + create_tender_with_earlier_non_required_unit, +) class CompetitiveDialogStage2Test(BaseCompetitiveDialogApiWebTest): @@ -107,6 +111,8 @@ def set_tender_status(self, tender, token, status): test_patch_not_author = snitch(patch_not_author) test_tender_funders = snitch(tender_funders) test_tender_milestones_not_required = snitch(tender_milestones_not_required) + test_create_tender_with_non_required_unit = snitch(create_tender_with_non_required_unit) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) class TenderStage2UAResourceTest(BaseCompetitiveDialogUAStage2WebTest): diff --git a/src/openprocurement/tender/competitivedialogue/tests/stage2/tender_blanks.py b/src/openprocurement/tender/competitivedialogue/tests/stage2/tender_blanks.py index 5864b013a0..3e9252f90d 100644 --- a/src/openprocurement/tender/competitivedialogue/tests/stage2/tender_blanks.py +++ b/src/openprocurement/tender/competitivedialogue/tests/stage2/tender_blanks.py @@ -1531,6 +1531,49 @@ def get_tender(self): self.assertIn('{\n "data": {\n "', response.body.decode()) +def create_tender_with_non_required_unit(self): + + response = self.app.get("/tenders") + self.assertEqual(response.status, "200 OK") + self.assertEqual(len(response.json["data"]), 0) + tender_data = deepcopy(self.initial_data) + + _unit = tender_data["items"][0].pop("unit") + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + self.assertNotIn("unit", response.json["data"]['items'][0]) + + _quantity = tender_data["items"][0].pop("quantity") + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + self.assertEqual(response.content_type, "application/json") + self.assertNotIn("quantity", response.json["data"]['items'][0]) + self.assertNotIn("unit", response.json["data"]['items'][0]) + + tender_data["items"][0]["unit"] = _unit + tender_data["items"][0]["unit"]["code"] = "unknown_code" + response = self.app.post_json("/tenders", {"data": tender_data}, status=422) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json['errors'], + [ + { + 'description': [ + {'unit': {'code': ['Code should be one of valid unit codes.']}} + ], + 'location': 'body', 'name': 'items' + } + ] + ) + + tender_data["items"][0]["unit"]["code"] = "KGM" + response = self.app.post_json("/tenders", {"data": tender_data}) + self.assertEqual(response.status, "201 Created") + resp = response.json["data"] + self.assertEqual("KGM", resp["items"][0]["unit"]["code"]) + + def tender_features(self): self.app.authorization = ("Basic", ("competitive_dialogue", "")) data = self.initial_data.copy() @@ -1708,7 +1751,30 @@ def patch_tender_1(self): "items": [ { "description": "Шолом Дарта Вейдера", - "unit": {"name": "item", "code": "99999999-9"}, + "unit": {"name": "item", "code": "99999999-9"} + } + ] + } + }, + status=422 + ) + self.assertEqual(response.status, "422 Unprocessable Entity") + self.assertEqual( + response.json["errors"][0], + { + "location": "body", + "name": "items", + "description": [{"unit": {"code": ["Code should be one of valid unit codes."]}}] + } + ) + response = self.app.patch_json( + "/tenders/{}?acc_token={}".format(tender["id"], owner_token), + { + "data": { + "items": [ + { + "description": u"Шолом Дарта Вейдера", + "unit": {"name": "item", "code": "KWT"}, "quantity": 3, "deliveryDate": {"startDate": deliveryDateStart, "endDate": deliveryDateEnd}, "deliveryAddress": { diff --git a/src/openprocurement/tender/competitivedialogue/views/stage1/tender.py b/src/openprocurement/tender/competitivedialogue/views/stage1/tender.py index a191cceb75..f71adf124b 100644 --- a/src/openprocurement/tender/competitivedialogue/views/stage1/tender.py +++ b/src/openprocurement/tender/competitivedialogue/views/stage1/tender.py @@ -8,6 +8,7 @@ validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ) from openprocurement.api.utils import json_view, context_unpack, APIResource from openprocurement.tender.belowthreshold.views.tender import TenderResource @@ -47,6 +48,7 @@ class CompetitiveDialogueEUResource(TenderEUResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) @@ -75,6 +77,7 @@ class CompetitiveDialogueUAResource(TenderResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/competitivedialogue/views/stage2/tender.py b/src/openprocurement/tender/competitivedialogue/views/stage2/tender.py index 90da5c1886..0ae3831264 100644 --- a/src/openprocurement/tender/competitivedialogue/views/stage2/tender.py +++ b/src/openprocurement/tender/competitivedialogue/views/stage2/tender.py @@ -16,6 +16,7 @@ validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ) from openprocurement.tender.openua.views.tender import TenderUAResource from openprocurement.tender.openeu.views.tender import TenderEUResource @@ -47,6 +48,7 @@ class TenderStage2UAResource(TenderUAResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) @@ -147,6 +149,7 @@ class TenderStage2UEResource(TenderEUResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/core/models.py b/src/openprocurement/tender/core/models.py index 793c69997c..b861c08d4d 100644 --- a/src/openprocurement/tender/core/models.py +++ b/src/openprocurement/tender/core/models.py @@ -105,6 +105,10 @@ DEFAULT_REQUIREMENT_STATUS = "active" +AWARD_CRITERIA_LOWEST_COST = "lowestCost" +AWARD_CRITERIA_LIFE_CYCLE_COST = "lifeCycleCost" +AWARD_CRITERIA_RATED_CRITERIA = "ratedCriteria" + view_bid_role = blacklist("owner_token", "owner", "transfer_token") + schematics_default_role Administrator_bid_role = whitelist("tenderers") @@ -537,7 +541,7 @@ class Options: roles = { "create": blacklist("id", "status", "date", "documents", "dateSigned"), "admins": blacklist("id", "documents", "date", "awardID", "suppliers", "items", "contractID"), - "edit_tender_owner": blacklist("id", "documents", "date", "awardID", "suppliers", "items", "contractID"), + "edit_contract": blacklist("id", "documents", "date", "awardID", "suppliers", "contractID"), "edit_contract_supplier": whitelist("status"), "embedded": schematics_embedded_role, "view": schematics_default_role, @@ -553,8 +557,10 @@ def __acl__(self): def get_role(self): root = self.get_root() request = root.request - if request.authenticated_role in ("tender_owner", "contract_supplier"): - role = "edit_{}".format(request.authenticated_role) + if request.authenticated_role == "contract_supplier": + role = "edit_contract_supplier" + elif request.authenticated_role == "tender_owner": + role = "edit_contract" else: role = request.authenticated_role return role diff --git a/src/openprocurement/tender/core/tests/validators.py b/src/openprocurement/tender/core/tests/validators.py index c6a7e5fe98..48a9ba58ae 100644 --- a/src/openprocurement/tender/core/tests/validators.py +++ b/src/openprocurement/tender/core/tests/validators.py @@ -143,9 +143,11 @@ def test_check_accreditation_false(self): def generate_contract_value_patch_request_mock(contract_value, award_value=None): request = mock.MagicMock(validated={}) if award_value: - award = mock.MagicMock(id="test_id", value=mock.Mock(**award_value)) - request.validated["tender"] = mock.MagicMock(awards=[award]) - request.context.awardID = "test_id" + award = mock.MagicMock(id="test_award_id", value=mock.Mock(**award_value)) + contract = mock.MagicMock(id="contract_id", awardID="test_award_id") + request.validated["tender"] = mock.MagicMock(awards=[award], contracts=[contract]) + request.validated["id"] = 'contract_id' + request.context.awardID = "test_award_id" request.validated["data"] = request.validated["json_data"] = {"value": contract_value} return request diff --git a/src/openprocurement/tender/core/utils.py b/src/openprocurement/tender/core/utils.py index 42b9b60836..f015314730 100644 --- a/src/openprocurement/tender/core/utils.py +++ b/src/openprocurement/tender/core/utils.py @@ -845,3 +845,15 @@ def validate_features_custom_weight(data, features, max_sum): "Sum of max value of all features should be " "less then or equal to {:.0f}%".format(max_sum * 100) ) + + +def get_contracts_values_related_to_patched_contract(contracts, patched_contract_id, updated_value, award_id): + _contracts_values = [] + + for contract in contracts: + if contract.status != "terminated" and contract.awardID == award_id: + if contract.id != patched_contract_id: + _contracts_values.append(contract.get("value", {})) + else: + _contracts_values.append(updated_value) + return _contracts_values diff --git a/src/openprocurement/tender/core/validation.py b/src/openprocurement/tender/core/validation.py index 20039114c0..0bfa9b8a32 100644 --- a/src/openprocurement/tender/core/validation.py +++ b/src/openprocurement/tender/core/validation.py @@ -28,6 +28,8 @@ RELEASE_SIMPLE_DEFENSE_FROM, RELEASE_GUARANTEE_CRITERION_FROM, GUARANTEE_ALLOWED_TENDER_TYPES, + UNIT_PRICE_REQUIRED_FROM, + MULTI_CONTRACTS_REQUIRED_FROM, ) from openprocurement.api.utils import ( get_now, @@ -54,6 +56,7 @@ QUICK_NO_AUCTION, QUICK_FAST_FORWARD, QUICK_FAST_AUCTION, + get_contracts_values_related_to_patched_contract, ) from openprocurement.planning.api.utils import extract_plan_adapter from schematics.exceptions import ValidationError @@ -787,6 +790,20 @@ def validate_item_quantity(request, **kwargs): _validate_related_criterion(request, item["id"], action="set to 0 quantity of", relatedItem="item") +def validate_items_buyer_id(request, **kwargs): + tender = request.context + tender_created = get_first_revision_date(tender, default=get_now()) + if ( + not tender.buyers + or tender_created < MULTI_CONTRACTS_REQUIRED_FROM + ): + return + items = request.validated["data"].get("items", []) + for item in items: + if not item.get("relatedBuyer"): + raise_operation_error(request, "Each item should contain relatedBuyer id") + + def validate_absence_of_pending_accepted_satisfied_complaints(request, cancellation=None, **kwargs): """ Disallow cancellation of tenders and lots that have any complaints in affected statuses @@ -1582,12 +1599,18 @@ def validate_update_contract_value_net_required(request, name="value", **kwargs) def validate_update_contract_value_with_award(request, **kwargs): data = request.validated["data"] - value = data.get("value") - if value and requested_fields_changes(request, ("value", "status")): + updated_value = data.get("value") + + if updated_value and requested_fields_changes(request, ("value", "status")): award = [award for award in request.validated["tender"].awards if award.id == request.context.awardID][0] - amount = value.get("amount") - amount_net = value.get("amountNet") - tax_included = value.get("valueAddedTaxIncluded") + + _contracts_values = get_contracts_values_related_to_patched_contract( + request.validated["tender"].contracts, request.validated["id"], updated_value, request.context.awardID + ) + + amount = sum([value.get("amount", 0) for value in _contracts_values]) + amount_net = sum([value.get("amountNet", 0) for value in _contracts_values]) + tax_included = updated_value.get("valueAddedTaxIncluded") if tax_included: if award.value.valueAddedTaxIncluded: @@ -1601,14 +1624,26 @@ def validate_update_contract_value_with_award(request, **kwargs): raise_operation_error(request, "Amount should be less or equal to awarded amount", name="value") -def validate_update_contract_value_amount(request, name="value", allow_equal=False, **kwargs): +def validate_update_contract_value_amount( + request, name="value", allow_equal=False, scope="tendering", **kwargs +): data = request.validated["data"] contract_value = data.get(name) - value = data.get("value") or data.get(name) + updated_value = data.get("value") or data.get(name) + if contract_value and requested_fields_changes(request, (name, "status")): - amount = to_decimal(contract_value.get("amount")) - amount_net = to_decimal(contract_value.get("amountNet")) - tax_included = value.get("valueAddedTaxIncluded") + + if scope == "contracting" or not request.validated.get("tender"): + _contracts_values = [contract_value] + else: + _contracts_values = get_contracts_values_related_to_patched_contract( + request.validated["tender"].contracts, request.validated["id"], + updated_value, request.context.awardID + ) + + amount = to_decimal(sum([value.get("amount", 0) for value in _contracts_values])) + amount_net = to_decimal(sum([value.get("amountNet", 0) for value in _contracts_values])) + tax_included = updated_value.get("valueAddedTaxIncluded") if not (amount == 0 and amount_net == 0): if tax_included: @@ -1667,6 +1702,49 @@ def validate_contract_signing(request, **kwargs): raise_operation_error(request, "Can't sign contract before reviewing all complaints") +def validate_activate_contract(request, **kwargs): + tender = request.validated["tender"] + updated_data = request.validated["data"] + contract = request.context + + if contract.status != "active" and "status" in updated_data and updated_data["status"] == "active": + if contract.items: + validate_contract_items_unit_value_amount(request, contract) + + tender_created = get_first_revision_date(tender, default=get_now()) + if tender_created < UNIT_PRICE_REQUIRED_FROM: + return + + if contract.items: + for item in contract.items: + if item.unit and item.unit.value is None: + raise_operation_error( + request, "Can't activate contract while 'Unit.Value' is not set for each Item" + ) + + +def validate_contract_items_unit_value_amount(request, contract, **kwargs): + items_unit_value_amount = [] + for item in contract.items: + if item.unit and item.quantity is not None: + if item.unit.value: + if item.quantity == 0 and item.unit.value.amount != 0: + raise_operation_error( + request, "Item.unit.value.amount should be updated to 0 if item.quantity equal to 0" + ) + items_unit_value_amount.append( + Decimal(str(item.quantity)) * Decimal(str(item.unit.value.amount)) + ) + + if items_unit_value_amount and contract.value: + calculated_value = float(sum(items_unit_value_amount)) + + if calculated_value > contract.value.amount: + raise_operation_error( + request, "Total amount of unit values can't be greater than contract.value.amount" + ) + + def is_positive_float(value): if value <= 0: raise ValidationError("Float value should be greater than 0.") diff --git a/src/openprocurement/tender/esco/models.py b/src/openprocurement/tender/esco/models.py index a2475f679f..5c9f979e96 100644 --- a/src/openprocurement/tender/esco/models.py +++ b/src/openprocurement/tender/esco/models.py @@ -24,6 +24,7 @@ IsoDateTimeType, DecimalType, Guarantee, + Unit, ) from openprocurement.tender.core.models import ( Tender as BaseTender, @@ -33,6 +34,7 @@ Feature as BaseFeature, BaseLot, FeatureValue as BaseFeatureValue, + AWARD_CRITERIA_RATED_CRITERIA, ) from openprocurement.tender.core.constants import AWARD_CRITERIA_RATED_CRITERIA from openprocurement.tender.core.models import ( @@ -370,22 +372,29 @@ class Item(BaseItem): class Options: roles = { - "edit": blacklist("quantity", "deliveryDate"), - "edit_draft": blacklist("quantity", "deliveryDate"), - "edit_active.tendering": blacklist("quantity", "deliveryDate"), - "create": blacklist("quantity", "deliveryDate"), + "edit": blacklist("quantity", "deliveryDate", "unit"), + "edit_draft": blacklist("quantity", "deliveryDate", "unit"), + "edit_active.tendering": blacklist("quantity", "deliveryDate", "unit"), + "create": blacklist("quantity", "deliveryDate", "unit"), } deliveryAddress = ModelType(Address, required=False) deliveryDate = ModelType(PeriodEndRequired, required=False) quantity = IntType(required=False) + unit = ModelType(Unit, required=False) + + def validate_unit(self, data, value): + pass + + def validate_quantity(self, data, value): + pass class Contract(BaseEUContract): """ESCO contract model""" class Options: - roles = {"edit": blacklist("id", "documents", "date", "awardID", "suppliers", "items", "contractID")} + roles = {"edit": blacklist("id", "documents", "date", "awardID", "suppliers", "contractID")} value = ModelType(ContractESCOValue) items = ListType(ModelType(Item, required=True)) diff --git a/src/openprocurement/tender/esco/tests/base.py b/src/openprocurement/tender/esco/tests/base.py index 260dafa9c7..16588fef48 100644 --- a/src/openprocurement/tender/esco/tests/base.py +++ b/src/openprocurement/tender/esco/tests/base.py @@ -22,6 +22,8 @@ del test_tender_data["value"] del test_tender_data["minimalStep"] +for item in test_tender_data["items"]: + del item["unit"] test_features_tender_data = deepcopy(base_eu_test_features_data) test_features_tender_data["procurementMethodType"] = "esco" diff --git a/src/openprocurement/tender/esco/tests/tender.py b/src/openprocurement/tender/esco/tests/tender.py index 468a620016..a07648c159 100644 --- a/src/openprocurement/tender/esco/tests/tender.py +++ b/src/openprocurement/tender/esco/tests/tender.py @@ -21,6 +21,7 @@ patch_tender_lots_none, create_tender_central, create_tender_central_invalid, + patch_items_related_buyer_id, ) from openprocurement.tender.openua.tests.tender import TenderUAResourceTestMixin @@ -61,6 +62,7 @@ create_tender_generated, patch_item_with_zero_quantity, ) +from openprocurement.tender.competitivedialogue.tests.stage2.tender_blanks import create_tender_with_non_required_unit class TenderESCOTest(BaseESCOWebTest): @@ -108,6 +110,7 @@ class TestTenderEU(BaseESCOContentWebTest, TenderResourceTestMixin, TenderUAReso test_tender_finance_milestones = snitch(tender_finance_milestones) test_patch_tender_lots_none = snitch(patch_tender_lots_none) test_patch_item_with_zero_quantity = snitch(patch_item_with_zero_quantity) + test_patch_items_related_buyer_id = snitch(patch_items_related_buyer_id) class TestTenderEUProcess(BaseESCOContentWebTest): diff --git a/src/openprocurement/tender/esco/tests/tender_blanks.py b/src/openprocurement/tender/esco/tests/tender_blanks.py index c977fe27f6..144c8ab368 100644 --- a/src/openprocurement/tender/esco/tests/tender_blanks.py +++ b/src/openprocurement/tender/esco/tests/tender_blanks.py @@ -327,7 +327,7 @@ def items_without_deliveryDate_quantity(self): "description": "папір і картон гофровані, паперова й картонна тара", } ], - "unit": {"name": "item", "code": "44617100-9"}, + "unit": {"name": "item", "code": "KGM"}, "quantity": 5, "deliveryDate": { "startDate": (get_now() + timedelta(days=2)).isoformat(), diff --git a/src/openprocurement/tender/limited/models.py b/src/openprocurement/tender/limited/models.py index 2a282b5089..2ff04920cd 100644 --- a/src/openprocurement/tender/limited/models.py +++ b/src/openprocurement/tender/limited/models.py @@ -16,8 +16,7 @@ from openprocurement.api.utils import get_now, get_root, get_first_revision_date from openprocurement.api.models import schematics_default_role, schematics_embedded_role from openprocurement.api.models import ListType, Period, Model -from openprocurement.api.models import Value as BaseValue -from openprocurement.api.models import Unit as BaseUnit +from openprocurement.api.models import Value from openprocurement.api.validation import validate_cpv_group, validate_items_uniq, validate_classification_id from openprocurement.tender.core.models import ( embedded_lot_role, @@ -38,7 +37,7 @@ ) from openprocurement.tender.openua.models import ( Complaint as BaseComplaint, - Item, + Item as BaseItem, Tender as OpenUATender, Cancellation as BaseCancellation ) @@ -56,50 +55,6 @@ class INegotiationQuickTender(INegotiationTender): """ Negotiation Quick Tender marker interface """ -class Value(BaseValue): - currency = StringType(max_length=3, min_length=3) - valueAddedTaxIncluded = BooleanType() - - @serializable(serialized_name="currency", serialize_when_none=False) - def unit_currency(self): - if self.currency is not None: - return self.currency - - context = self.__parent__ if isinstance(self.__parent__, Model) else {} - while isinstance(context.__parent__, Model): - context = context.__parent__ - if isinstance(context, BaseContract): - break - - value = context.get("value", {}) - return value.get("currency", None) - - @serializable(serialized_name="valueAddedTaxIncluded", serialize_when_none=False) - def unit_valueAddedTaxIncluded(self): - if self.valueAddedTaxIncluded is not None: - return self.valueAddedTaxIncluded - - context = self.__parent__ if isinstance(self.__parent__, Model) else {} - while isinstance(context.__parent__, Model): - context = context.__parent__ - if isinstance(context, BaseContract): - break - - value = context.get("value", {}) - return value.get("valueAddedTaxIncluded", None) - - -class Unit(BaseUnit): - value = ModelType(Value) - - -class BaseItem(Item): - unit = ModelType(Unit) - - class Options: - roles = {"edit_contract": whitelist("unit")} - - class Item(BaseItem): def validate_relatedLot(self, data, relatedLot): if relatedLot and isinstance(data["__parent__"], Model): @@ -113,28 +68,10 @@ class Complaint(BaseComplaint): class Contract(BaseContract): items = ListType(ModelType(Item, required=True)) - class Options: - roles = { - "edit": whitelist(), - "edit_contract": blacklist("id", "documents", "date", "awardID", "suppliers", "contractID"), - } - def validate_dateSigned(self, data, value): if value and value > get_now(): raise ValidationError("Contract signature date can't be in the future") - def get_role(self): - root = self.get_root() - request = root.request - role = "edit" - if request.authenticated_role == "tender_owner": - role = "edit_contract" - return role - - -Unit = BaseUnit -Value = BaseValue - award_edit_role = blacklist("id", "items", "date", "documents", "complaints", "complaintPeriod") award_create_role = blacklist("id", "status", "items", "date", "documents", "complaints", "complaintPeriod") @@ -385,20 +322,6 @@ def lot_value(self): class Contract(BaseContract): items = ListType(ModelType(Item, required=True)) - class Options: - roles = { - "edit": whitelist(), - "edit_contract": blacklist("id", "documents", "date", "awardID", "suppliers", "contractID"), - } - - def get_role(self): - root = self.get_root() - request = root.request - role = "edit" - if request.authenticated_role == "tender_owner": - role = "edit_contract" - return role - @implementer(INegotiationTender) class NegotiationTender(ReportingTender): diff --git a/src/openprocurement/tender/limited/tests/base.py b/src/openprocurement/tender/limited/tests/base.py index 99530aa8a0..6116f46e22 100644 --- a/src/openprocurement/tender/limited/tests/base.py +++ b/src/openprocurement/tender/limited/tests/base.py @@ -5,7 +5,11 @@ from openprocurement.api.constants import SANDBOX_MODE from openprocurement.api.utils import get_now from openprocurement.tender.limited.models import ReportingTender -from openprocurement.tender.belowthreshold.tests.base import test_tender_data as base_data +from openprocurement.tender.belowthreshold.tests.base import ( + test_tender_data as base_data, + set_tender_multi_buyers, + test_organization, +) from openprocurement.tender.belowthreshold.tests.base import BaseTenderWebTest as BaseBaseTenderWebTest now = datetime.now() @@ -49,6 +53,21 @@ {"title": "lot title", "description": "lot description", "value": deepcopy(test_tender_negotiation_data["value"])} ] +test_tender_data_multi_buyers = set_tender_multi_buyers( + test_tender_data, test_tender_data["items"][0], + test_organization +) + +test_tender_negotiation_data_multi_buyers = set_tender_multi_buyers( + test_tender_negotiation_data, test_tender_negotiation_data["items"][0], + test_organization +) + +test_tender_negotiation_quick_data_multi_buyers = set_tender_multi_buyers( + test_tender_negotiation_quick_data, test_tender_negotiation_quick_data["items"][0], + test_organization +) + class BaseTenderWebTest(BaseBaseTenderWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/limited/tests/contract.py b/src/openprocurement/tender/limited/tests/contract.py index 1a54565143..d7672439e4 100644 --- a/src/openprocurement/tender/limited/tests/contract.py +++ b/src/openprocurement/tender/limited/tests/contract.py @@ -4,7 +4,7 @@ from openprocurement.api.constants import SANDBOX_MODE from openprocurement.api.tests.base import snitch -from openprocurement.tender.belowthreshold.tests.base import test_organization +from openprocurement.tender.belowthreshold.tests.base import test_organization, test_bids from openprocurement.tender.belowthreshold.tests.contract import ( TenderContractResourceTestMixin, TenderContractDocumentResourceTestMixin, @@ -16,6 +16,9 @@ test_tender_data, test_tender_negotiation_data, test_tender_negotiation_quick_data, + test_tender_data_multi_buyers, + test_tender_negotiation_data_multi_buyers, + test_tender_negotiation_quick_data_multi_buyers, ) from openprocurement.tender.limited.tests.contract_blanks import ( # TenderNegotiationQuickAccelerationTest @@ -43,6 +46,8 @@ from openprocurement.tender.belowthreshold.tests.contract_blanks import ( patch_tender_contract_value_vat_not_included, patch_tender_contract_value, + patch_contract_single_item_unit_value, + patch_tender_multi_contracts, ) @@ -65,8 +70,10 @@ def create_award(self): }, ) - award = response.json["data"] - self.award_id = award["id"] + self.award = response.json["data"] + self.award_id = self.award["id"] + self.award_value = self.award["value"] + self.award_suppliers = self.award["suppliers"] response = self.app.patch_json( "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "active"}}, @@ -81,6 +88,7 @@ def setUp(self): test_patch_tender_contract_value = snitch(patch_tender_contract_value) test_tender_contract_signature_date = snitch(tender_contract_signature_date) test_award_id_change_is_not_allowed = snitch(award_id_change_is_not_allowed) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) class TenderContractVATNotIncludedResourceTest(BaseTenderContentWebTest, TenderContractResourceTestMixin): @@ -453,6 +461,27 @@ class TenderContractNegotiationQuickLotDocumentResourceTest(TenderContractNegoti initial_data = test_tender_negotiation_quick_data +class TenderContractMultiBuyersResourceTest(BaseTenderContentWebTest): + initial_data = test_tender_data_multi_buyers + stand_still_period_days = 10 + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + TenderContractResourceTest.create_award(self) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + +class TenderNegotiationMultiBuyersContractResourceTest(TenderContractMultiBuyersResourceTest): + initial_data = test_tender_negotiation_data_multi_buyers + stand_still_period_days = 10 + + +class TenderNegotiationQuickMultiBuyersContractResourceTest(TenderNegotiationMultiBuyersContractResourceTest): + initial_data = test_tender_negotiation_quick_data_multi_buyers + stand_still_period_days = 10 + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest)) diff --git a/src/openprocurement/tender/limited/tests/tender.py b/src/openprocurement/tender/limited/tests/tender.py index 0c12c0e4b3..d92bb158c8 100644 --- a/src/openprocurement/tender/limited/tests/tender.py +++ b/src/openprocurement/tender/limited/tests/tender.py @@ -18,6 +18,9 @@ create_tender_central, create_tender_central_invalid, patch_tender_draft, + create_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, + patch_items_related_buyer_id, ) from openprocurement.tender.limited.models import NegotiationTender, NegotiationQuickTender, ReportingTender from openprocurement.tender.limited.tests.base import ( @@ -107,6 +110,9 @@ class TenderResourceTest(BaseTenderWebTest): test_tender_finance_milestones = snitch(tender_finance_milestones) test_create_tender_with_inn = snitch(create_tender_with_inn) test_create_tender_with_inn_before = snitch(create_tender_with_inn_before) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) + test_patch_items_related_buyer_id = snitch(patch_items_related_buyer_id) class TenderNegotiationResourceTest(TenderResourceTest): diff --git a/src/openprocurement/tender/limited/views/award.py b/src/openprocurement/tender/limited/views/award.py index fa1ef65556..d51cdc5468 100644 --- a/src/openprocurement/tender/limited/views/award.py +++ b/src/openprocurement/tender/limited/views/award.py @@ -8,7 +8,7 @@ error_handler, raise_operation_error, ) -from openprocurement.tender.belowthreshold.utils import add_contract +from openprocurement.tender.belowthreshold.utils import add_contracts from openprocurement.tender.core.utils import ( apply_patch, @@ -313,7 +313,7 @@ def patch(self): apply_patch(self.request, save=False, src=self.request.context.serialize()) if award_status == "pending" and award.status == "active": - add_contract(self.request, award) + add_contracts(self.request, award) # add_next_award(self.request) elif award_status == "active" and award.status == "cancelled": for i in tender.contracts: @@ -541,7 +541,7 @@ def patch(self): award.complaintPeriod = {"startDate": now.isoformat(), "endDate": calculate_complaint_business_date(now, self.stand_still_delta, tender) } - add_contract(self.request, award, now) + add_contracts(self.request, award, now) elif ( award_status == "active" and award.status == "cancelled" diff --git a/src/openprocurement/tender/limited/views/contract.py b/src/openprocurement/tender/limited/views/contract.py index a451060753..f57aee8b5d 100644 --- a/src/openprocurement/tender/limited/views/contract.py +++ b/src/openprocurement/tender/limited/views/contract.py @@ -8,6 +8,7 @@ validate_update_contract_value_with_award, validate_update_contract_value_amount, validate_update_contract_value_net_required, + validate_activate_contract, ) from openprocurement.tender.belowthreshold.views.contract import ( TenderAwardContractResource as BaseTenderAwardContractResource, @@ -22,7 +23,11 @@ def check_tender_status(request): tender = request.validated["tender"] - if tender.contracts and tender.contracts[-1].status == "active": + if ( + tender.contracts + and any([contract.status == "active" for contract in tender.contracts]) + and not any([contract.status == "pending" for contract in tender.contracts]) + ): tender.status = "complete" @@ -62,7 +67,11 @@ def check_tender_negotiation_status(request): elif not statuses.difference(set(["complete", "unsuccessful", "cancelled"])): tender.status = "complete" else: - if tender.contracts and tender.contracts[-1].status == "active": + if ( + tender.contracts + and any([contract.status == "active" for contract in tender.contracts]) + and not any([contract.status == "pending" for contract in tender.contracts]) + ): tender.status = "complete" @@ -112,6 +121,7 @@ def collection_post(self): validate_update_contract_value_with_award, validate_update_contract_value_amount, validate_contract_items_count_modification, + validate_activate_contract, ), ) def patch(self): @@ -161,6 +171,7 @@ class TenderNegotiationAwardContractResource(TenderAwardContractResource): validate_update_contract_value_with_award, validate_update_contract_value_amount, validate_contract_items_count_modification, + validate_activate_contract, ), ) def patch(self): diff --git a/src/openprocurement/tender/limited/views/tender.py b/src/openprocurement/tender/limited/views/tender.py index 84af0cee2e..6962064e8a 100644 --- a/src/openprocurement/tender/limited/views/tender.py +++ b/src/openprocurement/tender/limited/views/tender.py @@ -3,6 +3,7 @@ validate_patch_tender_data, validate_tender_not_in_terminated_status, validate_tender_change_status_with_cancellation_lot_pending, + validate_items_buyer_id, ) from openprocurement.api.utils import json_view, context_unpack from openprocurement.tender.core.utils import apply_patch, optendersresource, save_tender @@ -32,6 +33,7 @@ class TenderResource(BaseTenderResource): validate_tender_not_in_terminated_status, validate_chronograph, validate_update_tender_with_awards, + validate_items_buyer_id, ), permission="edit_tender", ) @@ -108,7 +110,8 @@ class TenderNegotioationResource(TenderResource): validate_chronograph_before_2020_04_19, validate_tender_not_in_terminated_status, validate_update_tender_with_awards, - validate_tender_change_status_with_cancellation_lot_pending + validate_tender_change_status_with_cancellation_lot_pending, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/openeu/tests/base.py b/src/openprocurement/tender/openeu/tests/base.py index 0bfd72f437..b2f0ce0e54 100644 --- a/src/openprocurement/tender/openeu/tests/base.py +++ b/src/openprocurement/tender/openeu/tests/base.py @@ -4,7 +4,11 @@ from datetime import datetime, timedelta from openprocurement.api.constants import SANDBOX_MODE, RELEASE_ECRITERIA_ARTICLE_17 -from openprocurement.tender.belowthreshold.tests.base import test_milestones as base_test_milestones +from openprocurement.tender.belowthreshold.tests.base import ( + test_milestones as base_test_milestones, + test_organization, + set_tender_multi_buyers, +) from openprocurement.tender.openeu.models import Tender from openprocurement.tender.openeu.tests.periods import PERIODS from openprocurement.tender.openua.tests.base import BaseTenderUAWebTest @@ -124,7 +128,11 @@ "description": "папір і картон гофровані, паперова й картонна тара", } ], - "unit": {"name": "item", "code": "44617100-9"}, + "unit": { + "name": "item", + "code": "KGM", + "value": {"amount": 6} + }, "quantity": 5, "deliveryDate": { "startDate": (now + timedelta(days=2)).isoformat(), @@ -183,6 +191,11 @@ } ] +test_tender_data_multi_buyers = set_tender_multi_buyers( + test_tender_data, test_tender_data["items"][0], + test_organization +) + class BaseTenderWebTest(BaseTenderUAWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/openeu/tests/contract.py b/src/openprocurement/tender/openeu/tests/contract.py index 40650d08d9..d6f51d6b9a 100644 --- a/src/openprocurement/tender/openeu/tests/contract.py +++ b/src/openprocurement/tender/openeu/tests/contract.py @@ -19,6 +19,9 @@ put_tender_contract_document_by_supplier, put_tender_contract_document_by_others, patch_tender_contract_document_by_supplier, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, + patch_tender_multi_contracts, ) from openprocurement.tender.openua.tests.contract_blanks import ( @@ -27,7 +30,12 @@ patch_tender_contract_datesigned, ) -from openprocurement.tender.openeu.tests.base import BaseTenderContentWebTest, test_tender_data, test_bids +from openprocurement.tender.openeu.tests.base import ( + BaseTenderContentWebTest, + test_tender_data, + test_bids, + test_tender_data_multi_buyers, +) from openprocurement.tender.openeu.tests.contract_blanks import ( # TenderContractResourceTest contract_termination, @@ -42,9 +50,7 @@ class TenderContractResourceTest(BaseTenderContentWebTest, TenderContractResourc initial_auth = ("Basic", ("broker", "")) author_data = test_author - def setUp(self): - super(TenderContractResourceTest, self).setUp() - # Create award + def create_award(self): self.supplier_info = deepcopy(test_organization) self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( @@ -61,12 +67,18 @@ def setUp(self): ) award = response.json["data"] self.award_id = award["id"] + self.award_value = award["value"] + self.award_suppliers = award["suppliers"] self.app.authorization = ("Basic", ("broker", "")) self.app.patch_json( "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "active", "qualified": True, "eligible": True}}, ) + def setUp(self): + super(TenderContractResourceTest, self).setUp() + self.create_award() + test_contract_termination = snitch(contract_termination) test_create_tender_contract = snitch(create_tender_contract) test_patch_tender_contract_datesigned = snitch(patch_tender_contract_datesigned) @@ -75,6 +87,8 @@ def setUp(self): test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractDocumentResourceTest(BaseTenderContentWebTest, TenderContractDocumentResourceTestMixin): @@ -114,10 +128,25 @@ def setUp(self): test_patch_tender_contract_document_by_supplier = snitch(patch_tender_contract_document_by_supplier) +class TenderContractMultiBuyersResourceTest(BaseTenderContentWebTest): + initial_status = "active.qualification" + initial_bids = test_bids + initial_auth = ("Basic", ("broker", "")) + author_data = test_author + initial_data = test_tender_data_multi_buyers + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + TenderContractResourceTest.create_award(self) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest)) suite.addTest(unittest.makeSuite(TenderContractDocumentResourceTest)) + suite.addTest(unittest.makeSuite(TenderContractMultiBuyersResourceTest)) return suite diff --git a/src/openprocurement/tender/openeu/tests/tender.py b/src/openprocurement/tender/openeu/tests/tender.py index 72a8160c9e..b3b17cd144 100644 --- a/src/openprocurement/tender/openeu/tests/tender.py +++ b/src/openprocurement/tender/openeu/tests/tender.py @@ -18,6 +18,8 @@ tender_with_guarantee, tender_with_guarantee_multilot, activate_bid_guarantee_multilot, + create_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, ) from openprocurement.tender.openuadefense.tests.base import test_bids @@ -74,6 +76,8 @@ class TenderResourceTest(BaseTenderWebTest, TenderResourceTestMixin, TenderUARes test_tender_minimalstep_validation = snitch(tender_minimalstep_validation) test_patch_tender_minimalstep_validation = snitch(patch_tender_minimalstep_validation) test_create_tender_with_criteria_lcc = snitch(create_tender_with_criteria_lcc) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) def test_patch_not_author(self): response = self.app.post_json("/tenders", {"data": test_tender_data}) diff --git a/src/openprocurement/tender/openeu/utils.py b/src/openprocurement/tender/openeu/utils.py index 7e54fd1914..bd731ab3f2 100644 --- a/src/openprocurement/tender/openeu/utils.py +++ b/src/openprocurement/tender/openeu/utils.py @@ -3,8 +3,8 @@ from functools import partial from cornice.resource import resource from openprocurement.api.utils import error_handler, context_unpack, get_now, TZ -from openprocurement.tender.belowthreshold.utils import check_tender_status, add_contract, add_next_award -from openprocurement.tender.openua.utils import check_complaint_status +from openprocurement.tender.belowthreshold.utils import check_tender_status, add_contracts, add_next_award +from openprocurement.tender.openua.utils import add_next_award, check_complaint_status from openprocurement.tender.core.utils import ( remove_draft_bids, has_unanswered_questions, @@ -204,7 +204,7 @@ def check_status(request): for award in tender.awards: if award.status == "active" and not any([i.awardID == award.id for i in tender.contracts]): - add_contract(request, award, now) + add_contracts(request, award, now) add_next_award(request) if cancellation_block_tender(tender): diff --git a/src/openprocurement/tender/openeu/views/tender.py b/src/openprocurement/tender/openeu/views/tender.py index e78074042e..82d01b7454 100644 --- a/src/openprocurement/tender/openeu/views/tender.py +++ b/src/openprocurement/tender/openeu/views/tender.py @@ -16,6 +16,7 @@ validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ) from openprocurement.tender.belowthreshold.views.tender import TenderResource from openprocurement.tender.openeu.utils import check_status, all_bids_are_reviewed @@ -45,6 +46,7 @@ class TenderEUResource(TenderResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/openua/models.py b/src/openprocurement/tender/openua/models.py index 2392dab127..e0d644bf39 100644 --- a/src/openprocurement/tender/openua/models.py +++ b/src/openprocurement/tender/openua/models.py @@ -41,7 +41,6 @@ Bid as BaseBid, Complaint as BaseComplaint, LotValue as BaseLotValue, - Item as BaseItem, Contract as BaseContract, Cancellation as BaseCancellation, validate_parameters_uniq, @@ -78,6 +77,10 @@ AWARD_CRITERIA_LIFE_CYCLE_COST, ) from openprocurement.tender.belowthreshold.models import Tender as BaseTender +from openprocurement.tender.belowthreshold.models import ( + Tender as BaseTender, + Item as BaseItem, +) from openprocurement.tender.openua.constants import ( ENQUIRY_STAND_STILL_TIME, COMPLAINT_SUBMIT_TIME, diff --git a/src/openprocurement/tender/openua/tests/base.py b/src/openprocurement/tender/openua/tests/base.py index 2831304141..1043134587 100644 --- a/src/openprocurement/tender/openua/tests/base.py +++ b/src/openprocurement/tender/openua/tests/base.py @@ -13,6 +13,8 @@ test_features_tender_data, BaseTenderWebTest, test_bids as base_test_bids, + set_tender_multi_buyers, + test_organization, ) from openprocurement.tender.openua.models import Tender from openprocurement.tender.openua.tests.periods import PERIODS @@ -30,7 +32,11 @@ "additionalClassifications": [ {"scheme": "ДКПП", "id": "17.21.1", "description": "папір і картон гофровані, паперова й картонна тара"} ], - "unit": {"name": "item", "code": "44617100-9"}, + "unit": { + "name": "item", + "code": "KGM", + "value": {"amount": 6} + }, "quantity": 5, "deliveryDate": { "startDate": (now + timedelta(days=2)).isoformat(), @@ -69,6 +75,12 @@ lcc_criteria = json.load(json_file) +test_tender_data_multi_buyers = set_tender_multi_buyers( + test_tender_data, test_tender_data["items"][0], + test_organization +) + + class BaseApiWebTest(BaseWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/openua/tests/contract.py b/src/openprocurement/tender/openua/tests/contract.py index 2d54dcc3f9..bce62e3af7 100644 --- a/src/openprocurement/tender/openua/tests/contract.py +++ b/src/openprocurement/tender/openua/tests/contract.py @@ -9,7 +9,11 @@ TenderContractDocumentResourceTestMixin, ) -from openprocurement.tender.openua.tests.base import test_bids, BaseTenderUAContentWebTest +from openprocurement.tender.openua.tests.base import ( + test_bids, + BaseTenderUAContentWebTest, + test_tender_data_multi_buyers, +) from openprocurement.tender.openua.tests.contract_blanks import ( # TenderContractResourceTest patch_tender_contract, @@ -27,6 +31,9 @@ put_tender_contract_document_by_supplier, put_tender_contract_document_by_others, patch_tender_contract_document_by_supplier, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, + patch_tender_multi_contracts, ) @@ -34,9 +41,7 @@ class TenderContractResourceTest(BaseTenderUAContentWebTest, TenderContractResou initial_status = "active.qualification" initial_bids = test_bids - def setUp(self): - super(TenderContractResourceTest, self).setUp() - # Create award + def create_award(self): authorization = self.app.authorization self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( @@ -46,19 +51,24 @@ def setUp(self): "suppliers": [test_organization], "status": "pending", "bid_id": self.initial_bids[0]["id"], - "value": self.initial_bids[0]["value"], + "value": self.initial_data["value"], } }, ) award = response.json["data"] self.award_id = award["id"] self.award_value = award["value"] + self.award_suppliers = award["suppliers"] self.app.authorization = authorization self.app.patch_json( "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "active", "qualified": True, "eligible": True}}, ) + def setUp(self): + super(TenderContractResourceTest, self).setUp() + self.create_award() + test_create_tender_contract = snitch(create_tender_contract) test_patch_tender_contract_datesigned = snitch(patch_tender_contract_datesigned) test_patch_tender_contract = snitch(patch_tender_contract) @@ -66,6 +76,8 @@ def setUp(self): test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(BaseTenderUAContentWebTest, TenderContractResourceTestMixin): @@ -143,10 +155,23 @@ def setUp(self): test_patch_tender_contract_document_by_supplier = snitch(patch_tender_contract_document_by_supplier) +class TenderContractMultiBuyersResourceTest(BaseTenderUAContentWebTest): + initial_status = "active.qualification" + initial_bids = test_bids + initial_data = test_tender_data_multi_buyers + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + TenderContractResourceTest.create_award(self) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest)) suite.addTest(unittest.makeSuite(TenderContractDocumentResourceTest)) + suite.addTest(unittest.makeSuite(TenderContractMultiBuyersResourceTest)) return suite diff --git a/src/openprocurement/tender/openua/tests/tender.py b/src/openprocurement/tender/openua/tests/tender.py index 27ecc1c085..fbc557a485 100644 --- a/src/openprocurement/tender/openua/tests/tender.py +++ b/src/openprocurement/tender/openua/tests/tender.py @@ -17,6 +17,8 @@ create_tender_central_invalid, tender_minimalstep_validation, patch_tender_minimalstep_validation, + create_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, ) from openprocurement.tender.openua.tests.base import test_tender_data, test_bids, BaseTenderUAWebTest, BaseApiWebTest @@ -82,6 +84,8 @@ class TenderUAResourceTest(BaseTenderUAWebTest, TenderResourceTestMixin, TenderU test_tender_minimalstep_validation = snitch(tender_minimalstep_validation) test_patch_tender_minimalstep_validation = snitch(patch_tender_minimalstep_validation) test_create_tender_with_criteria_lcc = snitch(create_tender_with_criteria_lcc) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) class TenderUAProcessTest(BaseTenderUAWebTest, TenderUaProcessTestMixin): diff --git a/src/openprocurement/tender/openua/utils.py b/src/openprocurement/tender/openua/utils.py index 725ebfe881..23f9575c16 100644 --- a/src/openprocurement/tender/openua/utils.py +++ b/src/openprocurement/tender/openua/utils.py @@ -12,7 +12,7 @@ check_complaint_statuses_at_complaint_period_end, ) from openprocurement.tender.belowthreshold.utils import ( - check_tender_status, context_unpack, add_contract, + check_tender_status, context_unpack, add_contracts, add_next_award, ) @@ -64,7 +64,7 @@ def check_status(request): for award in tender.awards: if award.status == "active" and not any([i.awardID == award.id for i in tender.contracts]): - add_contract(request, award, now) + add_contracts(request, award, now) add_next_award(request) if cancellation_block_tender(tender): diff --git a/src/openprocurement/tender/openua/views/award.py b/src/openprocurement/tender/openua/views/award.py index 72c2a1f744..1443cc7704 100644 --- a/src/openprocurement/tender/openua/views/award.py +++ b/src/openprocurement/tender/openua/views/award.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from openprocurement.tender.belowthreshold.utils import add_contract, add_next_award +from openprocurement.tender.belowthreshold.utils import add_contracts, add_next_award from openprocurement.tender.core.validation import ( validate_patch_award_data, validate_update_award_only_for_active_lots, @@ -118,7 +118,7 @@ def patch(self): if award_status == "pending" and award.status == "active": award.complaintPeriod.endDate = calculate_complaint_business_date(now, STAND_STILL_TIME, tender) - add_contract(self.request, award, now) + add_contracts(self.request, award, now) add_next_award(self.request) elif ( award_status == "active" diff --git a/src/openprocurement/tender/openua/views/contract.py b/src/openprocurement/tender/openua/views/contract.py index e0eaa9b236..2d103f12d4 100644 --- a/src/openprocurement/tender/openua/views/contract.py +++ b/src/openprocurement/tender/openua/views/contract.py @@ -12,6 +12,7 @@ validate_update_contract_value_amount, validate_update_contract_value_net_required, validate_update_contract_status_by_supplier, + validate_activate_contract, ) from openprocurement.tender.core.utils import save_tender, apply_patch, optendersresource from openprocurement.tender.openua.validation import validate_contract_update_with_accepted_complaint @@ -39,6 +40,7 @@ class TenderUaAwardContractResource(TenderAwardContractResource): validate_update_contract_value_net_required, validate_update_contract_value_with_award, validate_update_contract_value_amount, + validate_activate_contract, ), ) def patch(self): diff --git a/src/openprocurement/tender/openua/views/tender.py b/src/openprocurement/tender/openua/views/tender.py index cb93804ec0..3001a2221a 100644 --- a/src/openprocurement/tender/openua/views/tender.py +++ b/src/openprocurement/tender/openua/views/tender.py @@ -8,6 +8,7 @@ validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ) from openprocurement.tender.belowthreshold.views.tender import TenderResource from openprocurement.tender.openua.validation import validate_patch_tender_ua_data @@ -41,6 +42,7 @@ class TenderUAResource(TenderResource): validate_item_quantity, validate_tender_guarantee, validate_tender_guarantee_multilot, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/openuadefense/tests/base.py b/src/openprocurement/tender/openuadefense/tests/base.py index cf7523c3d0..969c12ad03 100644 --- a/src/openprocurement/tender/openuadefense/tests/base.py +++ b/src/openprocurement/tender/openuadefense/tests/base.py @@ -40,7 +40,11 @@ "additionalClassifications": [ {"scheme": "ДКПП", "id": "17.21.1", "description": "папір і картон гофровані, паперова й картонна тара"} ], - "unit": {"name": "item", "code": "44617100-9"}, + "unit": { + "name": "item", + "code": "KGM", + "value": {"amount": 6} + }, "quantity": 5, "deliveryDate": { "startDate": (now + timedelta(days=2)).isoformat(), diff --git a/src/openprocurement/tender/openuadefense/tests/contract.py b/src/openprocurement/tender/openuadefense/tests/contract.py index f9ba119182..603c97a8ce 100644 --- a/src/openprocurement/tender/openuadefense/tests/contract.py +++ b/src/openprocurement/tender/openuadefense/tests/contract.py @@ -28,6 +28,8 @@ put_tender_contract_document_by_supplier, put_tender_contract_document_by_others, patch_tender_contract_document_by_supplier, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, ) @@ -54,6 +56,7 @@ def setUp(self): award = response.json["data"] self.award_id = award["id"] self.award_value = award["value"] + self.award_suppliers = award["suppliers"] self.app.authorization = authorization self.app.patch_json( "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), @@ -66,6 +69,8 @@ def setUp(self): test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(BaseTenderUAContentWebTest, TenderContractResourceTestMixin): diff --git a/src/openprocurement/tender/openuadefense/tests/tender.py b/src/openprocurement/tender/openuadefense/tests/tender.py index 58a2f7c9b3..82bc60efda 100644 --- a/src/openprocurement/tender/openuadefense/tests/tender.py +++ b/src/openprocurement/tender/openuadefense/tests/tender.py @@ -12,6 +12,8 @@ patch_tender_lots_none, tender_minimalstep_validation, patch_tender_minimalstep_validation, + create_tender_with_earlier_non_required_unit, + create_tender_with_required_unit, ) from openprocurement.tender.openua.tests.tender import TenderUaProcessTestMixin, TenderTestMixin @@ -67,6 +69,8 @@ class TenderUAResourceTest(BaseTenderUAWebTest, TenderResourceTestMixin): test_tender_minimalstep_validation = snitch(tender_minimalstep_validation) test_patch_tender_minimalstep_validation = snitch(patch_tender_minimalstep_validation) test_patch_item_with_zero_quantity = snitch(patch_item_with_zero_quantity) + test_create_tender_with_earlier_non_required_unit = snitch(create_tender_with_earlier_non_required_unit) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) class TenderUAProcessTest(BaseTenderUAWebTest, TenderUaProcessTestMixin): diff --git a/src/openprocurement/tender/openuadefense/utils.py b/src/openprocurement/tender/openuadefense/utils.py index 2c9c5e0daa..87be676913 100644 --- a/src/openprocurement/tender/openuadefense/utils.py +++ b/src/openprocurement/tender/openuadefense/utils.py @@ -18,7 +18,7 @@ check_cancellation_status, add_next_award as add_next_award_base, ) -from openprocurement.tender.belowthreshold.utils import check_tender_status, add_contract +from openprocurement.tender.belowthreshold.utils import check_tender_status, add_contracts from openprocurement.tender.core.utils import ( calculate_tender_business_date as calculate_tender_business_date_base, calculate_clarif_business_date as calculate_clarif_business_date_base, @@ -85,7 +85,7 @@ def check_status(request): for award in tender.awards: if award.status == "active" and not any([i.awardID == award.id for i in tender.contracts]): - add_contract(request, award, now) + add_contracts(request, award, now) add_next_award(request) if ( not tender.lots diff --git a/src/openprocurement/tender/openuadefense/views/award.py b/src/openprocurement/tender/openuadefense/views/award.py index 246b4f17a9..66b9b31aaa 100644 --- a/src/openprocurement/tender/openuadefense/views/award.py +++ b/src/openprocurement/tender/openuadefense/views/award.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from openprocurement.api.utils import get_now, raise_operation_error -from openprocurement.tender.belowthreshold.utils import add_contract +from openprocurement.tender.belowthreshold.utils import add_contracts from openprocurement.tender.core.utils import ( apply_patch, @@ -129,7 +129,7 @@ def patch(self): "endDate": complaint_end_date, } - add_contract(self.request, award, now) + add_contracts(self.request, award, now) add_next_award(self.request) elif ( award_status == "active" diff --git a/src/openprocurement/tender/openuadefense/views/tender.py b/src/openprocurement/tender/openuadefense/views/tender.py index cbdcd7562d..05fd623622 100644 --- a/src/openprocurement/tender/openuadefense/views/tender.py +++ b/src/openprocurement/tender/openuadefense/views/tender.py @@ -9,6 +9,7 @@ validate_tender_not_in_terminated_status, validate_tender_change_status_with_cancellation_lot_pending, validate_tender_activate_with_criteria, + validate_items_buyer_id, ) from openprocurement.tender.belowthreshold.views.tender import TenderResource from openprocurement.tender.openua.validation import validate_patch_tender_ua_data @@ -32,6 +33,7 @@ class TenderUAResource(TenderResource): validate_patch_tender_ua_data, validate_tender_not_in_terminated_status, validate_tender_change_status_with_cancellation_lot_pending, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/pricequotation/models/tender.py b/src/openprocurement/tender/pricequotation/models/tender.py index 898075da3d..3b28595255 100644 --- a/src/openprocurement/tender/pricequotation/models/tender.py +++ b/src/openprocurement/tender/pricequotation/models/tender.py @@ -6,7 +6,7 @@ from schematics.types.serializable import serializable from pyramid.security import Allow from zope.interface import implementer -from openprocurement.api.constants import TZ +from openprocurement.api.constants import TZ, UNIT_PRICE_REQUIRED_FROM from openprocurement.api.models import ( BusinessOrganization, CPVClassification, @@ -15,7 +15,7 @@ ) from openprocurement.api.models import Item as BaseItem from openprocurement.api.models import ListType, Period, Value -from openprocurement.api.utils import get_now +from openprocurement.api.utils import get_now, get_first_revision_date from openprocurement.api.validation import ( validate_classification_id, validate_cpv_group, @@ -29,6 +29,7 @@ Tender, Model, ) +from openprocurement.tender.belowthreshold.models import Unit from openprocurement.tender.openua.validation import _validate_tender_period_duration from openprocurement.tender.pricequotation.constants import ( PMT, @@ -53,7 +54,7 @@ class ShortlistedFirm(BusinessOrganization): status = StringType() -class Item(BaseItem): +class TenderItem(BaseItem): class Options: roles = { 'create': whitelist( @@ -61,6 +62,7 @@ class Options: 'description', 'description_en', 'description_ru', + 'unit', 'quantity', 'deliveryDate', 'deliveryAddress', @@ -70,6 +72,7 @@ class Options: 'description', 'description_en', 'description_ru', + 'unit', 'quantity', 'deliveryDate', 'deliveryAddress', @@ -78,17 +81,39 @@ class Options: 'bots': whitelist( 'classification', 'additionalClassifications', - 'unit' ), "edit_contract": whitelist("unit") } """A good, service, or work to be contracted.""" classification = ModelType(CPVClassification) + unit = ModelType(Unit) + + def validate_unit(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM and not value: + raise ValidationError(u"This field is required.") + + def validate_quantity(self, data, value): + _parent = data['__parent__'] + validation_date = get_first_revision_date(_parent, default=get_now()) + if validation_date >= UNIT_PRICE_REQUIRED_FROM and value is None: + raise ValidationError(u"This field is required.") + + +class ContractItem(BaseItem): + class Options: + roles = { + "edit_contract": whitelist("unit") + } + + unit = ModelType(Unit) class Contract(BaseContract): documents = ListType(ModelType(Document, required=True), default=list()) + items = ListType(ModelType(ContractItem)) def validate_dateSigned(self, data, value): parent = data["__parent__"] @@ -211,7 +236,7 @@ class Options: # broken into line items wherever possible. # Items should not be duplicated, but a quantity of 2 specified instead. items = ListType( - ModelType(Item, required=True), + ModelType(TenderItem, required=True), required=True, min_size=1, validators=[validate_items_uniq], diff --git a/src/openprocurement/tender/pricequotation/tests/contract.py b/src/openprocurement/tender/pricequotation/tests/contract.py index 28e683be60..160cf80346 100644 --- a/src/openprocurement/tender/pricequotation/tests/contract.py +++ b/src/openprocurement/tender/pricequotation/tests/contract.py @@ -1,23 +1,28 @@ # -*- coding: utf-8 -*- import unittest +from copy import deepcopy from openprocurement.api.tests.base import snitch from openprocurement.tender.pricequotation.tests.base import ( TenderContentWebTest, test_bids, - ) + test_tender_data_multi_buyers, +) from openprocurement.tender.belowthreshold.tests.contract import ( TenderContractResourceTestMixin, - TenderContractDocumentResourceTestMixin - ) + TenderContractDocumentResourceTestMixin, +) from openprocurement.tender.belowthreshold.tests.contract_blanks import ( create_tender_contract, create_tender_contract_in_complete_status, patch_tender_contract_value, - ) + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, + patch_tender_multi_contracts, +) from openprocurement.tender.pricequotation.tests.contract_blanks import ( patch_tender_contract, patch_tender_contract_value_vat_not_included, - ) +) class TenderContractResourceTest(TenderContentWebTest, @@ -25,24 +30,29 @@ class TenderContractResourceTest(TenderContentWebTest, initial_status = "active.awarded" initial_bids = test_bids - def setUp(self): - super(TenderContractResourceTest, self).setUp() + def get_award(self): self.award_id = self.award_ids[-1] resp = self.app.get( "/tenders/{}/awards/{}".format(self.tender_id, self.award_id), - ) + ) award = resp.json["data"] self.award_value = award["value"] self.award_suppliers = award["suppliers"] self.award_items = award["items"] self.award_date = award["date"] + def setUp(self): + super(TenderContractResourceTest, self).setUp() + self.get_award() + test_create_tender_contract = snitch(create_tender_contract) test_create_tender_contract_in_complete_status = snitch( create_tender_contract_in_complete_status ) test_patch_tender_contract = snitch(patch_tender_contract) test_patch_tender_contract_value = snitch(patch_tender_contract_value) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(TenderContentWebTest, @@ -52,14 +62,7 @@ class TenderContractVATNotIncludedResourceTest(TenderContentWebTest, def setUp(self): super(TenderContractVATNotIncludedResourceTest, self).setUp() - self.award_id = self.award_ids[-1] - resp = self.app.get( - "/tenders/{}/awards/{}".format(self.tender_id, self.award_id), - ) - award = resp.json["data"] - self.award_value = award["value"] - self.award_suppliers = award["suppliers"] - self.award_items = award["items"] + TenderContractResourceTest.get_award(self) test_patch_tender_contract_value_vat_not_included = snitch( patch_tender_contract_value_vat_not_included @@ -75,10 +78,28 @@ def setUp(self): super(TenderContractDocumentResourceTest, self).setUp() +class TenderContractMultiBuyersResourceTest(TenderContentWebTest): + initial_data = test_tender_data_multi_buyers + initial_status = "active.qualification" + initial_bids = test_bids + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + TenderContractResourceTest.get_award(self) + response = self.app.patch_json( + "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), + {"data": {"status": "active"}}, + ) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest)) suite.addTest(unittest.makeSuite(TenderContractDocumentResourceTest)) + suite.addTest(unittest.makeSuite(TenderContractMultiBuyersResourceTest)) + return suite diff --git a/src/openprocurement/tender/pricequotation/tests/data.py b/src/openprocurement/tender/pricequotation/tests/data.py index 699bda9f8b..5e87829a5e 100644 --- a/src/openprocurement/tender/pricequotation/tests/data.py +++ b/src/openprocurement/tender/pricequotation/tests/data.py @@ -3,6 +3,7 @@ from copy import deepcopy from datetime import timedelta from openprocurement.api.utils import get_now +from openprocurement.tender.belowthreshold.tests.base import set_tender_multi_buyers from openprocurement.tender.pricequotation.constants import PMT from openprocurement.api.constants import SANDBOX_MODE @@ -179,7 +180,12 @@ "additionalClassifications": [ {"scheme": "INN", "id": "17.21.1", "description": "папір і картон гофровані, паперова й картонна тара"} ], - "quantity": 1, + "unit": { + "name": "кг", + "code": "KGM", + "value": {"amount": 6}, + }, + "quantity": 5, "deliveryDate": { "startDate": (now + timedelta(days=2)).isoformat(), "endDate": (now + timedelta(days=5)).isoformat(), @@ -207,6 +213,11 @@ if SANDBOX_MODE: test_tender_data["procurementMethodDetails"] = "quick, accelerator=1440" +test_tender_data_multi_buyers = set_tender_multi_buyers( + test_tender_data, test_tender_data["items"][0], + test_organization +) + test_bids = [ {"tenderers": [test_organization], "value": {"amount": 469, "currency": "UAH", "valueAddedTaxIncluded": True}, "requirementResponses": test_requirement_response_valid}, {"tenderers": [test_organization], "value": {"amount": 479, "currency": "UAH", "valueAddedTaxIncluded": True}, "requirementResponses": test_requirement_response_valid}, @@ -541,8 +552,8 @@ "id": "400496-0002-001-01", "title": "Доза діючої речовини", "unit": { - "code": "GL", - "name": "г/л" + "code": "KGM", + "name": "кілограми" } } ] diff --git a/src/openprocurement/tender/pricequotation/tests/tender.py b/src/openprocurement/tender/pricequotation/tests/tender.py index 54f3e42ecf..78c25bf6bd 100644 --- a/src/openprocurement/tender/pricequotation/tests/tender.py +++ b/src/openprocurement/tender/pricequotation/tests/tender.py @@ -37,6 +37,7 @@ tender_fields, lost_contract_for_active_award, create_tender_in_not_draft_status, + create_pricequotation_tender_with_earlier_non_required_unit ) from openprocurement.tender.belowthreshold.tests.tender_blanks import ( guarantee, @@ -52,8 +53,11 @@ tender_with_main_procurement_category, create_tender_with_inn_before, tender_token_invalid, + create_tender_with_required_unit, + patch_items_related_buyer_id, ) + class TenderResourceTestMixin(object): test_listing_changes = snitch(listing_changes) test_listing_draft = snitch(listing_draft) @@ -71,6 +75,7 @@ class TenderResourceTestMixin(object): test_tender_with_main_procurement_category = snitch(tender_with_main_procurement_category) test_tender_token_invalid = snitch(tender_token_invalid) test_create_tender_in_not_draft_status = snitch(create_tender_in_not_draft_status) + test_patch_items_related_buyer_id = snitch(patch_items_related_buyer_id) class TenderTest(TenderTestMixin, BaseApiWebTest): @@ -94,6 +99,10 @@ class TenderResourceTest(BaseTenderWebTest, TenderResourceTestMixin): test_create_tender_with_inn_before = snitch(create_tender_with_inn_before) test_patch_tender_by_pq_bot = snitch(patch_tender_by_pq_bot) test_invalid_tender_conditions = snitch(invalid_tender_conditions) + test_create_pricequotation_tender_with_earlier_non_required_unit = snitch( + create_pricequotation_tender_with_earlier_non_required_unit + ) + test_create_tender_with_required_unit = snitch(create_tender_with_required_unit) class TenderProcessTest(TenderContentWebTest): diff --git a/src/openprocurement/tender/pricequotation/tests/tender_blanks.py b/src/openprocurement/tender/pricequotation/tests/tender_blanks.py index e45a81710d..50cc07d19f 100644 --- a/src/openprocurement/tender/pricequotation/tests/tender_blanks.py +++ b/src/openprocurement/tender/pricequotation/tests/tender_blanks.py @@ -23,6 +23,7 @@ # TenderTest from openprocurement.tender.core.tests.base import change_auth from openprocurement.tender.pricequotation.constants import PMT, PQ_KINDS +from openprocurement.tender.belowthreshold.tests.tender_blanks import create_tender_with_earlier_non_required_unit def listing(self): @@ -849,14 +850,33 @@ def tender_owner_can_change_in_draft(self): tender = response.json["data"] self.assertEqual(tender["funders"], lists["funders"]) + buyer_id = tender["buyers"][0]["id"] + lists["buyers"][0]["id"] = buyer_id self.assertEqual(tender["buyers"], lists["buyers"]) self.assertEqual(tender["items"][0]["description"], lists["items"][0]["description"]) # status response = self.app.patch_json( - "/tenders/{}?acc_token={}".format(tender["id"], token), {"data": status} + "/tenders/{}?acc_token={}".format(tender["id"], token), {"data": status}, + status=403 + ) + self.assertEqual(response.status, "403 Forbidden") + self.assertEqual( + response.json["errors"], + [{'description': 'Each item should contain relatedBuyer id', + 'location': 'body', + 'name': 'data'}], ) + patch_data = {"items": [{"relatedBuyer": buyer_id}]} + patch_data.update(status) + response = self.app.patch_json( + "/tenders/{}?acc_token={}".format(tender["id"], token), + { + "data": patch_data + }, + ) + self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") tender = response.json["data"] @@ -1261,7 +1281,6 @@ def patch_tender_by_pq_bot(self): self.assertEqual(len(tender["items"]), 1) self.assertNotIn("shortlistedFirms", tender) self.assertNotIn("classification", tender["items"][0]) - self.assertNotIn("unit", tender["items"][0]) data = {"data": { "status": "draft.publishing", @@ -1326,7 +1345,6 @@ def patch_tender_by_pq_bot(self): self.assertEqual(len(tender["items"]), 1) self.assertNotIn("shortlistedFirms", tender) self.assertNotIn("classification", tender["items"][0]) - self.assertNotIn("unit", tender["items"][0]) data = {"data": {"status": "draft.publishing", "profile": "a1b2c3-a1b2c3e4-f1g2i3-h1g2k3l4"}} response = self.app.patch_json("/tenders/{}?acc_token={}".format(tender_id, owner_token), data, status=422) @@ -1355,10 +1373,13 @@ def patch_tender_by_pq_bot(self): self.assertEqual(tender["status"], "draft.unsuccessful") self.assertEqual(tender["unsuccessfulReason"], ["Profile not found in catalogue"]) self.assertNotIn("classification", tender["items"][0]) - self.assertNotIn("unit", tender["items"][0]) self.assertNotIn("shortlistedFirms", tender) # TenderProcessTest +@mock.patch( + "openprocurement.tender.pricequotation.models.tender.UNIT_PRICE_REQUIRED_FROM", get_now() + timedelta(days=1)) +def create_pricequotation_tender_with_earlier_non_required_unit(self): + create_tender_with_earlier_non_required_unit(self) def invalid_tender_conditions(self): diff --git a/src/openprocurement/tender/pricequotation/utils.py b/src/openprocurement/tender/pricequotation/utils.py index 25fb602808..06e37c0043 100644 --- a/src/openprocurement/tender/pricequotation/utils.py +++ b/src/openprocurement/tender/pricequotation/utils.py @@ -8,7 +8,7 @@ calculate_tender_business_date, ) -from openprocurement.tender.belowthreshold.utils import add_contract +from openprocurement.tender.belowthreshold.utils import add_contracts from openprocurement.tender.pricequotation.constants import QUALIFICATION_DURATION @@ -55,7 +55,7 @@ def check_award_status(request): else: add_next_award(request) if award.status == "active" and not any([i.awardID == award.id for i in tender.contracts]): - add_contract(request, award, now) + add_contracts(request, award, now) add_next_award(request) @@ -93,7 +93,11 @@ def check_tender_status(request): ), ) tender.status = "unsuccessful" - if tender.contracts and tender.contracts[-1].status == "active": + if ( + tender.contracts + and any([contract.status == "active" for contract in tender.contracts]) + and not any([contract.status == "pending" for contract in tender.contracts]) + ): tender.status = "complete" diff --git a/src/openprocurement/tender/pricequotation/views/award.py b/src/openprocurement/tender/pricequotation/views/award.py index becd411957..1258b8a507 100644 --- a/src/openprocurement/tender/pricequotation/views/award.py +++ b/src/openprocurement/tender/pricequotation/views/award.py @@ -6,7 +6,7 @@ from openprocurement.tender.belowthreshold.views.award import\ TenderAwardResource from openprocurement.tender.pricequotation.utils import\ - add_next_award, add_contract + add_next_award, add_contracts from openprocurement.tender.pricequotation.constants import PMT from openprocurement.tender.core.validation import ( validate_award_data, @@ -84,7 +84,7 @@ def patch(self): ) if award_status == "pending" and award.status == "active": - add_contract(self.request, award, now) + add_contracts(self.request, award, now) add_next_award(self.request) elif award_status == "active" and award.status == "cancelled": for i in tender.contracts: diff --git a/src/openprocurement/tender/pricequotation/views/contract.py b/src/openprocurement/tender/pricequotation/views/contract.py index 2193c2148c..2f3bf726c7 100644 --- a/src/openprocurement/tender/pricequotation/views/contract.py +++ b/src/openprocurement/tender/pricequotation/views/contract.py @@ -10,7 +10,8 @@ validate_update_contract_value_with_award, validate_update_contract_value_amount, validate_update_contract_value_net_required, - validate_update_contract_status_by_supplier + validate_update_contract_status_by_supplier, + validate_activate_contract, ) from openprocurement.tender.belowthreshold.views.contract\ import TenderAwardContractResource @@ -38,6 +39,7 @@ class PQTenderAwardContractResource(TenderAwardContractResource): validate_update_contract_value_net_required, validate_update_contract_value_with_award, validate_update_contract_value_amount, + validate_activate_contract, ), ) def patch(self): diff --git a/src/openprocurement/tender/pricequotation/views/tender.py b/src/openprocurement/tender/pricequotation/views/tender.py index 446b020416..7f4d77b8b6 100644 --- a/src/openprocurement/tender/pricequotation/views/tender.py +++ b/src/openprocurement/tender/pricequotation/views/tender.py @@ -3,8 +3,10 @@ from openprocurement.api.utils import context_unpack, json_view, get_now from openprocurement.tender.core.utils import\ save_tender, optendersresource, apply_patch -from openprocurement.tender.core.validation import\ - validate_tender_not_in_terminated_status +from openprocurement.tender.core.validation import ( + validate_tender_not_in_terminated_status, + validate_items_buyer_id, +) from openprocurement.tender.belowthreshold.views.tender import TenderResource from openprocurement.tender.pricequotation.constants import PMT @@ -28,6 +30,7 @@ class PriceQuotationTenderResource(TenderResource): validate_patch_tender_data, validate_tender_publish, validate_tender_not_in_terminated_status, + validate_items_buyer_id, ), permission="edit_tender", ) diff --git a/src/openprocurement/tender/simpledefense/tests/base.py b/src/openprocurement/tender/simpledefense/tests/base.py index 9d057e5189..0c1be76511 100644 --- a/src/openprocurement/tender/simpledefense/tests/base.py +++ b/src/openprocurement/tender/simpledefense/tests/base.py @@ -18,7 +18,11 @@ test_procuringEntity as test_procuringEntity_api, test_tender_data as test_tender_data_api, ) -from openprocurement.tender.belowthreshold.tests.base import test_bids as base_test_bids +from openprocurement.tender.belowthreshold.tests.base import ( + test_bids as base_test_bids, + set_tender_multi_buyers, + test_organization, +) test_tender_data = test_tender_ua_data = test_tender_data_api.copy() @@ -43,6 +47,10 @@ for i in test_bids: i.update(bid_update_data) +test_tender_data_multi_buyers = set_tender_multi_buyers( + test_tender_data, test_tender_data["items"][0], + test_organization +) class BaseApiWebTest(BaseWebTest): relative_to = os.path.dirname(__file__) diff --git a/src/openprocurement/tender/simpledefense/tests/contract.py b/src/openprocurement/tender/simpledefense/tests/contract.py index 967348f342..c4bd1835e9 100644 --- a/src/openprocurement/tender/simpledefense/tests/contract.py +++ b/src/openprocurement/tender/simpledefense/tests/contract.py @@ -15,7 +15,11 @@ patch_tender_contract, ) -from openprocurement.tender.simpledefense.tests.base import BaseSimpleDefContentWebTest, test_bids +from openprocurement.tender.simpledefense.tests.base import ( + BaseSimpleDefContentWebTest, + test_bids, + test_tender_data_multi_buyers, +) from openprocurement.tender.belowthreshold.tests.contract_blanks import ( patch_tender_contract_value_vat_not_included, @@ -28,6 +32,9 @@ put_tender_contract_document_by_supplier, put_tender_contract_document_by_others, patch_tender_contract_document_by_supplier, + patch_contract_single_item_unit_value, + patch_contract_multi_items_unit_value, + patch_tender_multi_contracts, ) @@ -35,9 +42,7 @@ class TenderContractResourceTest(BaseSimpleDefContentWebTest, TenderContractReso initial_status = "active.qualification" initial_bids = test_bids - def setUp(self): - super(TenderContractResourceTest, self).setUp() - # Create award + def create_award(self, value_vat_included=True): authorization = self.app.authorization self.app.authorization = ("Basic", ("token", "")) response = self.app.post_json( @@ -47,61 +52,45 @@ def setUp(self): "suppliers": [test_organization], "status": "pending", "bid_id": self.initial_bids[0]["id"], - "value": self.initial_bids[0]["value"], + "value": { + "amount": self.initial_data["value"]["amount"], + "currency": self.initial_data["value"]["currency"], + "valueAddedTaxIncluded": value_vat_included, + }, } }, ) award = response.json["data"] self.award_id = award["id"] self.award_value = award["value"] + self.award_suppliers = award["suppliers"] self.app.authorization = authorization self.app.patch_json( "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "active", "qualified": True, "eligible": True}}, ) + def setUp(self): + super(TenderContractResourceTest, self).setUp() + self.create_award() + test_create_tender_contract = snitch(create_tender_contract) test_patch_tender_contract = snitch(patch_tender_contract) test_patch_tender_contract_value = snitch(patch_tender_contract_value) test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) test_patch_tender_contract_status_by_others = snitch(patch_tender_contract_status_by_others) test_patch_tender_contract_status_by_supplier = snitch(patch_tender_contract_status_by_supplier) + test_patch_contract_single_item_unit_value = snitch(patch_contract_single_item_unit_value) + test_patch_contract_multi_items_unit_value = snitch(patch_contract_multi_items_unit_value) class TenderContractVATNotIncludedResourceTest(BaseSimpleDefContentWebTest, TenderContractResourceTestMixin): initial_status = "active.qualification" initial_bids = test_bids - def create_award(self): - authorization = self.app.authorization - self.app.authorization = ("Basic", ("token", "")) - response = self.app.post_json( - "/tenders/{}/awards".format(self.tender_id), - { - "data": { - "suppliers": [test_organization], - "status": "pending", - "bid_id": self.initial_bids[0]["id"], - "value": { - "amount": self.initial_bids[0]["value"]["amount"], - "currency": self.initial_bids[0]["value"]["currency"], - "valueAddedTaxIncluded": False, - }, - } - }, - ) - award = response.json["data"] - self.award_id = award["id"] - self.award_value = award["value"] - self.app.authorization = authorization - self.app.patch_json( - "/tenders/{}/awards/{}?acc_token={}".format(self.tender_id, self.award_id, self.tender_token), - {"data": {"status": "active", "qualified": True, "eligible": True}}, - ) - def setUp(self): super(TenderContractVATNotIncludedResourceTest, self).setUp() - self.create_award() + TenderContractResourceTest.create_award(self, value_vat_included=False) test_patch_tender_contract_value_vat_not_included = snitch(patch_tender_contract_value_vat_not_included) test_patch_tender_contract_status_by_owner = snitch(patch_tender_contract_status_by_owner) @@ -144,6 +133,17 @@ def setUp(self): test_patch_tender_contract_document_by_supplier = snitch(patch_tender_contract_document_by_supplier) +class TenderContractMultiBuyersResourceTest(BaseSimpleDefContentWebTest): + initial_data = test_tender_data_multi_buyers + initial_status = "active.qualification" + initial_bids = test_bids + + def setUp(self): + super(TenderContractMultiBuyersResourceTest, self).setUp() + TenderContractResourceTest.create_award(self, value_vat_included=True) + + test_patch_tender_multi_contracts = snitch(patch_tender_multi_contracts) + def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TenderContractResourceTest))