Files
eminuxCRM/app/views/mailings/_form.html.erb
T
eminuxandCursor c4e5f289cf
CI / scan_ruby (push) Failing after 11m20s
CI / scan_js (push) Successful in 10m35s
CI / lint (push) Has been cancelled
Commit iniziale di eminuxCRM: CRM Rails con pipeline, campagne email e Docker.
Include autenticazione, progetti isolati, mail marketing HTML con SMTP, test A/B e editor WYSIWYG.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-17 23:01:48 +02:00

117 lines
5.8 KiB
ERB
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<%= form_with model: mailing, class: "grid gap-6 lg:grid-cols-[1fr_16rem]", html: { multipart: true } do |f| %>
<div class="space-y-6 rounded-xl border border-zinc-200 bg-white text-zinc-900 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-100 p-6" data-controller="ab-test">
<%= render "shared/errors", object: mailing %>
<% if @mail_identities.blank? %>
<div class="rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-100">
Serve almeno un account SMTP attivo.
<% if current_user.admin? %>
<%= link_to "Censiscine uno", new_mail_identity_path, class: "font-medium underline" %>.
<% end %>
</div>
<% end %>
<div>
<label class="mb-1 block text-sm font-medium">Nome invio</label>
<%= f.text_field :name, required: true, class: input_class %>
</div>
<div class="grid gap-4 md:grid-cols-2">
<div>
<label class="mb-1 block text-sm font-medium">Account mittente</label>
<%= f.collection_select :mail_identity_id, @mail_identities, :id, :name, { prompt: "Scegli SMTP" }, { class: input_class, required: true } %>
</div>
<div>
<label class="mb-1 block text-sm font-medium">Lista destinatari</label>
<%= f.select :audience, Catalog::MAILING_AUDIENCES.map { |k, v| [v, k] }, {}, class: input_class %>
</div>
<div class="md:col-span-2">
<label class="mb-1 block text-sm font-medium">Pausa tra un invio e laltro (secondi)</label>
<%= f.number_field :interval_seconds, min: 0, max: 86_400, class: input_class %>
<p class="mt-1 text-xs text-zinc-500">0 = in coda una dopo laltra, senza attesa. Es. 120 = una email ogni 2 minuti.</p>
</div>
</div>
<div class="rounded-lg border border-zinc-200 p-4 dark:border-zinc-700">
<label class="flex items-start gap-2 text-sm">
<%= f.check_box :ab_test, { data: { ab_test_target: "checkbox", action: "ab-test#toggle" } } %>
<span>
<span class="font-medium">Test A/B su questa comunicazione</span>
<span class="mt-1 block text-xs text-zinc-500">Due versioni di oggetto e HTML. Ogni destinatario riceve A o B.</span>
</span>
</label>
<div class="mt-4 <%= "hidden" unless mailing.ab_test? %>" data-ab-test-target="panel">
<label class="mb-1 block text-sm font-medium">Come assegnare A e B</label>
<%= f.select :ab_assignment, Catalog::MAILING_AB_ASSIGNMENTS.map { |k, v| [v, k] }, {}, class: input_class %>
<p class="mt-1 text-xs text-zinc-500">«Già in scheda» usa il Test A/B della trattativa (es. campagna MatchLiveTV). «Suddividi a metà» alterna A e B sulla lista.</p>
</div>
</div>
<div class="grid gap-6 <%= "lg:grid-cols-2" if mailing.ab_test? %>" data-ab-test-target="grid">
<div class="space-y-4">
<h2 class="text-sm font-semibold uppercase tracking-wide text-zinc-500">Variante A</h2>
<div>
<label class="mb-1 block text-sm font-medium">Template A (opzionale)</label>
<%= f.collection_select :mail_template_id, @mail_templates, :id, :name, { include_blank: "Nessuno" }, { class: input_class } %>
</div>
<% unless mailing.new_record? %>
<label class="flex items-center gap-2 text-sm">
<%= check_box_tag :use_template_content, "1", false %>
Sostituisci oggetto e HTML A dal template
</label>
<% end %>
<div>
<label class="mb-1 block text-sm font-medium">Oggetto A</label>
<%= f.text_field :subject, required: true, class: input_class %>
</div>
<div>
<%= render "shared/wysiwyg_field", form: f, method: :body_html, label: "Corpo HTML A" %>
</div>
</div>
<div class="space-y-4 <%= "hidden" unless mailing.ab_test? %>" data-ab-test-target="panel">
<h2 class="text-sm font-semibold uppercase tracking-wide text-zinc-500">Variante B</h2>
<div>
<label class="mb-1 block text-sm font-medium">Template B (opzionale)</label>
<%= f.collection_select :mail_template_b_id, @mail_templates, :id, :name, { include_blank: "Nessuno" }, { class: input_class } %>
</div>
<% unless mailing.new_record? %>
<label class="flex items-center gap-2 text-sm">
<%= check_box_tag :use_template_b_content, "1", false %>
Sostituisci oggetto e HTML B dal template
</label>
<% end %>
<div>
<label class="mb-1 block text-sm font-medium">Oggetto B</label>
<%= f.text_field :subject_b, class: input_class %>
</div>
<div>
<%= render "shared/wysiwyg_field", form: f, method: :body_html_b, label: "Corpo HTML B" %>
</div>
</div>
</div>
<div>
<label class="mb-1 block text-sm font-medium">Allegati (stessi per A e B)</label>
<%= f.file_field :files, multiple: true, class: "block w-full text-sm text-zinc-600 file:mr-3 file:rounded-lg file:border-0 file:bg-zinc-900 file:px-3 file:py-2 file:text-sm file:font-medium file:text-white dark:text-zinc-300 dark:file:bg-zinc-100 dark:file:text-zinc-900" %>
<% if mailing.files.attached? %>
<ul class="mt-2 space-y-1 text-sm text-zinc-600 dark:text-zinc-300">
<% mailing.files.each do |file| %>
<li><%= file.filename %></li>
<% end %>
</ul>
<% end %>
</div>
<div class="flex flex-wrap items-center gap-2 border-t border-zinc-100 pt-4 dark:border-zinc-800">
<%= f.submit mailing.new_record? ? "Crea bozza" : "Salva", class: btn_primary %>
<%= link_to "Annulla", mailing.new_record? ? mailings_path : mailing_path(mailing), class: btn_secondary %>
</div>
</div>
<div>
<%= render "shared/merge_tokens" %>
</div>
<% end %>