Commit db621957234dbc547c366ca3fa0505566671da81
1 parent
4d58a5c2
add question\answer create claim add bid
Showing
5 changed files
with
424 additions
and
13 deletions
... | ... | @@ -140,3 +140,111 @@ Resource playtender_tende |
140 | 140 | open tender page by uaid ${tender_uaid} |
141 | 141 | ${value} = get tender field value by name ${field_name} |
142 | 142 | [Return] ${value} |
143 | + | |
144 | +Внести зміни в тендер | |
145 | + [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} | |
146 | + [Documentation] Змінити значення поля fieldname на fieldvalue для плана із зазначеним plan_uaid. | |
147 | + | |
148 | + ${tender_data} = generate dictionary from field path and value ${fieldname} ${fieldvalue} | |
149 | + open tender form by uaid ${tender_uaid} | |
150 | + fill tender form ${tender_data} | |
151 | + save tender form and wait synchronization | |
152 | + | |
153 | +Додати предмет закупівлі | |
154 | + [Arguments] ${username} ${tender_uaid} ${item_data} | |
155 | + | |
156 | + open tender form by uaid ${tender_uaid} | |
157 | + ${items} = create list ${item_data} | |
158 | + fill tender form items ${items} | |
159 | + save tender form and wait synchronization | |
160 | + | |
161 | +Завантажити документ | |
162 | + [Arguments] ${username} ${filepath} ${tender_uaid} | |
163 | + [Documentation] Завантажити документ, який знаходиться по шляху filepath, до тендера tender_uaid. | |
164 | + | |
165 | + open tender form by uaid ${tender_uaid} | |
166 | + add document in tender ${filepath} | |
167 | + save tender form and wait synchronization | |
168 | + | |
169 | +Завантажити документ в лот | |
170 | + [Arguments] ${username} ${filepath} ${tender_uaid} ${lot_id} | |
171 | + [Documentation] Завантажити документ, який знаходиться по шляху filepath, до лоту з lot_id в описі для тендера tender_uaid. | |
172 | + | |
173 | + open tender form by uaid ${tender_uaid} | |
174 | + add document in lot ${filepath} ${lot_id} | |
175 | + save tender form and wait synchronization | |
176 | + | |
177 | +Відповісти на запитання | |
178 | + [Arguments] ${username} ${tender_uaid} ${answer_data} ${question_id} | |
179 | + [Documentation] Дати відповідь answer_data на запитання з question_id в описі для тендера tender_uaid. | |
180 | + | |
181 | + open tender form by uaid ${tender_uaid} | |
182 | + answer question ${answer_data} ${question_id} | |
183 | +# save tender form and wait synchronization | |
184 | + | |
185 | +Задати запитання на предмет | |
186 | + [Arguments] ${username} ${tender_uaid} ${item_id} ${question} | |
187 | + [Documentation] Створити запитання з даними question до предмету з item_id в описі для тендера tender_uaid. | |
188 | + | |
189 | + Задати запитання ${username} ${tender_uaid} item ${item_id} ${question} | |
190 | + | |
191 | +Задати запитання на лот | |
192 | + [Arguments] ${username} ${tender_uaid} ${lot_id } ${question} | |
193 | + [Documentation] Створити запитання з даними question до лоту з lot_id в описі для тендера tender_uaid. | |
194 | + | |
195 | + Задати запитання ${username} ${tender_uaid} lot ${lot_id} ${question} | |
196 | + | |
197 | +Задати запитання на тендер | |
198 | + [Arguments] ${username} ${tender_uaid} ${question} | |
199 | + [Documentation] Створити запитання з даними question для тендера tender_uaid. | |
200 | + | |
201 | + Задати запитання ${username} ${tender_uaid} tender null ${question} | |
202 | + | |
203 | +Створити вимогу про виправлення умов закупівлі | |
204 | + [Arguments] ${username} ${tender_uaid} ${claim} ${doc_name} | |
205 | + [Documentation] Створити запитання з даними question для тендера tender_uaid. | |
206 | + Run Keyword And Return Створити вимогу ${username} ${tender_uaid} tender null ${claim} ${doc_name} | |
207 | + | |
208 | +Створити чернетку вимоги про виправлення умов закупівлі | |
209 | + [Arguments] ${username} ${tender_uaid} ${claim} | |
210 | + [Documentation] Створює вимогу claim про виправлення умов закупівлі у статусі claim для тендера tender_uaid. Можна створити вимогу як з документом, який знаходиться за шляхом document, так і без нього. | |
211 | + Run Keyword And Return Створити вимогу ${username} ${tender_uaid} tender null ${claim} null | |
212 | + | |
213 | +Створити вимогу про виправлення умов лоту | |
214 | + [Arguments] ${username} ${tender_uaid} ${claim} ${lot_id} ${doc_name} | |
215 | + [Documentation] Створює вимогу claim про виправлення умов лоту у статусі draft для тендера tender_uaid. | |
216 | + Run Keyword And Return Створити вимогу ${username} ${tender_uaid} lot ${lot_id} ${claim} ${doc_name} | |
217 | + | |
218 | +Створити чернетку вимоги про виправлення умов лоту | |
219 | + [Arguments] ${username} ${tender_uaid} ${claim} ${lot_id} | |
220 | + [Documentation] Створює вимогу claim про виправлення умов закупівлі у статусі draft для тендера tender_uaid. | |
221 | + Run Keyword And Return Створити вимогу ${username} ${tender_uaid} lot ${lot_id} ${claim} null | |
222 | + | |
223 | +Створити вимогу про виправлення визначення переможця | |
224 | + [Arguments] ${username} ${tender_uaid} ${claim} ${proposal_id} ${doc_name} | |
225 | + [Documentation] Створює вимогу claim про виправлення визначення переможця під номером award_index в статусі claim для тендера tender_uaid. Можна створити вимогу як з документом, який знаходиться за шляхом document, так і без нього. | |
226 | + Run Keyword And Return Створити вимогу ${username} ${tender_uaid} winner ${proposal_id} ${claim} ${doc_name} | |
227 | + | |
228 | +Створити чернетку вимоги про виправлення визначення переможця | |
229 | + [Arguments] ${username} ${tender_uaid} ${claim} ${proposal_id} | |
230 | + [Documentation] Створює вимогу claim про виправлення визначення переможця під номером award_index в статусі draft для тендера tender_uaid. | |
231 | + Run Keyword And Return Створити вимогу ${username} ${tender_uaid} winner ${proposal_id} ${claim} null | |
232 | + | |
233 | +Подати цінову пропозицію | |
234 | + [Arguments] ${username} ${tender_uaid} ${bid} ${lots_ids} ${features_ids} | |
235 | + [Documentation] Подати цінову пропозицію bid для тендера tender_uaid на лоти lots_ids (якщо lots_ids != None) з неціновими показниками features_ids (якщо features_ids != None). | |
236 | + | |
237 | + open tender form by uaid ${tender_uaid} | |
238 | + fill bid form ${tender_uaid} ${bid} ${lots_ids} ${features_ids} | |
239 | + submit form and check result ${bid_form_submit_btn_locator} ${bid_form_submit_success_msg} ${tender_created_checker_element_locator} | |
240 | + wait until page does not contain element with reloading ${tender_sync_element_locator} | |
241 | + | |
242 | +Змінити цінову пропозицію | |
243 | + [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} | |
244 | + [Documentation] Змінити поле fieldname на fieldvalue цінової пропозиції користувача username для тендера tender_uaid. | |
245 | + | |
246 | + open tender form by uaid ${tender_uaid} | |
247 | + fill bid form edit ${fieldname} ${fieldvalue} | |
248 | + submit form and check result ${bid_form_submit_btn_locator} ${bid_form_submit_success_msg} ${tender_created_checker_element_locator} | |
249 | + wait until page does not contain element with reloading ${tender_sync_element_locator} | |
250 | + | ... | ... |
... | ... | @@ -61,7 +61,7 @@ fill item form in opened popup |
61 | 61 | ${description_ru} = get from dictionary by keys ${data} description_ru |
62 | 62 | run keyword if condition is not none ${description_ru} input text to exist visible input ${item_form_popup_description_ru_input_locator} ${description_ru} |
63 | 63 | ${description_en} = get from dictionary by keys ${data} description_en |
64 | - run keyword if condition is not none ${description_en} input text to exist visible input ${item_form_popup_description_ru_input_locator} ${description_en} | |
64 | + run keyword if condition is not none ${description_en} input text to exist visible input ${item_form_popup_description_en_input_locator} ${description_en} | |
65 | 65 | ${quantity} = get from dictionary by keys ${data} quantity |
66 | 66 | run keyword if condition is not none ${quantity} input number to visible input ${item_form_popup_quantity_input_locator} ${quantity} |
67 | 67 | ${unit} = get from dictionary by keys ${data} unit name |
... | ... | @@ -210,10 +210,15 @@ select classification by array of code attributes |
210 | 210 | ${exclude_schemes_is_none}= get variable is none ${exclude_schemes} |
211 | 211 | |
212 | 212 | open popup by btn locator ${btn_locator} ${classification_popup_opened_content_locator} |
213 | + Capture Page Screenshot | |
213 | 214 | :FOR ${code_attributes} IN @{code_attributes_array} |
214 | 215 | \ ${disabled} = set variable if ${include_schemes_is_none} == ${False} and '${code_attributes['scheme']}' not in ${include_schemes} ${True} ${False} |
216 | + \ Capture Page Screenshot | |
215 | 217 | \ ${disabled} = set variable if ${exclude_schemes_is_none} == ${False} and '${code_attributes['scheme']}' in ${exclude_schemes} ${True} ${disabled} |
218 | + \ Capture Page Screenshot | |
216 | 219 | \ run keyword if ${disabled} == ${False} __private__select_classification_code_in_opened_popup ${code_attributes['id']} ${code_attributes['scheme']} |
220 | + \ Capture Page Screenshot | |
221 | + Capture Page Screenshot | |
217 | 222 | submit current visible popup |
218 | 223 | |
219 | 224 | open site page and wait content element |
... | ... | @@ -338,7 +343,6 @@ Click and wait for the search |
338 | 343 | ... wanted_locator: What are we waiting for |
339 | 344 | ... timeout: Timeout |
340 | 345 | Press key ${click_locator} \\13 |
341 | -# Sleep 3 | |
342 | 346 | Wait Until Page Contains Element ${wanted_locator} ${timeout} |
343 | 347 | ######################################################################################################################## |
344 | 348 | ################################################### PRIVATE KEYWORDS ################################################### |
... | ... | @@ -402,6 +406,7 @@ __private__select_classification_code_in_opened_popup |
402 | 406 | run keyword if ${scheme_tab_exists} == ${True} click visible element ${scheme_tab_locator} |
403 | 407 | run keyword if ${scheme_tab_exists} == ${True} wait until tab content is visible ${scheme_tab_locator} |
404 | 408 | ... ELSE __private__log Classification scheme tab ${scheme} does not exist |
409 | + wait until popup is visible | |
405 | 410 | # seraching code |
406 | 411 | input text to visible input and press enter ${classification_popup_search_input_locator} ${code} |
407 | 412 | ${code} = convert to string ${code} | ... | ... |
... | ... | @@ -266,3 +266,15 @@ def prepare_tender_data(data): |
266 | 266 | del data['milestones'] |
267 | 267 | |
268 | 268 | return data |
269 | + | |
270 | +def split_agreementDuration(str, type): | |
271 | + if type in 'year': | |
272 | + year_temp = str.split('Y',1) | |
273 | + value = year_temp[0].split('P',1) | |
274 | + elif type in 'month': | |
275 | + month_temp = str.split('M',1) | |
276 | + value = month_temp[0].split('Y',1) | |
277 | + else: | |
278 | + day_temp = str.split('D',1) | |
279 | + value = day_temp[0].split('M',1) | |
280 | + return value[1] | |
\ No newline at end of file | ... | ... |
... | ... | @@ -9,11 +9,36 @@ open new tender form |
9 | 9 | |
10 | 10 | open page and wait element by locator ${broker_baseurl}/tender/create ${tender_form_locator} |
11 | 11 | |
12 | +update tender queue | |
13 | + [Documentation] запускає оновлення планів з ЦБД і додає їх в чергу, тобто синхронізація може відбутися не відразу | |
14 | + ... поточна сторіка повертається | |
15 | + | |
16 | + ${current_url} = get location | |
17 | + go to ${broker_baseurl}/utils/queue-tender-update | |
18 | + go to ${current_url} | |
19 | + | |
20 | +open tender form by uaid | |
21 | + [Arguments] ${tender_uaid} | |
22 | + [Documentation] відкриття сторінки редагування плану | |
23 | + | |
24 | + open tender page by uaid ${tender_uaid} | |
25 | + click visible element and wait until page contains element ${tender_edit_btn_locator} ${tender_form_locator} | |
26 | + | |
12 | 27 | open tender page by uaid |
13 | 28 | [Arguments] ${uaid} |
14 | 29 | [Documentation] відкриває сторінку з тендером |
15 | 30 | |
16 | - open page and wait element by locator ${broker_baseurl}/tender/${uaid} ${tender_view_checker_element_locator} | |
31 | +# open page and wait element by locator ${broker_baseurl}/tender/${uaid} ${tender_view_checker_element_locator} | |
32 | + open site page and wait content element ${broker_baseurl}/tender/${uaid} | |
33 | + ${is_tender_found} = get is element exist ${tender_view_checker_element_locator} | |
34 | + return from keyword if ${is_tender_found} == ${True} | |
35 | + ${is_tender_not_found} = get is 404 page | |
36 | + ${is_needed_to_update_and_wait_sync} = set variable if ${is_test_role_owner} == ${False} and ${is_tender_not_found} ${True} ${False} | |
37 | + run keyword if ${is_needed_to_update_and_wait_sync} update tender queue | |
38 | + run keyword if ${is_needed_to_update_and_wait_sync} wait until 404 page disappears | |
39 | + ${is_tender_found} = get is element exist ${tender_view_checker_element_locator} | |
40 | + run keyword if ${is_tender_found} == ${False} fail Opening tender page by uaid fails. | |
41 | + | |
17 | 42 | |
18 | 43 | fill tender form |
19 | 44 | [Arguments] ${data} |
... | ... | @@ -37,7 +62,7 @@ fill tender general info |
37 | 62 | |
38 | 63 | ${procurement_method_type} = get from dictionary by keys ${data} procurementMethodType |
39 | 64 | run keyword if condition is not none ${procurement_method_type} select from visible list by value ${tender_form_procurement_method_type_input_locator} ${procurement_method_type} |
40 | - wait until page does not contain element ${button_refresh_element} | |
65 | + wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
41 | 66 | |
42 | 67 | ${lots} = get from dictionary by keys ${data} lots |
43 | 68 | run keyword if condition is not none ${lots} Run Keyword And Ignore Error Click Element ${tender_multilot_locator} |
... | ... | @@ -84,6 +109,18 @@ fill tender general info |
84 | 109 | run keyword if condition is not none ${funding_kind} select from visible list by value ${tender_form_general_funding_kind_input_locator} ${funding_kind} |
85 | 110 | ${nbu_discount_rate} = get from dictionary by keys ${data} NBUdiscountRate |
86 | 111 | run keyword if condition is not none ${nbu_discount_rate} input number to exist visible input ${tender_form_general_nbu_discount_rate_input_locator} ${nbu_discount_rate} |
112 | +#closeframework | |
113 | + ${max_awards_count} = get from dictionary by keys ${data} maxAwardsCount | |
114 | + run keyword if condition is not none ${max_awards_count} input text to exist visible input ${tender_form_general_max_awards_count_input_locator} ${max_awards_count} | |
115 | + ${agreement_duration_years} = get from dictionary by keys ${data} agreementDuration | |
116 | + ${agreement_duration_years1}= Run keyword If '${agreement_duration_years}' != '${None}' split_agreementDuration ${agreement_duration_years} year | |
117 | + run keyword if condition is not none ${agreement_duration_years} select from visible list by value ${tender_form_general_agreement_duration_years_input_locator} ${agreement_duration_years1} | |
118 | + ${agreement_duration_months} = get from dictionary by keys ${data} agreementDuration | |
119 | + ${agreement_duration_months1}= Run keyword If '${agreement_duration_months}' != '${None}' split_agreementDuration ${agreement_duration_months} month | |
120 | + run keyword if condition is not none ${agreement_duration_months} select from visible list by value ${tender_form_general_agreement_duration_months_input_locator} ${agreement_duration_months1} | |
121 | + ${agreement_duration_days} = get from dictionary by keys ${data} agreementDuration | |
122 | + ${agreement_duration_days1}= Run keyword If '${agreement_duration_days}' != '${None}' split_agreementDuration ${agreement_duration_years} day | |
123 | + run keyword if condition is not none ${agreement_duration_days} select from visible list by value ${tender_form_general_agreement_duration_days_input_locator} ${agreement_duration_days1} | |
87 | 124 | submit current visible popup |
88 | 125 | |
89 | 126 | fill tender form items |
... | ... | @@ -125,7 +162,7 @@ fill tender form milestones |
125 | 162 | wait until popup is visible |
126 | 163 | :FOR ${milestone_attributes} IN @{milestone_attributes_array} |
127 | 164 | \ click visible element ${milestone_form_popup_add_btn_locator} |
128 | - \ wait until page does not contain element ${button_refresh_element} | |
165 | + \ wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
129 | 166 | \ fill milestone form in opened popup ${milestone_attributes} |
130 | 167 | submit current visible popup |
131 | 168 | |
... | ... | @@ -154,7 +191,7 @@ fill tender form features |
154 | 191 | wait until popup is visible |
155 | 192 | :FOR ${feature_attributes} IN @{feature_attributes_array} |
156 | 193 | \ click visible element ${tender_form_features_panel_edit_btn_locator} |
157 | - \ wait until page does not contain element ${button_refresh_element} | |
194 | + \ wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
158 | 195 | \ fill feature form in opened popup ${feature_attributes} |
159 | 196 | submit current visible popup |
160 | 197 | |
... | ... | @@ -166,11 +203,16 @@ fill feature form in opened popup |
166 | 203 | run keyword if condition is not none ${title} input text to exist visible input ${feature_form_popup_title_input_locator} ${title} |
167 | 204 | ${description} = get from dictionary by keys ${data} description |
168 | 205 | run keyword if condition is not none ${description} input text to exist visible input ${feature_form_popup_description_input_locator} ${description} |
206 | + ${title_en} = get from dictionary by keys ${data} title_en | |
207 | + run keyword if condition is not none ${title_en} input text to exist visible input ${feature_form_popup_title_en_input_locator} ${title_en} | |
208 | + ${description_en} = get from dictionary by keys ${data} description | |
209 | + run keyword if condition is not none ${description_en} input text to exist visible input ${feature_form_popup_description_en_input_locator} ${description_en} | |
169 | 210 | ${options} = Get From Dictionary ${data} enum |
170 | 211 | ${count} = Get Length ${options} |
171 | 212 | ${ex}= Evaluate ${count} - 1 |
172 | 213 | : FOR ${INDEX} IN RANGE 0 ${count} |
173 | 214 | \ run keyword if condition is not none ${options[${INDEX}].title} input text to exist visible input ${feature_form_popup_enum_title_input_locator} ${options[${INDEX}].title} |
215 | +# \ run keyword if condition is not none ${options[${INDEX}].title_en} input text to exist visible input ${feature_form_popup_enum_title_en_input_locator} ${options[${INDEX}].title_en} | |
174 | 216 | \ ${value} = convert_float_to_string ${options[${INDEX}].value} |
175 | 217 | \ ${value} = Convert To Number ${value} |
176 | 218 | \ ${value} = multiply_hundred ${value} |
... | ... | @@ -178,7 +220,7 @@ fill feature form in opened popup |
178 | 220 | \ run keyword if condition is not none ${options[${INDEX}].value} input text to exist visible input ${feature_form_popup_enum_value_input_locator} ${value} |
179 | 221 | \ Continue For Loop If '${INDEX}' == '${ex}' |
180 | 222 | \ Run Keyword If ${count} != 1 click visible element ${feature_form_popup_add-enums_btn_locator} |
181 | - \ wait until page does not contain element ${button_refresh_element} | |
223 | + \ wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
182 | 224 | |
183 | 225 | fill tender form lots |
184 | 226 | [Arguments] ${lot_attributes_array} |
... | ... | @@ -228,8 +270,8 @@ fill tender required documents |
228 | 270 | |
229 | 271 | ${file_path} ${file_name} ${file_content} = create_fake_doc |
230 | 272 | click visible element ${tender_form_general_panel_add_document_btn_locator} |
231 | - choose file ${add_file_to_form} ${file_path} | |
232 | - wait until page does not contain element ${button_refresh_element} | |
273 | + choose file ${add_file_to_form_locator} ${file_path} | |
274 | + wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
233 | 275 | submit current visible popup |
234 | 276 | |
235 | 277 | open tender search form |
... | ... | @@ -239,5 +281,182 @@ open tender search form |
239 | 281 | |
240 | 282 | get tender field value by name |
241 | 283 | [Arguments] ${key} |
242 | - [Documentation] Отримати інформацію із тендера, користуючись ідентіфікатором плану та назвою поля ${key}. | |
284 | + [Documentation] Отримати інформацію із тендера, користуючись ідентіфікатором тендеру та назвою поля ${key}. | |
285 | + | |
286 | + | |
287 | +save tender form and wait synchronization | |
288 | + [Documentation] натискає кнопку "Зберегти" і чекає синхронізації тендеру | |
289 | + | |
290 | + submit form and check result ${tender_form_submit_btn_locator} ${tender_form_submit_success_msg} ${tender_created_checker_element_locator} | |
291 | + wait until page does not contain element with reloading ${tender_sync_element_locator} | |
292 | + | |
293 | +add document in tender | |
294 | + [Arguments] ${filepath} | |
295 | + [Documentation] Завантажити документ, який знаходиться по шляху filepath. | |
296 | + | |
297 | + click visible element ${tender_form_general_panel_edit_add_document_btn_locator} | |
298 | + choose file ${add_file_to_form_locator} ${filepath} | |
299 | + wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
300 | + submit current visible popup | |
301 | + | |
302 | +add document in lot | |
303 | + [Arguments] ${filepath} ${lot_id} | |
304 | + [Documentation] Завантажити в лот (з ідентіфікатором ${lot_id}) документ, який знаходиться по шляху filepath. | |
305 | + | |
306 | + ${open_form_add_doc_lot_btn_locator} = replace string ${tender_form_lot_panel_add_document_btn_locator_tpl} %lot_id% ${lot_id} | |
307 | + click visible element ${open_form_add_doc_lot_btn_locator} | |
308 | + choose file ${add_file_to_form_locator} ${filepath} | |
309 | + wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
310 | + submit current visible popup | |
311 | + | |
312 | +Задати запитання | |
313 | + [Arguments] ${username} ${tender_uaid} ${type} ${type_id} ${question} | |
314 | + [Documentation] Створити запитання з question в описі для тендера tender_uaid. | |
315 | +# run keyword and ignore error save tender form and wait synchronization | |
316 | + click visible element ${question_form_create_question_btn_locator} | |
317 | + wait until popup is visible | |
318 | + input text to exist visible input ${question_form_open_form_answer_input_locator} ${answer_data.data.answer} | |
319 | + Run Keyword If '${type}' == 'tender' Select From List By Value ${question_form_create_questionform_related_of_input_locator} Закупівля | |
320 | + Run Keyword If '${type}' == 'lot' Select From List By Value ${question_form_create_questionform_related_of_input_locator} Лот | |
321 | + Run Keyword If '${type}' == 'lot' Click Element ${question_form_create_questionform_related_lot_input_locator} | |
322 | + ${question_form_create_questionform_related_lot_input_locator} = Run Keyword If '${type}' == 'lot' replace string ${question_form_create_questionform_related_lot_input_locator_tpl} %type_id% ${type_id} | |
323 | + Run Keyword If '${type}' == 'lot' Click Element ${question_form_create_questionform_related_lot_input_locator} | |
324 | + Run Keyword If '${type}' == 'item' Select From List By Value ${question_form_create_questionform_related_of_input_locator} Предмет закупівлі | |
325 | + Run Keyword If '${type}' == 'item' Click Element ${question_form_create_questionform_related_item_input_locator} | |
326 | + ${question_form_create_questionform_related_item_input_locator} = Run Keyword If '${type}' == 'item' replace string ${question_form_create_questionform_related_item_input_locator_tpl} %type_id% ${type_id} | |
327 | + Run Keyword If '${type}' == 'item' Click Element ${question_questionform_related_item_input_locator} | |
328 | + input text to exist visible input ${question_form_create_questionform_title_input_locator} ${question.data.title} | |
329 | + input text to exist visible input ${question_form_create_questionform_description_input_locator} ${question.data.description} | |
330 | + click visible element ${question_form_answer_submit_btn_locator} | |
331 | + wait until page does not contain element with reloading ${tender_sync_element_locator} | |
332 | + | |
333 | +answer question | |
334 | + [Arguments] ${answer_data} ${question_id} | |
335 | + [Documentation] Дати відповідь answer_data на запитання з question_id в описі для тендера tender_uaid. | |
336 | + | |
337 | + run keyword and ignore error save tender form and wait synchronization | |
338 | + click visible element ${question_form_open_btn_locator} | |
339 | + ${question_open_form_answer_locator} = replace string ${question_open_form_answer_btn_locator_tpl} %title% ${question_id} | |
340 | + wait until page contains element with reloading ${question_open_form_answer_locator} | |
341 | + ${question_form_open_form_answer_btn_locator} = replace string ${question_form_open_form_answer_btn_locator_tpl} %title% ${question_id} | |
342 | + click visible element ${question_form_open_form_answer_btn_locator} | |
343 | + wait until popup is visible | |
344 | + input text to exist visible input ${question_form_open_form_answer_input_locator} ${answer_data.data.answer} | |
345 | +# click visible element ${question_form_answer_submit_btn_locator} | |
346 | + submit form and check result ${question_form_answer_submit_btn_locator} ${question_form_submit_success_msg} ${tender_created_checker_element_locator} | |
347 | + | |
348 | +Створити вимогу | |
349 | + [Arguments] ${username} ${tender_uaid} ${type} ${type_id} ${claim} ${doc_name} | |
350 | + [Documentation] Створити вимогу з claim в описі для тендера tender_uaid. | |
351 | + | |
352 | + click visible element ${claim_form_open_btn_locator} | |
353 | + wait until popup is visible | |
354 | + input text to exist visible input ${claim_form_complaintform_title_input_locator} ${claim.data.title} | |
355 | + input text to exist visible input ${claim_form_complaintform_description_input_locator} ${claim.data.description} | |
356 | + Run Keyword And Ignore Error Run Keyword If '${type}' == 'tender' Select From List By Label ${claim_form_complaintform_related_of_input_locator} Закупівля | |
357 | + Run Keyword And Ignore Error Run Keyword If '${type}' == 'lot' Select From List By Label ${claim_form_complaintform_related_of_input_locator} Лот | |
358 | + Run Keyword And Ignore Error Run Keyword If '${type}' == 'lot' Click Element ${claim_form_complaintform_related_lot_input_locator} | |
359 | + ${claim_form_complaintform_related_lot_select_locator} = Run Keyword If '${type}' == 'lot' replace string ${claim_form_complaintform_related_lot_input_locator_tpl} %type_id% ${type_id} | |
360 | + Run Keyword And Ignore Error Run Keyword If '${type}' == 'lot' Click Element ${claim_form_complaintform_related_lot_select_locator} | |
361 | + Run Keyword And Ignore Error Select From List By Label ${claim_form_complaintform_complaintform_type_input_locator} Вимога | |
362 | + Run Keyword If '${doc_name}' != 'null' click visible element ${claim_form_complaintform_document_btn_locator} | |
363 | + Run Keyword If '${doc_name}' != 'null' choose file ${add_file_to_form_locator} ${doc_name} | |
364 | + Run Keyword If '${doc_name}' != 'null' wait until page does not contain element ${popup_dynamic_form_loading_element_locator} | |
365 | +# Run Keyword If '${doc_name}' != 'null' submit current visible popup | |
366 | + submit form and check result ${claim_form_complaintform_submit_btn_locator} ${tender_form_submit_success_msg} ${tender_created_checker_element_locator} | |
367 | +# Функция ожидания claim_uaid_text_locator соответствующей вимоги | |
368 | + click visible element ${claim_form_open_btn_locator} | |
369 | + ${return_value}= Get Element Attribute ${claim_uaid_text_locator} | |
370 | + ${return_value}= Convert To String ${return_value} | |
371 | + [return] ${return_value} | |
372 | + | |
373 | + | |
374 | +fill bid form | |
375 | + [Arguments] ${tender_uaid} ${bid} ${lots_ids} ${features_ids} | |
376 | + [Documentation] Подати цінову пропозицію bid для тендера tender_uaid на лоти lots_ids (якщо lots_ids != None) з неціновими показниками features_ids (якщо features_ids != None). | |
377 | + | |
378 | + click visible element ${bid_form_open_btn_locator} | |
379 | + wait until popup is visible | |
380 | + ${value} = get from dictionary by keys ${bid} value amount | |
381 | + ${amount} = run keyword if condition is not none ${value} convert_float_to_string ${bid.data.value.amount} | |
382 | + run keyword if condition is not none ${value} input number to exist visible input ${bid_form_value_amount_input_locator} ${amount} | |
383 | + ${value_yearly_payments_percentage} = get from dictionary by keys ${bid} value yearlyPaymentsPercentage | |
384 | + ${yearly_payments_percentage} = run keyword if condition is not none ${value_yearly_payments_percentage} convert_float_to_string ${bid.data.value.yearlyPaymentsPercentage} | |
385 | + run keyword if condition is not none ${value} input number5 to exist visible input ${bid_form_value_yearly_payments_percentage_input_locator} ${yearly_payments_percentage} | |
386 | + ${contract_duration_years} = get from dictionary by keys ${bid} value contractDuration years | |
387 | + run keyword if condition is not none ${contract_duration_years} input text to exist visible input ${bid_form_value_contract_duration_years_input_locator} ${bid.data.value.contractDuration.years} | |
388 | + ${contract_duration_days} = get from dictionary by keys ${bid} value contractDuration days | |
389 | + run keyword if condition is not none ${contract_duration_days} input text to exist visible input ${bid_form_value_contract_duration_days_input_locator} ${bid.data.value.contractDuration.days} | |
390 | + ${annual_costs_reduction} = get from dictionary by keys ${bid} value annualCostsReduction | |
391 | + run keyword if condition is not none ${annual_costs_reduction} Подати цінову пропозицію Esco AnnualCostsReduction ${value.annualCostsReduction} | |
392 | +# ${lots} = get from dictionary by keys ${data} lots | |
393 | + run keyword if condition is not none ${lots_ids} fill bid form lots ${bid} | |
394 | +# run keyword if condition is none ${lots_ids} fill bid form whithout lots ${bid} | |
395 | +# ${features} = get from dictionary by keys ${data} features | |
396 | +# run keyword if condition is not none ${features_ids} fill bid form features ${bid} ${tender_form_general_panel_add_feature_btn_locator} | |
397 | + fill bid required documents_all | |
398 | + submit form and check result ${bid_form_submit_btn_locator} ${bid_form_submit_success_msg} ${tender_created_checker_element_locator} | |
399 | + | |
400 | +fill bid form lots | |
401 | + [Arguments] ${bid} ${lots_ids} ${features_ids} | |
402 | + [Documentation] Заповнити лотову цінову пропозицію bid для тендера tender_uaid на лоти lots_ids з неціновими показниками features_ids (якщо features_ids != None). | |
403 | + | |
404 | + ${lots} = get from dictionary by keys ${bid} lotValues | |
405 | + ${lots_length} = Get Length ${lots} | |
406 | + : FOR ${INDEX} IN RANGE 0 ${lots_length} | |
407 | + \ ${amount} = convert_float_to_string ${bid.data.value.amount} | |
408 | + \ run keyword and ignore error input number to exist visible input ${bid_form_value_amount_input_locator} ${amount} | |
409 | + \ ${self_qualified} = get from dictionary by keys ${bid} selfQualified | |
410 | + \ run keyword and ignore error ${self_qualified} click visible element ${bid_form_value_self_qualified_input_locator} | |
411 | + \ ${self_eligible} = get from dictionary by keys ${bid} selfEligible | |
412 | + \ run keyword if condition is not none ${self_eligible} click visible element ${bid_form_value_self_eligible_input_locator} | |
413 | + \ run keyword if condition is not none ${features_ids} fill bid form features ${bid.data.parameters} | |
414 | + | |
415 | +fill bid form features | |
416 | + [Arguments] ${bid_parameters} | |
417 | + [Documentation] Заповнити нецінові показники цінової пропозиції. | |
418 | + | |
419 | + ${features_length} = Get Length ${bid_parameters} | |
420 | + : FOR ${INDEX} IN RANGE 0 ${features_length} | |
421 | + \ ${bid_form_feature_input_locator} replace string ${bid_form_feature_input_locator_tpl} %title% ${features[${INDEX}]['code']} | |
422 | + \ Run Keyword And Ignore Error click visible element ${bid_form_feature_input_locator} | |
423 | + \ Run Keyword And Ignore Error Select From List By Label ${bid_form_feature_input_locator} ${features[${INDEX}]['value']} | |
424 | + | |
425 | +Подати цінову пропозицію Esco AnnualCostsReduction | |
426 | + [Arguments] ${values} | |
427 | + [Documentation] Заповнити цінову пропозицію Esco (параметр AnnualCostsReduction). | |
428 | + | |
429 | + ${input_index }= set variable 1 | |
430 | + : FOR ${value} IN @{values} | |
431 | + \ ${bid_form_value_annual_costs_reduction_input_locator} replace string ${bid_form_value_annual_costs_reduction_input_locator_tpl} %index% ${input_index} | |
432 | + \ input float ${bid_form_value_annual_costs_reduction_input_locator} ${value} | |
433 | + \ ${input_index} = evaluate ${input_index} + 1 | |
434 | + | |
435 | +fill bid required documents_all | |
436 | + [Arguments] ${values} | |
437 | + [Documentation] Додати фейковий документ до цінової пропозиції при створенні. | |
438 | + | |
439 | + ${file_path} ${file_name} ${file_content} = create_fake_doc | |
440 | + click visible element ${bid_form_add_document_all_btn_locator} | |
441 | + choose file ${add_file_to_form_locator} ${file_path} | |
442 | + wait until element is visible ${bid_form_add_document_type_input_locator} ${waiting_timeout} ${waiting_error} | |
443 | +# submit current visible popup | |
444 | + Run Keyword And Ignore Error Select From List By Value ${bid_form_add_document_type_input_locator} qualificationDocuments | |
445 | + click visible element ${bid_form_add_document_description_btn_locator} | |
446 | + wait until element is visible ${bid_form_add_document_description_input_locator} ${waiting_timeout} ${waiting_error} | |
447 | + input text to exist visible input ${bid_form_add_document_description_input_locator} test2 | |
448 | + click visible element ${bid_form_add_document_close_description_btn_locator} | |
449 | + | |
450 | +fill bid form edit | |
451 | + [Arguments] ${tender_uaid} ${fieldname} ${fieldvalue} | |
452 | + [Documentation] Змінити поле fieldname на fieldvalue цінової пропозиції користувача username для тендера tender_uaid. | |
453 | + | |
454 | + click visible element ${bid_form_open_btn_locator} | |
455 | + wait until popup is visible | |
456 | + Run Keyword If '${fieldname}' == 'lotValues[0].value.amount' and '${mode}' != 'esco' Run Keywords | |
457 | + ... ${amount} = convert_float_to_string ${fieldvalue} | |
458 | + ... input number to exist visible input ${bid_form_value_amount_input_locator} ${amount} | |
459 | + submit form and check result ${bid_form_submit_btn_locator} ${bid_form_submit_edit_success_msg} ${tender_created_checker_element_locator} | |
460 | + | |
461 | + | |
243 | 462 | ... | ... |
... | ... | @@ -92,7 +92,7 @@ ${plan_search_form_query_input_locator} = jquery=#plan |
92 | 92 | ${plan_search_form_result_locator_tpl} = jquery=#plan-list .lots__item .lot__characteristic li:contains(%query%) |
93 | 93 | |
94 | 94 | # tender form |
95 | -${tender_form_submit_success_msg} = Закупівля створена, дочекайтесь опублікування на сайті уповноваженого органу. | |
95 | +${tender_form_submit_success_msg} = дочекайтесь опублікування на сайті уповноваженого органу. | |
96 | 96 | ${tender_form_locator} = id=tender-form |
97 | 97 | ${tender_form_procurement_method_type_input_locator} = jquery=[id$="form-procurement_method_type"] |
98 | 98 | ${tender_multilot_locator} = jquery=[id$="form-is_multilot"] |
... | ... | @@ -115,17 +115,26 @@ ${tender_tender_quick_mode_locator} = jquery=[id$= |
115 | 115 | #esco |
116 | 116 | ${tender_form_general_funding_kind_input_locator} id=tenderescoform-funding_kind |
117 | 117 | ${tender_form_general_nbu_discount_rate_input_locator} id=tenderescoform-nbu_discount_rate |
118 | +#closeframework | |
119 | +${tender_form_general_max_awards_count_input_locator} = jquery=[id$="form-max_awards_count"] | |
120 | +${tender_form_general_agreement_duration_years_input_locator} = jquery=[id$="form-agreement_duration_years"] | |
121 | +${tender_form_general_agreement_duration_months_input_locator} = jquery=[id$="form-agreement_duration_months"] | |
122 | +${tender_form_general_agreement_duration_days_input_locator} = jquery=[id$="form-agreement_duration_days"] | |
118 | 123 | |
119 | 124 | ${tender_form_general_panel_add_feature_btn_locator} = jquery=#collapseGeneral .btn[data-attribute="features"] |
120 | 125 | ${tender_form_features_panel_edit_btn_locator} = jquery=.fancybox-content [href$="#add-features"] |
121 | 126 | ${feature_form_popup_title_input_locator} = jquery=.fancybox-is-open .tab-content:first > .tab-pane.active:first [id$="-title"]:first |
122 | 127 | ${feature_form_popup_description_input_locator} = jquery=.fancybox-is-open .tab-content:first > .tab-pane.active:first [id$="-description"]:first |
128 | +${feature_form_popup_title_en_input_locator} = jquery=.fancybox-is-open .tab-content:first > .tab-pane.active:first [id$="-title_en"]:first | |
129 | +${feature_form_popup_description_en_input_locator} = jquery=.fancybox-is-open .tab-content:first > .tab-pane.active:first [id$="-description_en"]:first | |
123 | 130 | ${feature_form_popup_value_input_locator} = jquery=[id$="-value"] |
124 | 131 | ${feature_form_popup_add-enums_btn_locator} = jquery=.fancybox-is-open .enums-dynamic-forms-wrapper .btn-add a[href$="#add-enums"] |
125 | 132 | ${feature_form_popup_enum_title_input_locator} = jquery=.fancybox-is-open .enums-dynamic-forms-wrapper .tab-content:first > .tab-pane.active input[id$="-title"] |
133 | +${feature_form_popup_enum_title_en_input_locator} = jquery=.fancybox-is-open .enums-dynamic-forms-wrapper .tab-content:first > .tab-pane.active input[id$="-title_en"] | |
126 | 134 | ${feature_form_popup_enum_value_input_locator} = jquery=.fancybox-is-open .enums-dynamic-forms-wrapper .tab-content:first > .tab-pane.active input[id$="-value"] |
127 | 135 | |
128 | 136 | ${tender_form_general_panel_add_document_btn_locator} = jquery=#collapseGeneral .btn[data-attribute="documents"] |
137 | +${tender_form_general_panel_edit_add_document_btn_locator} = jquery=div[data-form="general-form-popup"] .js-form-hidden-popup-panel:last a.btn-update | |
129 | 138 | |
130 | 139 | #${tender_form_item_add_edit_btn_locator} = jquery=.js-form-group-popup-panel .panel-heading .actions-wrapper .js-form-popup-add |
131 | 140 | #последняя кнопка “Додати” для номенклатуры (для лотовой и безлотовой) |
... | ... | @@ -155,6 +164,8 @@ ${lot_form_popup_minimalstep_amount_input_locator} = jquery=.fanc |
155 | 164 | ${lot_form_popup_min_step_percentage_amount_input_locator} = jquery=.fancybox-is-open [id$="-min_step_percentage"] |
156 | 165 | |
157 | 166 | ${tender_form_lot_panel_add_feature_btn_locator} = jquery=#Lots .js-form-popup-panel-list:first > .js-form-popup-panel-item:last .actions-wrapper .btn[data-attribute="features"] |
167 | +${tender_form_lot_panel_add_document_btn_locator_tpl} = jquery=#Lots #collapseLots div[data-title*="%lot_id%"] .actions-wrapper a.js-btn-add-form-popup-panel:last' | |
168 | +${tender_form_lot_panel_edit_add_document_btn_locator} = jquery=#Lots #collapseLots div[data-title*="%lot_id%"] .js-form-hidden-popup-panel:last .actions-wrapper a.js-form-popup-update | |
158 | 169 | |
159 | 170 | #${tender_form_milestones_percentage_locator} = jquery=.js-item.tab-pane.active [id$="-percentage"] |
160 | 171 | #${tender_form_milestones_code_locator} = jquery=.tab-pane.active [id$="-code"] |
... | ... | @@ -170,12 +181,68 @@ ${tender_created_checker_element_locator} = id=tender-pa |
170 | 181 | ${tender_view_checker_element_locator} = id=tender-general-info |
171 | 182 | ${tender_sync_element_locator} = jquery=#aside-part-pjax .status-label .fa-refresh |
172 | 183 | ${tender_uaid_text_locator} = jquery=#tender-general-info .tender-id .value |
184 | +${tender_edit_btn_locator} = jquery=#aside-part-pjax a[href*='tender/update'] | |
173 | 185 | |
174 | -${button_refresh_element} jquery=.fancybox-is-open .btn-add .fa-spin | |
186 | +#елемент проверки загрузки формы в попапе | |
187 | +${popup_dynamic_form_loading_element_locator} jquery=.fancybox-is-open .btn-add .fa-spin | |
175 | 188 | #${add_file_to_form} xpath=//input[@type='file'] |
176 | -${add_file_to_form} jquery=.fancybox-is-open input[type$='file'] | |
189 | +${add_file_to_form_locator} jquery=.fancybox-is-open input[type$='file'] | |
177 | 190 | |
178 | 191 | # tender index + search |
179 | 192 | ${tender_search_form_locator} = id=tender-filter-form |
180 | 193 | ${tender_search_form_query_input_locator} = jquery=#tender-filter-form .dynamic-search-query input |
181 | 194 | ${tender_search_form_result_locator_tpl} = jquery=#tender-list .lots__item .lot__characteristic li:contains(%query%) |
195 | + | |
196 | +#question | |
197 | +${question_form_open_btn_locator} jquery=#aside-part-pjax a[href*="/tender/questions"] | |
198 | +${question_open_form_answer_btn_locator_tpl} jquery=#tender-question-list .js-item div[data-title*="%title%"] | |
199 | +${question_form_open_form_answer_btn_locator_tpl} jquery=#tender-question-list .js-item div[data-title*="%title%"] .btn.btn-default | |
200 | +${question_form_open_form_answer_input_locator} jquery=.fancybox-is-open .fancybox-content #tender-question-answer-form #questionanswerform-answer | |
201 | +${question_form_answer_submit_btn_locator} jquery=.fancybox-is-open .fancybox-content #tender-question-answer-form .js-submit-btn | |
202 | +${plan_form_submit_success_msg} = відповідь на питання надана | |
203 | +${question_form_create_question_btn_locator} jquery=.#aside-part-pjax [data-url*="/tender/question-create"] | |
204 | +${question_form_create_questionform_related_of_input_locator} jquery=.fancybox-is-open .fancybox-content #questionform-related_of | |
205 | +${question_form_create_questionform_related_item_input_locator} jquery=.fancybox-is-open .fancybox-content #questionform-related_item | |
206 | +${question_form_create_questionform_related_item_input_locator_tpl} jquery=.fancybox-is-open .fancybox-content #questionform-related_item option:contains("%type_id%") | |
207 | +${question_form_create_questionform_title_input_locator} jquery=.fancybox-is-open .fancybox-content #questionform-title | |
208 | +${question_form_create_questionform_description_input_locator} jquery=.fancybox-is-open .fancybox-content #questionform-description | |
209 | +${question_form_submit_success_msg} Запитання створене. | |
210 | +${question_form_create_questionform_related_lot_input_locator} jquery=.fancybox-is-open .fancybox-content #questionform-related_lot | |
211 | +${question_form_create_questionform_related_lot_input_locator} jquery=.fancybox-is-open .fancybox-content #questionform-related_lot | |
212 | +${question_form_create_questionform_related_lot_input_locator_tpl} jquery=.fancybox-is-open .fancybox-content #questionform-related_lot option:contains("%type_id%") | |
213 | + | |
214 | +#claim | |
215 | +${claim_form_open_btn_locator} jquery=#aside-part-pjax a[href*="/tender/complaints"] | |
216 | +${claim_form_complaintform_title_input_locator} jquery=.fancybox-is-open .fancybox-content input#complaintform-title | |
217 | +${claim_form_complaintform_description_input_locator} jquery=.fancybox-is-open .fancybox-content input#complaintform-description | |
218 | +${claim_form_complaintform_related_of_input_locator} jquery=.fancybox-is-open .fancybox-content #complaintform-related_of | |
219 | +${claim_form_complaintform_related_lot_input_locator} jquery=.fancybox-is-open .fancybox-content #complaintform-related_lot | |
220 | +${{claim_form_complaintform_related_item_input_locator_tpl} jquery=.fancybox-is-open .fancybox-content #complaintform-related_lot option:contains("%type_id%") | |
221 | +${claim_form_complaintform_complaintform_type_input_locator} jquery=.fancybox-is-open .fancybox-content #complaintform-type | |
222 | +${claim_form_complaintform_document_btn_locator} jquery=.fancybox-is-open .fancybox-content a[data-url*="/tender/get-complaint-document"] | |
223 | +${claim_form_complaintform_submit_btn_locator} jquery=.fancybox-is-open .fancybox-content a[href*="/tender/complaints"] | |
224 | +${claim_uaid_text_locator} = jquery=#tender-complaint-list div.item.js-item:last .complaint-id span.value | |
225 | + | |
226 | +#bids | |
227 | +${bid_form_open_btn_locator} jquery=#aside-part-pjax a[href*="/tender/bid"] | |
228 | +${bid_form_submit_success_msg} Пропозиція створена | |
229 | +${bid_form_submit_edit_success_msg} Пропозиція відредагована | |
230 | +${bid_form_feature_input_locator_tpl} jquery=.fancybox-is-open .fancybox-content select[id*="%title%-enum"] | |
231 | +${bid_form_value_amount_input_locator} jquery=.fancybox-is-open .fancybox-content input[id*="-value_amount"] | |
232 | +${bid_form_value_subcontracting_details_input_locator} jquery=.fancybox-is-open .fancybox-content textarea[id*="-subcontracting_details"] | |
233 | +${bid_form_value_self_eligible_input_locator} jquery=.fancybox-is-open .fancybox-content input[id*="-self_eligible"] | |
234 | +${bid_form_value_self_qualified_input_locator} jquery=.fancybox-is-open .fancybox-content input[id*="-self_qualified"] | |
235 | +${bid_form_value_yearly_payments_percentage_input_locator} jquery=.fancybox-is-open .fancybox-content input[id*="-yearly_payments_percentage"] | |
236 | +${bid_form_value_contract_duration_years_input_locator} jquery=.fancybox-is-open .fancybox-content input[id*="-contract_duration_years"] | |
237 | +${bid_form_value_contract_duration_days_input_locator} jquery=.fancybox-is-open .fancybox-content input[id*="-contract_duration_days"] | |
238 | +${bid_form_value_annual_costs_reduction_input_locator_tpl} jquery=.fancybox-is-open .fancybox-content input[id*="-annual_costs_reduction_%index%"] | |
239 | + | |
240 | +${bid_form_add_document_all_btn_locator} jquery=.fancybox-is-open .fancybox-content .field-bidform-documents input[type$="file"] | |
241 | +${bid_form_add_document_type_input_locator} jquery=.fancybox-is-open .fancybox-content .field-bidform-documents select[id*="-document_type"] | |
242 | +${bid_form_add_document_description_btn_locator} jquery=.fancybox-is-open .fancybox-content .field-bidform-documents [href$="#edit"] | |
243 | +${bid_form_add_document_description_input_locator} jquery=.fancybox-is-open .fancybox-content .field-bidform-documents .popover.fade.top.in textarea[id*="-description"].form-control | |
244 | +${bid_form_add_document_close_description_btn_locator} jquery=.fancybox-is-open .fancybox-content .field-bidform-documents .popover.fade.top.in [href$="#close"] | |
245 | +${bid_form_submit_btn_locator} jquery=.fancybox-is-open .fancybox-content button.btn.btn-success | |
246 | + | |
247 | + | |
248 | + | ... | ... |
Please
register
or
login
to post a comment