WEBADASI · İÇ PROSEDÜR
Web sitesinde sipariş düştüğünde yöneticiye otomatik mail gönderme kuralının, sunucuya girmeden yalnızca Odoo arayüzünden kurulması. Flora Natural'da uygulanan yapının başka müşterilere taşınabilir hâli.
BAŞLAMADAN ÖNCE
KURULUM
Ayarlar → Genel Ayarlar → (sayfanın en altı) Geliştirici Araçları → Geliştirici modunu etkinleştir
Mail şablonları ve otomasyon kuralları menüleri yalnızca geliştirici modunda görünür. Mod açıkken üst barda küçük bir böcek simgesi belirir.
Uygulamalar → arama kutusu → "Automation" ara → Otomasyon Kuralları → Etkinleştir
Odoo'nun kendi standart modülü, dışarıdan kod gelmiyor. Teknik adı base_automation.
Ayarlar → Teknik → E-posta → E-posta Şablonları → Yeni
| ALAN | DEĞER |
|---|---|
| Ad | Yönetici Bildirimi: Yeni Web Sitesi Siparişi |
| Geçerli olduğu model | Satış Siparişi (sale.order) |
| Konu | Yeni sipariş: {{ object.name }} - {{ object.partner_id.name }} - {{ format_amount(object.amount_total, object.currency_id) }} |
| İçerik | Aşağıdaki hazır gövdeyi kod görünümüne geçip yapıştır (metin editörüne düz yapıştırma, tablo döngüsü bozulur). |
Sonra E-posta Yapılandırması sekmesine geç:
| Kimden | SMTP hesabının adresi — birebir aynı (örn. info@musteri.com.tr) |
| Varsayılan alıcıları kullan | Kapalı |
| Kime (E-posta) | Yöneticinin adresi. Birden fazlaysa virgülle ayrılır. |
Ayarlar → Teknik → Otomasyon → Otomasyon Kuralları → Yeni
| ALAN | DEĞER |
|---|---|
| Ad | Yeni web siparişi → yönetici maili |
| Model | Satış Siparişi |
| Tetikleyici | Durum ayarlandı → değer olarak Satış Siparişi seç |
| Uygula (filtre) | Web Sitesi ayarlandı (website_id is set) |
| Eylem | Eylem ekle → Tür: E-posta Gönder → Şablon: 3. adımdaki şablon → Gönderim şekli: E-posta |
"Uygula" filtresi olmazsa arka ofisten elle açılan siparişler de mail üretir. Müşteri bunu istiyorsa filtreyi boş bırak.
Satış → Siparişler listesinde taslak durumdaki eski bir sepeti aç (ödeme denemesi olmayan, terk edilmiş bir tanesi), Onayla'ya bas. Mail gelmeli. Sonra aynı siparişi İptal et — geriye iptal edilmiş bir kayıt kalır, stok ve muhasebe etkilenmez.
Alternatif: siteden düşük tutarlı gerçek bir sipariş verip ödemeyi tamamlamak. Hiçbir şeyi geri almak gerekmez ama tahsilat yapılmış olur.
Ayarlar → Teknik → E-posta → E-postalar
En üstteki kayıt yeni siparişin maili olmalı ve durumu Gönderildi. Başarısız ise kaydı açıp hata sebebini oku — neredeyse her zaman SMTP ayarı veya "Kimden" uyuşmazlığıdır.
Odoo'da alışveriş sepeti de bir taslak sipariş kaydıdır. Kural "kayıt oluşturulduğunda" tetiklenirse siteye girip sepete ürün atan herkes için yöneticiye mail gider — Flora Natural'da 39 taslağın 36'sı terk edilmiş sepetti.
Ödeme işlemi kaydına bağlamak da yanlış: müşteri kartı ikinci kez denediğinde aynı sipariş için iki üç mail üretir. Ödemenin gerçekten başarıya ulaştığı an, siparişin taslaktan satış siparişine geçtiği andır.
İstisna: Müşteride havale/EFT açıksa o siparişler ödeme beklerken taslakta kalır ve bu kural onları yakalamaz. O durumda ikinci bir kural gerekir — teknik ekibe danış.
ŞABLON GÖVDESI
3. adımda içerik alanının kod görünümüne yapıştırılacak hazır HTML. Ürün tablosu, müşteri ve teslimat bilgileri, KDV kırılımı, ödeme referansı ve siparişe giden bağlantı içerir. Renk kodunu müşterinin kurumsal rengiyle değiştirebilirsin — iki yerde #1a7a3c geçiyor.
<div style="font-family:Arial,Helvetica,sans-serif;font-size:14px;color:#222222;max-width:720px;"> <h2 style="margin:0 0 4px 0;color:#1a7a3c;">Yeni Siparis: <t t-out="object.name"/></h2> <p style="margin:0 0 18px 0;color:#777777;font-size:13px;"> <t t-out="format_datetime(object.date_order, tz='Europe/Istanbul', dt_format='dd.MM.yyyy HH:mm')"/> </p> <table style="width:100%;border-collapse:collapse;margin-bottom:18px;font-size:13px;"> <tr><td style="padding:5px 8px;background:#f4f4f4;width:150px;">Musteri</td><td style="padding:5px 8px;"><t t-out="object.partner_id.name"/></td></tr> <tr><td style="padding:5px 8px;background:#f4f4f4;">Telefon</td><td style="padding:5px 8px;"><t t-out="object.partner_id.phone or object.partner_id.mobile or '-'"/></td></tr> <tr><td style="padding:5px 8px;background:#f4f4f4;">E-posta</td><td style="padding:5px 8px;"><t t-out="object.partner_id.email or '-'"/></td></tr> <tr><td style="padding:5px 8px;background:#f4f4f4;vertical-align:top;">Teslimat adresi</td><td style="padding:5px 8px;white-space:pre-line;"><t t-out="object.partner_shipping_id.contact_address or '-'"/></td></tr> </table> <table style="width:100%;border-collapse:collapse;font-size:13px;"> <thead><tr style="background:#1a7a3c;color:#ffffff;"> <th align="left" style="padding:7px 8px;">Urun</th> <th align="right" style="padding:7px 8px;width:60px;">Adet</th> <th align="right" style="padding:7px 8px;width:100px;">Birim</th> <th align="right" style="padding:7px 8px;width:110px;">Tutar</th> </tr></thead> <tbody> <t t-foreach="object.order_line" t-as="line"> <tr t-if="not line.display_type"> <td style="padding:6px 8px;border-bottom:1px solid #eeeeee;"><t t-out="line.product_id.display_name or line.name"/></td> <td align="right" style="padding:6px 8px;border-bottom:1px solid #eeeeee;"><t t-out="line.product_uom_qty"/></td> <td align="right" style="padding:6px 8px;border-bottom:1px solid #eeeeee;"><t t-out="format_amount(line.price_unit, object.currency_id)"/></td> <td align="right" style="padding:6px 8px;border-bottom:1px solid #eeeeee;"><t t-out="format_amount(line.price_total, object.currency_id)"/></td> </tr> </t> </tbody> </table> <table style="width:100%;border-collapse:collapse;margin-top:12px;font-size:13px;"> <tr><td align="right" style="padding:3px 8px;">Ara toplam</td><td align="right" style="padding:3px 8px;width:120px;"><t t-out="format_amount(object.amount_untaxed, object.currency_id)"/></td></tr> <tr><td align="right" style="padding:3px 8px;">KDV</td><td align="right" style="padding:3px 8px;"><t t-out="format_amount(object.amount_tax, object.currency_id)"/></td></tr> <tr style="font-weight:bold;font-size:15px;"><td align="right" style="padding:6px 8px;border-top:2px solid #1a7a3c;">GENEL TOPLAM</td><td align="right" style="padding:6px 8px;border-top:2px solid #1a7a3c;"><t t-out="format_amount(object.amount_total, object.currency_id)"/></td></tr> </table> <t t-set="tx" t-value="object.transaction_ids and object.transaction_ids[-1] or False"/> <p t-if="tx" style="margin:16px 0 0 0;font-size:13px;color:#555555;"> Odeme: <t t-out="tx.provider_id.name"/> · ref <t t-out="tx.reference"/> · durum <t t-out="tx.state"/> </p> <t t-set="siparis_url" t-value="object.get_base_url() + '/web#id=' + str(object.id) + '&model=sale.order&view_type=form'"/> <p style="margin:22px 0 0 0;"> <a t-att-href="siparis_url" style="background:#1a7a3c;color:#ffffff;text-decoration:none;padding:10px 18px;border-radius:4px;display:inline-block;">Siparisi Odoo'da ac</a> </p> </div>
SORUN GIDERME
| BELIRTI | BAK |
|---|---|
| Hiç mail oluşmuyor | Kural aktif mi; "Uygula" filtresi fazla dar mı; tetikleyicideki durum değeri gerçekten "Satış Siparişi" mi. |
| E-postalar listesinde "Başarısız" | Kaydı aç, hata sebebini oku. Genelde "Kimden" adresi SMTP kullanıcısıyla uyuşmuyordur. |
| "Gönderildi" ama kutuya düşmüyor | Önce spam klasörü. Oradaysa alan adının SPF/DKIM kaydı mail sağlayıcısını yetkilendirmiyor demektir — DNS işi. |
| Her sepet için mail geliyor | Tetikleyici "oluşturulduğunda" seçilmiş. Durum tetikleyicisine çevir. |
| Aynı sipariş için 2-3 mail | Kural ödeme işlemi kaydına bağlanmış ya da tetikleyici "kaydetme sırasında" ve filtre durum geçişini sınırlamıyor. |
| Müşteri adı "Public user" görünüyor | O sipariş misafir sepetinden gelmiş, müşteri kartı atanmamış. Gerçek ödenmiş siparişlerde çıkmaz. |
| Maildeki bağlantı yanlış adrese gidiyor | Sistem parametresi web.base.url yanlış ya da http. Teknik ekibe danış. |