Changeset 3793045
- Timestamp:
- 11/09/2026 06:29:19 PM (less than one hour ago)
- Location:
- gresquote
- Files:
-
- 71 added
- 10 edited
-
tags/1.0.24 (added)
-
tags/1.0.24/admin (added)
-
tags/1.0.24/admin/accounting-tab.php (added)
-
tags/1.0.24/admin/css (added)
-
tags/1.0.24/admin/css/acceptance-form.css (added)
-
tags/1.0.24/admin/dashboard-tab.php (added)
-
tags/1.0.24/admin/instellingen-abonnement.php (added)
-
tags/1.0.24/admin/instellingen-bedrijf.php (added)
-
tags/1.0.24/admin/instellingen-offerte.php (added)
-
tags/1.0.24/admin/js (added)
-
tags/1.0.24/admin/js/acceptance-form.js (added)
-
tags/1.0.24/admin/my-quotes-page.php (added)
-
tags/1.0.24/assets (added)
-
tags/1.0.24/assets/css (added)
-
tags/1.0.24/assets/css/admin-rules.css (added)
-
tags/1.0.24/assets/css/enrichment.css (added)
-
tags/1.0.24/assets/css/form-preview.css (added)
-
tags/1.0.24/assets/css/groups.css (added)
-
tags/1.0.24/assets/css/wizard-huisstijl.css (added)
-
tags/1.0.24/assets/fonts (added)
-
tags/1.0.24/assets/fonts/LICENSE-Inter.txt (added)
-
tags/1.0.24/assets/fonts/inter-latin-var.woff2 (added)
-
tags/1.0.24/assets/js (added)
-
tags/1.0.24/assets/js/admin-pages.js (added)
-
tags/1.0.24/assets/js/admin-rules.js (added)
-
tags/1.0.24/assets/js/enrichment.js (added)
-
tags/1.0.24/assets/js/groups.js (added)
-
tags/1.0.24/assets/js/instellingen.js (added)
-
tags/1.0.24/assets/js/template-demo.js (added)
-
tags/1.0.24/assets/js/wizard.js (added)
-
tags/1.0.24/docs (added)
-
tags/1.0.24/docs/WEBHOOK_SETUP.md (added)
-
tags/1.0.24/docs/examples (added)
-
tags/1.0.24/docs/examples/schilderwerk.json (added)
-
tags/1.0.24/docs/wpquotepro-api-json-examples.json (added)
-
tags/1.0.24/docs/wpquotepro-wizard-template-schema.md (added)
-
tags/1.0.24/includes (added)
-
tags/1.0.24/includes/adapters (added)
-
tags/1.0.24/includes/adapters/class-wpquotepro-adapter-cf7.php (added)
-
tags/1.0.24/includes/adapters/class-wpquotepro-adapter-gravityforms.php (added)
-
tags/1.0.24/includes/adapters/class-wpquotepro-adapter-internal.php (added)
-
tags/1.0.24/includes/adapters/class-wpquotepro-adapter-ninjaforms.php (added)
-
tags/1.0.24/includes/adapters/class-wpquotepro-adapter-wpforms.php (added)
-
tags/1.0.24/includes/adapters/interface-wpquotepro-form-adapter.php (added)
-
tags/1.0.24/includes/class-wpquotepro-acceptance-api.php (added)
-
tags/1.0.24/includes/class-wpquotepro-acceptance-shortcode.php (added)
-
tags/1.0.24/includes/class-wpquotepro-activation.php (added)
-
tags/1.0.24/includes/class-wpquotepro-admin.php (added)
-
tags/1.0.24/includes/class-wpquotepro-bijlagen.php (added)
-
tags/1.0.24/includes/class-wpquotepro-db.php (added)
-
tags/1.0.24/includes/class-wpquotepro-enrichment.php (added)
-
tags/1.0.24/includes/class-wpquotepro-error-handler.php (added)
-
tags/1.0.24/includes/class-wpquotepro-form-preview.php (added)
-
tags/1.0.24/includes/class-wpquotepro-form-registry.php (added)
-
tags/1.0.24/includes/class-wpquotepro-groups.php (added)
-
tags/1.0.24/includes/class-wpquotepro-health-check.php (added)
-
tags/1.0.24/includes/class-wpquotepro-plugin.php (added)
-
tags/1.0.24/includes/class-wpquotepro-regio.php (added)
-
tags/1.0.24/includes/class-wpquotepro-site-proof.php (added)
-
tags/1.0.24/includes/class-wpquotepro-submission-bridge.php (added)
-
tags/1.0.24/includes/class-wpquotepro-verzendfout.php (added)
-
tags/1.0.24/includes/class-wpquotepro-woocommerce.php (added)
-
tags/1.0.24/includes/wpquotepro-log.php (added)
-
tags/1.0.24/languages (added)
-
tags/1.0.24/languages/gresquote-nl_NL.mo (added)
-
tags/1.0.24/languages/gresquote-nl_NL.po (added)
-
tags/1.0.24/languages/nl_NL.json (added)
-
tags/1.0.24/readme.txt (added)
-
tags/1.0.24/templates (added)
-
tags/1.0.24/templates/README.txt (added)
-
tags/1.0.24/wpquotepro.php (added)
-
trunk/admin/instellingen-offerte.php (modified) (4 diffs)
-
trunk/includes/class-wpquotepro-admin.php (modified) (6 diffs)
-
trunk/includes/class-wpquotepro-db.php (modified) (4 diffs)
-
trunk/includes/class-wpquotepro-regio.php (modified) (1 diff)
-
trunk/includes/class-wpquotepro-submission-bridge.php (modified) (6 diffs)
-
trunk/languages/gresquote-nl_NL.mo (modified) ( previous)
-
trunk/languages/gresquote-nl_NL.po (modified) (3 diffs)
-
trunk/languages/nl_NL.json (modified) (2 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/wpquotepro.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
gresquote/trunk/admin/instellingen-offerte.php
r3792172 r3793045 135 135 <p><?php esc_html_e('For new quotes, the emails to your customer and the customer portal. A quote that has already been sent keeps its language and currency.', 'gresquote'); ?></p> 136 136 </div> 137 <div class="wpqp-inst-raster ">137 <div class="wpqp-inst-raster is-twee"> 138 138 <div class="wpqp-inst-veld"> 139 139 <label for="wpquotepro_quote_language"><?php esc_html_e('Language', 'gresquote'); ?></label> … … 151 151 </select> 152 152 </div> 153 <div class="wpqp-inst-veld ">153 <div class="wpqp-inst-veld is-breed"> 154 154 <label for="wpquotepro_country"><?php esc_html_e('Country', 'gresquote'); ?></label> 155 155 <select id="wpquotepro_country" name="country"> … … 224 224 </div> 225 225 <p class="wpqp-pdf-intro" data-role="pdf-intro"<?php echo '' === trim($intro_text) ? ' hidden' : ''; ?>><?php echo esc_html($intro_text); ?></p> 226 <?php $vb_vs = 'US' === $regio['land']; ?> 226 227 <table class="wpqp-pdf-regels"> 227 228 <thead> 228 <tr><th><?php esc_html_e('Description', 'gresquote'); ?></th><th><?php esc_html_e('Quantity', 'gresquote'); ?></th><th><?php esc_html_e('Price', 'gresquote'); ?></th><th><?php esc_html_e('VAT', 'gresquote'); ?></th><th><?php esc_html_e('Amount', 'gresquote'); ?></th></tr>229 <tr><th><?php esc_html_e('Description', 'gresquote'); ?></th><th><?php esc_html_e('Quantity', 'gresquote'); ?></th><th><?php esc_html_e('Price', 'gresquote'); ?></th><th><?php $vb_vs ? esc_html_e('Sales tax', 'gresquote') : esc_html_e('VAT', 'gresquote'); ?></th><th><?php esc_html_e('Amount', 'gresquote'); ?></th></tr> 229 230 </thead> 230 231 <?php … … 245 246 <table class="wpqp-pdf-totalen"> 246 247 <tbody> 247 <tr><td><?php esc_html_e('Subtotal excl. VAT', 'gresquote'); ?></td><td><?php echo esc_html($vb_bedrag(2300)); ?></td></tr>248 <tr><td><?php $vb_vs ? esc_html_e('Subtotal', 'gresquote') : esc_html_e('Subtotal excl. VAT', 'gresquote'); ?></td><td><?php echo esc_html($vb_bedrag(2300)); ?></td></tr> 248 249 <tr class="is-korting"><td><?php esc_html_e('Discount', 'gresquote'); ?></td><td>− <?php echo esc_html($vb_bedrag(100)); ?></td></tr> 249 <tr class="is-sub"><td><?php esc_html_e('Total excl. VAT', 'gresquote'); ?></td><td><?php echo esc_html($vb_bedrag(2200)); ?></td></tr> 250 <tr class="is-btw"><td><?php /* translators: %s: VAT rate, e.g. 21% */ echo esc_html(sprintf(__('VAT rate %s', 'gresquote'), $vb_procent)); ?></td><td><?php echo esc_html($vb_bedrag(2200 * $vb_tarief / 100)); ?></td></tr> 251 <tr class="is-totaal"><td><?php esc_html_e('Total incl. VAT', 'gresquote'); ?></td><td><?php echo esc_html($vb_bedrag(2200 * (1 + $vb_tarief / 100))); ?></td></tr> 250 <tr class="is-sub"><td><?php $vb_vs ? esc_html_e('Total before tax', 'gresquote') : esc_html_e('Total excl. VAT', 'gresquote'); ?></td><td><?php echo esc_html($vb_bedrag(2200)); ?></td></tr> 251 <tr class="is-btw"><td><?php 252 /* translators: %s: sales tax rate, e.g. 6% */ 253 $vb_vs_regel = __('Sales tax %s', 'gresquote'); 254 /* translators: %s: VAT rate, e.g. 21% */ 255 $vb_btw_regel = __('VAT rate %s', 'gresquote'); 256 echo esc_html(sprintf($vb_vs ? $vb_vs_regel : $vb_btw_regel, $vb_procent)); 257 ?></td><td><?php echo esc_html($vb_bedrag(2200 * $vb_tarief / 100)); ?></td></tr> 258 <tr class="is-totaal"><td><?php $vb_vs ? esc_html_e('Total', 'gresquote') : esc_html_e('Total incl. VAT', 'gresquote'); ?></td><td><?php echo esc_html($vb_bedrag(2200 * (1 + $vb_tarief / 100))); ?></td></tr> 252 259 </tbody> 253 260 </table> -
gresquote/trunk/includes/class-wpquotepro-admin.php
r3792929 r3793045 67 67 add_action('admin_menu', [$this, 'register_menu']); 68 68 add_action('admin_init', [$this, 'stuur_regels_door']); 69 add_action('admin_init', [$this, 'stuur_vergrendelde_wizardstap_door']); 69 70 add_filter('submenu_file', [$this, 'markeer_menu']); 70 71 add_action('admin_head', [$this, 'verberg_menu_items']); … … 240 241 wp_safe_redirect($this->regels_doel_url($pagina, $_GET)); 241 242 exit; 243 } 244 245 /** 246 * 1.0.24: een vergrendelde wizardstap stuurt door naar de eerste stap die wel 247 * open is. Dat gebeurde in render_wizard_page(), toen de pagina al uitvoer had 248 * ("headers already sent"): de beheerder zag een lege pagina in plaats van de 249 * melding. Nu vóór de uitvoer, net als stuur_regels_door(). 250 */ 251 public function stuur_vergrendelde_wizardstap_door() { 252 $pagina = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- alleen lezen welke pagina wordt getoond 253 if ('wpquotepro-wizard' !== $pagina || ! current_user_can('manage_options')) { 254 return; 255 } 256 $doel = $this->vergrendelde_wizardstap_doel(); 257 if ('' !== $doel) { 258 wp_safe_redirect($doel); 259 exit; 260 } 261 } 262 263 /** De wizardstap uit de URL, zoals render_wizard_page() hem leest. */ 264 private function gevraagde_wizardstap() { 265 $requested_step = isset($_GET['step']) ? absint($_GET['step']) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- alleen lezen 266 // 1.9.13: van vijf naar drie stappen. Oude links naar stap 4 (regels) en 267 // 5 (testen) komen uit in Prijs en Testen & live. 268 $oude_stappen = [4 => 2, 5 => 3]; 269 if (isset($oude_stappen[$requested_step])) { 270 $requested_step = $oude_stappen[$requested_step]; 271 } 272 return max(0, min(3, $requested_step)); 273 } 274 275 /** Waarheen als de gevraagde stap nog op slot zit; leeg als hij open is. */ 276 private function vergrendelde_wizardstap_doel() { 277 $requested_step = $this->gevraagde_wizardstap(); 278 $selected_form_id = isset($_GET['form_id']) ? absint($_GET['form_id']) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- alleen lezen 279 if (! $selected_form_id) { 280 return ''; 281 } 282 $state = $this->get_wizard_state($selected_form_id, true); 283 $current_step = $this->get_first_accessible_wizard_step(max(1, $requested_step), $state['can_access']); 284 if ($current_step === $requested_step) { 285 return ''; 286 } 287 return admin_url('admin.php?page=wpquotepro-wizard&step=' . (int) $current_step . '&form_id=' . (int) $state['selected_form_id'] . '&message=wizard_step_locked'); 242 288 } 243 289 … … 1084 1130 } 1085 1131 1086 $hulp = 'https://www.wpquotepro.nl/aan-de-slag/';1132 $hulp = WPQUOTEPRO_Regio::site_url('aan-de-slag'); 1087 1133 $items = [ 1088 1134 [ … … 1162 1208 <h2><?php esc_html_e('How to go live', 'gresquote'); ?></h2> 1163 1209 <span class="wpqp-live-teller"><?php /* translators: 1: steps done, 2: total number of steps */ echo esc_html(sprintf(__('%1$d of %2$d done', 'gresquote'), (int) $status['completed'], (int) $status['total'])); ?></span> 1164 <a class="wpqp-live-film" href=" https://www.wpquotepro.nl/aan-de-slag/" target="_blank" rel="noopener"><?php esc_html_e('Step-by-step guide with videos', 'gresquote'); ?> →</a>1210 <a class="wpqp-live-film" href="<?php echo esc_url(WPQUOTEPRO_Regio::site_url('aan-de-slag')); ?>" target="_blank" rel="noopener"><?php esc_html_e('Step-by-step guide with videos', 'gresquote'); ?> →</a> 1165 1211 </div> 1166 1212 <div class="wpqp-live-balk"><i style="width: <?php echo (int) $pct; ?>%"></i></div> … … 2118 2164 global $wpdb; 2119 2165 2120 $requested_step = isset($_GET['step']) ? absint($_GET['step']) : 0; 2121 // 1.9.13: van vijf naar drie stappen. Oude links naar stap 4 (regels) en 2122 // 5 (testen) komen uit in Prijs en Testen & live. 2123 $oude_stappen = [4 => 2, 5 => 3]; 2124 if (isset($oude_stappen[$requested_step])) { 2125 $requested_step = $oude_stappen[$requested_step]; 2126 } 2127 $requested_step = max(0, min(3, $requested_step)); 2166 $requested_step = $this->gevraagde_wizardstap(); 2128 2167 $selected_form_id = isset($_GET['form_id']) ? absint($_GET['form_id']) : 0; 2129 2168 $template_key = isset($_GET['template']) ? $this->sanitize_wizard_template_key(sanitize_key(wp_unslash($_GET['template']))) : ($selected_form_id ? $this->get_form_template_key($selected_form_id) : 'blank'); … … 2139 2178 $current_step = $this->get_first_accessible_wizard_step(max(1, $requested_step), $state['can_access']); 2140 2179 2180 // Een vergrendelde stap is al in admin_init doorgestuurd 2181 // (stuur_vergrendelde_wizardstap_door). Komt hij hier toch, dan is er al 2182 // uitvoer: toon de open stap met de melding in plaats van een lege pagina. 2141 2183 if ($current_step !== $requested_step && $selected_form_id) { 2142 wp_safe_redirect(admin_url('admin.php?page=wpquotepro-wizard&step=' . (int) $current_step . '&form_id=' . (int) $state['selected_form_id'] . '&message=wizard_step_locked')); 2143 exit; 2184 echo '<div class="wpquotepro-notice error">' . esc_html($this->get_notice_text('wizard_step_locked')) . '</div>'; 2144 2185 } 2145 2186 -
gresquote/trunk/includes/class-wpquotepro-db.php
r3792172 r3793045 392 392 } 393 393 $demo_naam = __('Solar Panels Quote', 'gresquote'); 394 // 1.0.24: ook de interne veldnamen en keuzes in de taal van de site. Het 395 // zijn sleutels (geen vertaalbare tekst): vast per taal, niet via __(). 396 $engels = 0 === strpos((string) get_locale(), 'en'); 397 $veld = $engels 398 ? ['dak' => 'roof_type', 'plat' => 'flat', 'aantal' => 'number_of_panels', 'spoed' => 'rush', 'ja' => 'yes'] 399 : ['dak' => 'daktype', 'plat' => 'plat', 'aantal' => 'aantal_panelen', 'spoed' => 'spoed', 'ja' => 'ja']; 394 400 $standaard_btw = class_exists('WPQUOTEPRO_Regio') ? WPQUOTEPRO_Regio::standaard_tarief() : 21; 395 401 … … 445 451 [ 446 452 'form_id' => $form_id, 447 'field_name' => 'daktype',453 'field_name' => $veld['dak'], 448 454 'rule_operator' => '=', 449 'compare_value' => 'plat',455 'compare_value' => $veld['plat'], 450 456 'action_type' => 'add_product', 451 457 'product_id' => $plat_dak_product_id, … … 463 469 [ 464 470 'form_id' => $form_id, 465 'field_name' => 'aantal_panelen',471 'field_name' => $veld['aantal'], 466 472 'rule_operator' => '>', 467 473 'compare_value' => '10', … … 482 488 [ 483 489 'form_id' => $form_id, 484 'field_name' => 'spoed',490 'field_name' => $veld['spoed'], 485 491 'rule_operator' => '=', 486 'compare_value' => 'ja',492 'compare_value' => $veld['ja'], 487 493 'action_type' => 'add_percentage_surcharge', 488 494 'product_id' => 0, -
gresquote/trunk/includes/class-wpquotepro-regio.php
r3792172 r3793045 75 75 $basis = $engels ? 'https://www.gresquote.com' : rtrim(WPQUOTEPRO_SHOP_URL, '/'); 76 76 $paden = $engels 77 ? ['voorwaarden' => '/terms/', 'privacy' => '/privacy/', 'prijzen' => '/pricing/', 'account' => '/my-account/' ]78 : ['voorwaarden' => '/algemene-voorwaarden/', 'privacy' => '/privacy/', 'prijzen' => '/prijzen/', 'account' => '/mijn-account/' ];77 ? ['voorwaarden' => '/terms/', 'privacy' => '/privacy/', 'prijzen' => '/pricing/', 'account' => '/my-account/', 'aan-de-slag' => '/get-started/'] 78 : ['voorwaarden' => '/algemene-voorwaarden/', 'privacy' => '/privacy/', 'prijzen' => '/prijzen/', 'account' => '/mijn-account/', 'aan-de-slag' => '/aan-de-slag/']; 79 79 return $basis . ($paden[$pad] ?? '/'); 80 80 } -
gresquote/trunk/includes/class-wpquotepro-submission-bridge.php
r3792172 r3793045 1774 1774 'description' => $description, 1775 1775 'is_calculation_line' => $is_calculation_line, 1776 'currency' => 'EUR',1776 'currency' => self::valuta(), 1777 1777 'unit_price' => $unit_price, 1778 1778 'vat_rate' => $vat_rate, … … 2305 2305 'description_text' => isset($row['description_text']) ? (string) $row['description_text'] : '', 2306 2306 'line_type' => self::map_rule_line_type(isset($row['action_type']) ? (string) $row['action_type'] : '', ! empty($row['product_id'])), 2307 'currency' => 'EUR',2307 'currency' => self::valuta(), 2308 2308 'unit_price' => $product['unit_price'], 2309 2309 // Het eigen btw-tarief van de regel (1.9.16), of null: volgt de … … 2498 2498 } 2499 2499 2500 /** 2501 * 1.0.24: het woord in de PDF-bestandsnaam volgt de taal van de offertes 2502 * ("quote-…" of "offerte-…"); de eindklant ziet die naam bij het downloaden. 2503 */ 2504 /** De valuta van de offertes; EUR als de regio (nog) niet te lezen is. */ 2505 private static function valuta() { 2506 return (class_exists('WPQUOTEPRO_Regio') && function_exists('get_option')) ? WPQUOTEPRO_Regio::huidig()['valuta'] : 'EUR'; 2507 } 2508 2509 private static function pdf_woord() { 2510 return (class_exists('WPQUOTEPRO_Regio') && 'en' === WPQUOTEPRO_Regio::huidig()['taal']) ? 'quote' : 'offerte'; 2511 } 2512 2500 2513 private function build_pdf_filename(array $payload) { 2514 $woord = self::pdf_woord(); 2501 2515 $preferred = ''; 2502 2516 foreach (['filename', 'file_name', 'pdf_filename'] as $key) { … … 2507 2521 } 2508 2522 2509 if ('' === $preferred && isset($payload['quote_number']) && is_scalar($payload['quote_number'])) { 2510 $preferred = 'offerte-' . (string) $payload['quote_number'] . '.pdf'; 2523 // De backend (webhooks/pdf-complete) stuurt quotation_number; quote_number 2524 // bleef daardoor altijd leeg en de naam werd een datum met willekeurige tekens. 2525 foreach (['quote_number', 'quotation_number'] as $key) { 2526 if ('' === $preferred && isset($payload[$key]) && is_scalar($payload[$key]) && '' !== (string) $payload[$key]) { 2527 $preferred = $woord . '-' . (string) $payload[$key] . '.pdf'; 2528 } 2511 2529 } 2512 2530 2513 2531 if ('' === $preferred && isset($payload['entry_reference']) && is_scalar($payload['entry_reference'])) { 2514 $preferred = 'offerte-entry-' . (string) $payload['entry_reference'] . '.pdf';2532 $preferred = $woord . '-entry-' . (string) $payload['entry_reference'] . '.pdf'; 2515 2533 } 2516 2534 2517 2535 if ('' === $preferred) { 2518 $preferred = 'offerte-' . gmdate('Ymd-His') . '-' . wp_generate_password(8, false, false) . '.pdf';2536 $preferred = $woord . '-' . gmdate('Ymd-His') . '-' . wp_generate_password(8, false, false) . '.pdf'; 2519 2537 } 2520 2538 2521 2539 $preferred = sanitize_file_name($preferred); 2522 2540 if ('' === $preferred) { 2523 $preferred = 'offerte-' . gmdate('Ymd-His') . '.pdf';2541 $preferred = $woord . '-' . gmdate('Ymd-His') . '.pdf'; 2524 2542 } 2525 2543 … … 2537 2555 2538 2556 if ('' === $base_name) { 2539 $base_name = 'offerte';2557 $base_name = self::pdf_woord(); 2540 2558 } 2541 2559 … … 2616 2634 2617 2635 if ('' === $download_filename) { 2618 $download_filename = 'offerte.pdf';2636 $download_filename = self::pdf_woord() . '.pdf'; 2619 2637 } 2620 2638 -
gresquote/trunk/languages/gresquote-nl_NL.po
r3792314 r3793045 2726 2726 msgstr "Loopt tot %s" 2727 2727 2728 #: admin/instellingen-offerte.php 2728 2729 #: includes/class-wpquotepro-acceptance-shortcode.php 2729 2730 msgid "Sales tax" 2730 2731 msgstr "Sales tax" 2732 2733 #: admin/instellingen-offerte.php 2734 msgid "Sales tax %s" 2735 msgstr "Sales tax %s" 2731 2736 2732 2737 #: includes/class-wpquotepro-admin.php … … 3069 3074 msgstr "Abonnement nog niet gekoppeld. Gebruik de knop Abonneren om GresQuote te activeren." 3070 3075 3076 #: admin/instellingen-offerte.php 3071 3077 #: includes/class-wpquotepro-acceptance-shortcode.php 3072 3078 msgid "Subtotal" … … 3666 3672 msgstr "Te veel verzoeken. Wacht alstublieft even." 3667 3673 3674 #: admin/instellingen-offerte.php 3668 3675 #: includes/class-wpquotepro-acceptance-shortcode.php 3669 3676 #: includes/class-wpquotepro-admin.php 3670 3677 msgid "Total" 3671 3678 msgstr "Totaal" 3679 3680 #: admin/instellingen-offerte.php 3681 msgid "Total before tax" 3682 msgstr "Totaal vóór belasting" 3672 3683 3673 3684 #: admin/instellingen-offerte.php -
gresquote/trunk/languages/nl_NL.json
r3792314 r3793045 666 666 "Runs until %s": "Loopt tot %s", 667 667 "Sales tax": "Sales tax", 668 "Sales tax %s": "Sales tax %s", 668 669 "Same as the quote": "Zelfde als de offerte", 669 670 "Same as the quote: follows the VAT of the products on the quote, for example for call-out charges. Choose a rate for a separate service with its own rate.": "Zelfde als de offerte: volgt de btw van de producten op de offerte, bijvoorbeeld voor voorrijkosten. Kies een tarief voor een losse dienst met een eigen tarief.", … … 897 898 "Too many requests. Please wait a moment.": "Te veel verzoeken. Wacht alstublieft even.", 898 899 "Total": "Totaal", 900 "Total before tax": "Totaal vóór belasting", 899 901 "Total excl. VAT": "Totaal excl. BTW", 900 902 "Total incl. VAT": "Totaal incl. btw", -
gresquote/trunk/readme.txt
r3792929 r3793045 5 5 Tested up to: 7.1 6 6 Requires PHP: 8.0 7 Stable tag: 1.0.2 37 Stable tag: 1.0.24 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 98 98 == Changelog == 99 99 100 = 1.0.24 = 101 * Fix: a locked wizard step showed an empty page instead of the message; it now goes to the first open step. 102 * In the United States the sample quote in the settings says Subtotal, Sales tax and Total, like the real PDF. 103 * The country choice in the settings is no longer cut off. 104 * The step-by-step guide links to the English site for English-speaking admins. 105 * The PDF of a quote is named after its quote number, with "quote" or "offerte" in the language of your quotes. 106 * The demo form on an English site uses English field names. 107 100 108 = 1.0.23 = 101 109 * A new product in the wizard suggests the standard tax rate of your country (0% in the US) instead of always 21%. … … 175 183 == Upgrade Notice == 176 184 185 = 1.0.24 = 186 Fixes an empty page on a locked wizard step and shows US tax wording in the sample quote. 187 177 188 = 1.0.20 = 178 189 The plugin is now in English with a Dutch translation, and follows the language of your site. -
gresquote/trunk/wpquotepro.php
r3792929 r3793045 4 4 * Plugin URI: https://www.gresquote.nl/wordpress-offerte-plugin/ 5 5 * Description: Quote automation for WordPress. Automates your quoting process: from a request on your website to a calculated quote, follow-up and acceptance. A customer fills in your quote form and receives a PDF quote in your own branding within a minute, with automatic reminders, online acceptance and an accounting connection. Works with WPForms, Contact Form 7, Gravity Forms and Ninja Forms. 6 * Version: 1.0.2 36 * Version: 1.0.24 7 7 * Author: Gresnich Consulting 8 8 * Author URI: https://www.gresnichconsulting.nl/
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)