{"id":376,"date":"2020-02-24T11:17:23","date_gmt":"2020-02-24T11:17:23","guid":{"rendered":"http:\/\/bossakov.eu\/wpdemo\/?page_id=376"},"modified":"2024-07-30T21:06:03","modified_gmt":"2024-07-30T21:06:03","slug":"booking-with-seasonal-prices","status":"publish","type":"page","link":"https:\/\/bossakov.eu\/wpdemo\/pvb-cf7-calculator-pro\/booking-with-seasonal-prices\/","title":{"rendered":"Booking with seasonal prices"},"content":{"rendered":"<p>This example uses custom PHP code to implement more complex booking logic.<\/p>\n\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f374-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"374\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/wpdemo\/wp-json\/wp\/v2\/pages\/376#wpcf7-f374-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"374\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.7\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f374-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7cf_hidden_group_fields\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_hidden_groups\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_visible_groups\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_repeaters\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_steps\" value=\"{}\" \/><input type=\"hidden\" name=\"_wpcf7cf_options\" value=\"{&quot;form_id&quot;:374,&quot;conditions&quot;:[],&quot;settings&quot;:{&quot;animation&quot;:&quot;yes&quot;,&quot;animation_intime&quot;:200,&quot;animation_outtime&quot;:200,&quot;conditions_ui&quot;:&quot;normal&quot;,&quot;notice_dismissed&quot;:true,&quot;repeater_remove_button&quot;:&quot;bottom&quot;,&quot;wpcf7cf_settings_saved&quot;:1}}\" \/>\n<\/fieldset>\n<p><label>Check in<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"checkin\"><input class=\"wpcf7-form-control wpcf7-date wpcf7-validates-as-date\" aria-invalid=\"false\" value=\"\" type=\"date\" name=\"checkin\" \/><\/span><br \/>\n<\/label><br \/>\n<label>Check out<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"checkout\"><input class=\"wpcf7-form-control wpcf7-date wpcf7-validates-as-date\" aria-invalid=\"false\" value=\"\" type=\"date\" name=\"checkout\" \/><\/span><br \/>\n<\/label>\n<\/p>\n<p><input class=\"wpcf7-form-control wpcf7-calculate_button cf7-calculate_button\" type=\"button\" value=\"Calculate\" \/>\n<\/p>\n<p>Price estimate: <span id=\"booking_total\">$ <span class=\"wpcf7-form-control-wrap price\"><input size=\"40\" class=\"wpcf7-form-control wpcf7-calculation cf7-calculation\" readonly=\"readonly\" aria-invalid=\"false\" value=\"0\" type=\"text\" name=\"price\" \/><\/span><\/span>\n<\/p><input type=\"hidden\" name=\"_pvb_ajax_calc_nonce\" value=\"5a80c6b9a0\"><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n\n<h2>Source code for this form:<\/h2>\n<pre>&lt;label&gt;Check in\r\n[date checkin]\r\n&lt;\/label&gt;\r\n&lt;label&gt;Check out\r\n[date checkout]\r\n&lt;\/label&gt;\r\n\r\n[calculate_button calculate_button-1 \"Calculate\"]\r\n\r\nPrice estimate: &lt;span id=\"booking_total\"&gt;$ [calculation price min:0 \"fn_php(\r\nuse PVBCF7CalculatorPro\\lib\\PVBCF7Calculator;\r\n$prices = array(\r\n    array('start' =&gt; '01-01', 'end' =&gt; '02-10', 'price' =&gt; '10'),\r\n    array('start' =&gt; '02-11', 'end' =&gt; '03-20', 'price' =&gt; '11'),\r\n    array('start' =&gt; '03-21', 'end' =&gt; '04-30', 'price' =&gt; '12'),\r\n    array('start' =&gt; '05-01', 'end' =&gt; '06-10', 'price' =&gt; '13'),\r\n    array('start' =&gt; '06-11', 'end' =&gt; '07-20', 'price' =&gt; '14'),\r\n    array('start' =&gt; '07-21', 'end' =&gt; '08-31', 'price' =&gt; '15'),\r\n    array('start' =&gt; '09-01', 'end' =&gt; '10-10', 'price' =&gt; '16'),\r\n    array('start' =&gt; '10-11', 'end' =&gt; '11-20', 'price' =&gt; '17'),\r\n    array('start' =&gt; '11-20', 'end' =&gt; '12-31', 'price' =&gt; '18')\r\n);\r\n$booking_start = PVBCF7Calculator::arrayValue($_POST, 'checkin');\r\n$booking_end = PVBCF7Calculator::arrayValue($_POST, 'checkout');\r\nif (empty($booking_start) or empty($booking_end) or strtotime($booking_start) &gt; strtotime($booking_end)) {\r\n    return 0; \/* Invalid dates *\/\r\n}\r\n$total = 0;\r\nfor ($i = strtotime($booking_start); $i &lt;= strtotime($booking_end)-86400; $i += 86400) {\r\n    $year = date('Y', $i);\r\n    $processed_prices = array();\r\n    foreach ($prices as $p) {\r\n        if ($i &gt;= strtotime($year . '-' . PVBCF7Calculator::arrayValue($p, 'start')) &&\r\n            $i &lt;= strtotime($year . '-' . PVBCF7Calculator::arrayValue($p, 'end'))\r\n        ) {\r\n            $total += PVBCF7Calculator::arrayValue($p, 'price');\r\n        }\r\n    }\r\n}\r\nreturn $total;\r\n)\"]&lt;\/span&gt;\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This example uses custom PHP code to implement more complex booking logic. Source code for this form: &lt;label&gt;Check in [date checkin] &lt;\/label&gt; &lt;label&gt;Check out [date checkout] &lt;\/label&gt; [calculate_button calculate_button-1 &#8220;Calculate&#8221;] Price estimate: &lt;span id=&#8221;booking_total&#8221;&gt;$ [calculation price min:0 &#8220;fn_php( use PVBCF7CalculatorPro\\lib\\PVBCF7Calculator; $prices = array( array(&#8216;start&#8217; =&gt; &#8217;01-01&#8242;, &#8216;end&#8217; =&gt; &#8217;02-10&#8242;, &#8216;price&#8217; =&gt; &#8217;10&#8217;), array(&#8216;start&#8217; =&gt; &#8217;02-11&#8242;, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-376","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/pages\/376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/comments?post=376"}],"version-history":[{"count":8,"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/pages\/376\/revisions"}],"predecessor-version":[{"id":597,"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/pages\/376\/revisions\/597"}],"up":[{"embeddable":true,"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/pages\/2"}],"wp:attachment":[{"href":"https:\/\/bossakov.eu\/wpdemo\/wp-json\/wp\/v2\/media?parent=376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}