{"id":2930,"date":"2026-08-21T15:40:31","date_gmt":"2026-08-21T15:40:31","guid":{"rendered":"https:\/\/maroczain.com\/?p=2930"},"modified":"2026-08-21T15:40:31","modified_gmt":"2026-08-21T15:40:31","slug":"2930","status":"publish","type":"post","link":"https:\/\/maroczain.com\/en\/2026\/08\/21\/2930\/","title":{"rendered":""},"content":{"rendered":"\n<style>\n:root{\n  --mz-blue:#075b9d;\n  --mz-blue-dark:#063b66;\n  --mz-gold:#d4af37;\n  --mz-bg:#f4f8fb;\n  --mz-border:#dbe4ec;\n}\n\n.mz-premium{\n  max-width:1200px;\n  margin:30px auto;\n  font-family:Arial,Helvetica,sans-serif;\n  color:#172033;\n}\n\n.mz-box{\n  background:#fff;\n  border-radius:22px;\n  padding:30px;\n  box-shadow:0 12px 40px rgba(0,0,0,.10);\n}\n\n.mz-head{\n  background:linear-gradient(135deg,var(--mz-blue-dark),var(--mz-blue));\n  color:#fff;\n  padding:30px;\n  border-radius:18px;\n  text-align:center;\n}\n\n.mz-head h1{\n  margin:0;\n  font-size:34px;\n}\n\n.mz-head p{\n  margin:8px 0 0;\n  color:#f7dc72;\n}\n\n.mz-section-title{\n  color:var(--mz-blue);\n  margin-top:32px;\n  padding-bottom:10px;\n  border-bottom:2px solid #edf2f6;\n}\n\n.mz-grid{\n  display:grid;\n  grid-template-columns:repeat(2,1fr);\n  gap:16px;\n}\n\n.mz-field label{\n  display:block;\n  font-weight:700;\n  margin-bottom:7px;\n}\n\n.mz-field input,\n.mz-field select,\n.mz-field textarea{\n  width:100%;\n  box-sizing:border-box;\n  padding:13px;\n  border:1px solid var(--mz-border);\n  border-radius:10px;\n  font-size:15px;\n}\n\n.mz-table-wrap{\n  overflow-x:auto;\n  margin-top:15px;\n}\n\n.mz-table{\n  width:100%;\n  border-collapse:collapse;\n}\n\n.mz-table th{\n  background:var(--mz-blue);\n  color:#fff;\n  padding:12px;\n  border:1px solid #d5dde5;\n}\n\n.mz-table td{\n  padding:9px;\n  border:1px solid #d5dde5;\n}\n\n.mz-table input{\n  width:100%;\n  min-width:85px;\n  box-sizing:border-box;\n  padding:9px;\n  border:1px solid #ccd6df;\n  border-radius:7px;\n}\n\n.mz-btn{\n  border:none;\n  border-radius:10px;\n  padding:13px 18px;\n  cursor:pointer;\n  font-weight:700;\n  font-size:15px;\n}\n\n.mz-btn-primary{\n  background:var(--mz-gold);\n  color:#172033;\n}\n\n.mz-btn-secondary{\n  background:var(--mz-blue);\n  color:#fff;\n}\n\n.mz-btn-dark{\n  background:#172033;\n  color:#fff;\n}\n\n.mz-btn-danger{\n  background:#a92b2b;\n  color:#fff;\n}\n\n.mz-actions{\n  display:flex;\n  gap:12px;\n  flex-wrap:wrap;\n  margin-top:18px;\n}\n\n.mz-results{\n  display:grid;\n  grid-template-columns:repeat(4,1fr);\n  gap:14px;\n  margin-top:20px;\n}\n\n.mz-result{\n  background:var(--mz-bg);\n  border-radius:14px;\n  padding:20px;\n  text-align:center;\n}\n\n.mz-result span{\n  display:block;\n  font-size:14px;\n}\n\n.mz-result strong{\n  display:block;\n  margin-top:8px;\n  font-size:24px;\n  color:var(--mz-blue);\n}\n\n.mz-total{\n  margin-top:20px;\n  background:linear-gradient(135deg,var(--mz-blue-dark),var(--mz-blue));\n  color:#fff;\n  padding:25px;\n  border-radius:16px;\n  text-align:center;\n}\n\n.mz-total strong{\n  display:block;\n  font-size:38px;\n  margin-top:7px;\n}\n\n.mz-summary{\n  background:#fff9df;\n  border-left:5px solid var(--mz-gold);\n  padding:18px;\n  border-radius:10px;\n  margin-top:20px;\n}\n\n.mz-small{\n  font-size:13px;\n  color:#5c6670;\n}\n\n@media(max-width:800px){\n  .mz-grid,\n  .mz-results{\n    grid-template-columns:1fr;\n  }\n\n  .mz-head h1{\n    font-size:27px;\n  }\n}\n\n@media print{\n  .no-print{\n    display:none!important;\n  }\n\n  .mz-box{\n    box-shadow:none;\n  }\n}\n<\/style>\n\n<div class=\"mz-premium\">\n<div class=\"mz-box\">\n\n  <div class=\"mz-head\">\n    <h1>\u2708 SIMULATEUR CARGO PREMIUM<\/h1>\n    <h2>MAROC ZAIN<\/h2>\n    <p>Devis de poids \u2022 Fret a\u00e9rien \u2022 Bagages \u2022 Colis<\/p>\n  <\/div>\n\n  <h2 class=\"mz-section-title\">1. Informations du devis<\/h2>\n\n  <div class=\"mz-grid\">\n    <div class=\"mz-field\">\n      <label>N\u00b0 devis<\/label>\n      <input type=\"text\" id=\"numeroDevis\" readonly>\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Date<\/label>\n      <input type=\"date\" id=\"dateDevis\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Nom du client<\/label>\n      <input type=\"text\" id=\"client\" placeholder=\"Nom \/ Soci\u00e9t\u00e9\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>T\u00e9l\u00e9phone<\/label>\n      <input type=\"text\" id=\"telephone\" placeholder=\"+212...\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Email<\/label>\n      <input type=\"email\" id=\"email\" placeholder=\"client@email.com\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Nature de l&rsquo;envoi<\/label>\n      <select id=\"nature\">\n        <option>Fret a\u00e9rien<\/option>\n        <option>Bagages<\/option>\n        <option>Colis<\/option>\n        <option>Documents<\/option>\n        <option>Marchandises g\u00e9n\u00e9rales<\/option>\n        <option>Autre<\/option>\n      <\/select>\n    <\/div>\n  <\/div>\n\n  <h2 class=\"mz-section-title\">2. Itin\u00e9raire<\/h2>\n\n  <div class=\"mz-grid\">\n    <div class=\"mz-field\">\n      <label>D\u00e9part<\/label>\n      <input type=\"text\" id=\"depart\" placeholder=\"Casablanca\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Destination<\/label>\n      <input type=\"text\" id=\"destination\" placeholder=\"Paris\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Compagnie<\/label>\n      <input type=\"text\" id=\"compagnie\" placeholder=\"Compagnie a\u00e9rienne\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Tarif par kg (MAD)<\/label>\n      <input type=\"number\" id=\"tarifKg\" value=\"30\" min=\"0\" step=\"0.01\">\n    <\/div>\n  <\/div>\n\n  <h2 class=\"mz-section-title\">3. Colis et dimensions<\/h2>\n\n  <div class=\"mz-table-wrap\">\n    <table class=\"mz-table\" id=\"tableColis\">\n      <thead>\n        <tr>\n          <th>Pi\u00e8ce<\/th>\n          <th>Poids r\u00e9el kg<\/th>\n          <th>Longueur cm<\/th>\n          <th>Largeur cm<\/th>\n          <th>Hauteur cm<\/th>\n          <th>Poids volum\u00e9trique<\/th>\n          <th class=\"no-print\">Action<\/th>\n        <\/tr>\n      <\/thead>\n\n      <tbody id=\"colisBody\">\n        <tr>\n          <td>1<\/td>\n          <td><input type=\"number\" class=\"poids\" min=\"0\" step=\"0.01\"><\/td>\n          <td><input type=\"number\" class=\"longueur\" min=\"0\" step=\"0.01\"><\/td>\n          <td><input type=\"number\" class=\"largeur\" min=\"0\" step=\"0.01\"><\/td>\n          <td><input type=\"number\" class=\"hauteur\" min=\"0\" step=\"0.01\"><\/td>\n          <td class=\"volumetrique\">0.00 kg<\/td>\n          <td class=\"no-print\">\n            <button class=\"mz-btn mz-btn-danger\" onclick=\"supprimerLigne(this)\">X<\/button>\n          <\/td>\n        <\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n\n  <div class=\"mz-actions no-print\">\n    <button class=\"mz-btn mz-btn-secondary\" onclick=\"ajouterLigne()\">+ Ajouter un colis<\/button>\n    <button class=\"mz-btn mz-btn-primary\" onclick=\"calculer()\">Calculer le devis<\/button>\n  <\/div>\n\n  <h2 class=\"mz-section-title\">4. Frais compl\u00e9mentaires<\/h2>\n\n  <div class=\"mz-grid\">\n    <div class=\"mz-field\">\n      <label>Frais de dossier (MAD)<\/label>\n      <input type=\"number\" id=\"fraisDossier\" value=\"250\" min=\"0\" step=\"0.01\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Manutention (MAD)<\/label>\n      <input type=\"number\" id=\"manutention\" value=\"0\" min=\"0\" step=\"0.01\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>S\u00fbret\u00e9 \/ Screening (MAD)<\/label>\n      <input type=\"number\" id=\"surete\" value=\"0\" min=\"0\" step=\"0.01\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Suppl\u00e9ment carburant (MAD)<\/label>\n      <input type=\"number\" id=\"carburant\" value=\"0\" min=\"0\" step=\"0.01\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>Autres frais (MAD)<\/label>\n      <input type=\"number\" id=\"autresFrais\" value=\"0\" min=\"0\" step=\"0.01\">\n    <\/div>\n\n    <div class=\"mz-field\">\n      <label>TVA (%)<\/label>\n      <input type=\"number\" id=\"tva\" value=\"20\" min=\"0\" step=\"0.01\">\n    <\/div>\n  <\/div>\n\n  <h2 class=\"mz-section-title\">5. R\u00e9sultat<\/h2>\n\n  <div class=\"mz-results\">\n    <div class=\"mz-result\">\n      <span>Poids r\u00e9el total<\/span>\n      <strong id=\"poidsReelTotal\">0 kg<\/strong>\n    <\/div>\n\n    <div class=\"mz-result\">\n      <span>Poids volum\u00e9trique total<\/span>\n      <strong id=\"poidsVolTotal\">0 kg<\/strong>\n    <\/div>\n\n    <div class=\"mz-result\">\n      <span>Poids taxable<\/span>\n      <strong id=\"poidsTaxable\">0 kg<\/strong>\n    <\/div>\n\n    <div class=\"mz-result\">\n      <span>Transport<\/span>\n      <strong id=\"transport\">0 MAD<\/strong>\n    <\/div>\n  <\/div>\n\n  <div class=\"mz-results\">\n    <div class=\"mz-result\">\n      <span>Total frais<\/span>\n      <strong id=\"totalFrais\">0 MAD<\/strong>\n    <\/div>\n\n    <div class=\"mz-result\">\n      <span>Total HT<\/span>\n      <strong id=\"totalHT\">0 MAD<\/strong>\n    <\/div>\n\n    <div class=\"mz-result\">\n      <span>TVA<\/span>\n      <strong id=\"montantTVA\">0 MAD<\/strong>\n    <\/div>\n\n    <div class=\"mz-result\">\n      <span>Total TTC<\/span>\n      <strong id=\"totalTTCPetit\">0 MAD<\/strong>\n    <\/div>\n  <\/div>\n\n  <div class=\"mz-total\">\n    <span>MONTANT TOTAL DU DEVIS<\/span>\n    <strong id=\"totalTTC\">0 MAD<\/strong>\n  <\/div>\n\n  <div class=\"mz-summary\">\n    <strong>R\u00e8gle de calcul<\/strong><br><br>\n    Poids volum\u00e9trique = Longueur \u00d7 Largeur \u00d7 Hauteur \u00f7 6000.<br>\n    Le poids taxable correspond au poids le plus \u00e9lev\u00e9 entre le poids r\u00e9el total et le poids volum\u00e9trique total.\n    <br><br>\n    <span class=\"mz-small\">\n      Le diviseur 6000 est utilis\u00e9 ici \u00e0 titre param\u00e9trable et doit \u00eatre adapt\u00e9 selon les r\u00e8gles du transporteur ou du produit cargo.\n    <\/span>\n  <\/div>\n\n  <h2 class=\"mz-section-title\">6. Observations<\/h2>\n\n  <div class=\"mz-field\">\n    <textarea id=\"observations\" rows=\"5\" placeholder=\"Conditions particuli\u00e8res, remarques client, d\u00e9lai, restrictions...\"><\/textarea>\n  <\/div>\n\n  <div class=\"mz-actions no-print\">\n    <button class=\"mz-btn mz-btn-primary\" onclick=\"calculer()\">Recalculer<\/button>\n    <button class=\"mz-btn mz-btn-dark\" onclick=\"window.print()\">\ud83d\udda8 Imprimer \/ PDF<\/button>\n    <button class=\"mz-btn mz-btn-secondary\" onclick=\"envoyerWhatsApp()\">WhatsApp<\/button>\n  <\/div>\n\n<\/div>\n<\/div>\n\n<script>\nfunction montant(v){\n  return new Intl.NumberFormat('fr-MA',{\n    minimumFractionDigits:2,\n    maximumFractionDigits:2\n  }).format(v) + ' MAD';\n}\n\nfunction valeur(id){\n  return parseFloat(document.getElementById(id).value) || 0;\n}\n\nfunction genererNumero(){\n  const d = new Date();\n  const y = d.getFullYear();\n  const m = String(d.getMonth()+1).padStart(2,'0');\n  const day = String(d.getDate()).padStart(2,'0');\n  const random = Math.floor(1000 + Math.random()*9000);\n  document.getElementById('numeroDevis').value =\n    'MZ-CARGO-' + y + m + day + '-' + random;\n}\n\nfunction initialiserDate(){\n  const today = new Date();\n  document.getElementById('dateDevis').value =\n    today.toISOString().split('T')[0];\n}\n\nfunction ajouterLigne(){\n  const tbody = document.getElementById('colisBody');\n  const numero = tbody.rows.length + 1;\n\n  const row = tbody.insertRow();\n\n  row.innerHTML = `\n    <td>${numero}<\/td>\n    <td><input type=\"number\" class=\"poids\" min=\"0\" step=\"0.01\"><\/td>\n    <td><input type=\"number\" class=\"longueur\" min=\"0\" step=\"0.01\"><\/td>\n    <td><input type=\"number\" class=\"largeur\" min=\"0\" step=\"0.01\"><\/td>\n    <td><input type=\"number\" class=\"hauteur\" min=\"0\" step=\"0.01\"><\/td>\n    <td class=\"volumetrique\">0.00 kg<\/td>\n    <td class=\"no-print\">\n      <button class=\"mz-btn mz-btn-danger\" onclick=\"supprimerLigne(this)\">X<\/button>\n    <\/td>\n  `;\n}\n\nfunction supprimerLigne(btn){\n  const tbody = document.getElementById('colisBody');\n\n  if(tbody.rows.length <= 1){\n    alert(\"Vous devez conserver au moins une ligne.\");\n    return;\n  }\n\n  btn.closest('tr').remove();\n\n  [...tbody.rows].forEach((row,index)=>{\n    row.cells[0].innerText = index+1;\n  });\n\n  calculer();\n}\n\nfunction calculer(){\n\n  const rows = document.querySelectorAll('#colisBody tr');\n\n  let poidsReel = 0;\n  let poidsVol = 0;\n\n  rows.forEach(row=>{\n\n    const poids =\n      parseFloat(row.querySelector('.poids').value) || 0;\n\n    const l =\n      parseFloat(row.querySelector('.longueur').value) || 0;\n\n    const L =\n      parseFloat(row.querySelector('.largeur').value) || 0;\n\n    const h =\n      parseFloat(row.querySelector('.hauteur').value) || 0;\n\n    const volumetrique =\n      (l * L * h) \/ 6000;\n\n    poidsReel += poids;\n    poidsVol += volumetrique;\n\n    row.querySelector('.volumetrique').innerText =\n      volumetrique.toFixed(2) + ' kg';\n  });\n\n  const taxable = Math.max(poidsReel,poidsVol);\n\n  const tarif = valeur('tarifKg');\n\n  const transport =\n    taxable * tarif;\n\n  const frais =\n    valeur('fraisDossier') +\n    valeur('manutention') +\n    valeur('surete') +\n    valeur('carburant') +\n    valeur('autresFrais');\n\n  const totalHT =\n    transport + frais;\n\n  const tauxTVA =\n    valeur('tva');\n\n  const montantTVA =\n    totalHT * tauxTVA \/ 100;\n\n  const TTC =\n    totalHT + montantTVA;\n\n  document.getElementById('poidsReelTotal').innerText =\n    poidsReel.toFixed(2) + ' kg';\n\n  document.getElementById('poidsVolTotal').innerText =\n    poidsVol.toFixed(2) + ' kg';\n\n  document.getElementById('poidsTaxable').innerText =\n    taxable.toFixed(2) + ' kg';\n\n  document.getElementById('transport').innerText =\n    montant(transport);\n\n  document.getElementById('totalFrais').innerText =\n    montant(frais);\n\n  document.getElementById('totalHT').innerText =\n    montant(totalHT);\n\n  document.getElementById('montantTVA').innerText =\n    montant(montantTVA);\n\n  document.getElementById('totalTTCPetit').innerText =\n    montant(TTC);\n\n  document.getElementById('totalTTC').innerText =\n    montant(TTC);\n}\n\nfunction envoyerWhatsApp(){\n\n  calculer();\n\n  const numero =\n    document.getElementById('numeroDevis').value;\n\n  const client =\n    document.getElementById('client').value || '-';\n\n  const depart =\n    document.getElementById('depart').value || '-';\n\n  const destination =\n    document.getElementById('destination').value || '-';\n\n  const poidsTaxable =\n    document.getElementById('poidsTaxable').innerText;\n\n  const total =\n    document.getElementById('totalTTC').innerText;\n\n  const message =\n`MAROC ZAIN - DEVIS CARGO\n\nDevis : ${numero}\nClient : ${client}\nTrajet : ${depart} \u2192 ${destination}\n\nPoids taxable : ${poidsTaxable}\nMontant estimatif : ${total}\n\nDevis sous r\u00e9serve de validation d\u00e9finitive.`;\n\n  const url =\n    'https:\/\/wa.me\/?text=' +\n    encodeURIComponent(message);\n\n  window.open(url,'_blank');\n}\n\ngenererNumero();\ninitialiserDate();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u2708 SIMULATEUR CARGO PREMIUM MAROC ZAIN Devis de poids \u2022 Fret a\u00e9rien \u2022 Bagages \u2022 Colis 1. Informations du devis N\u00b0 devis Date Nom du client T\u00e9l\u00e9phone Email Nature de l&rsquo;envoi Fret a\u00e9rienBagagesColisDocumentsMarchandises g\u00e9n\u00e9ralesAutre 2. Itin\u00e9raire D\u00e9part Destination Compagnie Tarif par kg (MAD) 3. Colis et dimensions Pi\u00e8ce Poids r\u00e9el kg Longueur cm Largeur cm [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-2930","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/2930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/comments?post=2930"}],"version-history":[{"count":1,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/2930\/revisions"}],"predecessor-version":[{"id":2931,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/2930\/revisions\/2931"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=2930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/categories?post=2930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/tags?post=2930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}