BoletaVenda.svelte 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <script>
  2. import ModalBase from './ModalBase.svelte';
  3. export let visible = false;
  4. export let onClose = () => {};
  5. export let state = '';
  6. export let commodity = '';
  7. let valorSaca = '';
  8. let quantidade = '';
  9. let referencia = 'BRL : 12';
  10. let validade = '';
  11. let calendario = '';
  12. $: total = (Number(valorSaca) || 0) * (Number(quantidade) || 0);
  13. function confirmar() {
  14. const dados = { tipo: 'venda', valorSaca: Number(valorSaca)||0, quantidade: Number(quantidade)||0, referencia, total, validade, calendario, estado: state, commodity };
  15. console.log('BoletaVenda confirmada', dados);
  16. try { onClose?.(); } catch {}
  17. }
  18. function formatBRL(n) { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(Number(n||0)); }
  19. </script>
  20. <ModalBase title="Boleta de Venda" {visible} {onClose}>
  21. <div class="space-y-4">
  22. <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
  23. <div>
  24. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Valor/saca</label>
  25. <input type="number" min="0" step="0.01" bind:value={valorSaca} class="mt-1 block w-full rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700/70 text-gray-900 dark:text-gray-200 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-red-500" />
  26. </div>
  27. <div>
  28. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Quantidade em saca</label>
  29. <input type="number" min="0" step="1" bind:value={quantidade} class="mt-1 block w-full rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700/70 text-gray-900 dark:text-gray-200 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-red-500" />
  30. </div>
  31. </div>
  32. <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
  33. <div>
  34. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Referência</label>
  35. <input type="text" bind:value={referencia} class="mt-1 block w-full rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700/70 text-gray-900 dark:text-gray-200 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-red-500" />
  36. </div>
  37. <div>
  38. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Referência valor total</label>
  39. <input value={formatBRL(total)} readonly class="mt-1 block w-full rounded border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-700/40 text-gray-900 dark:text-gray-200 px-3 py-2" />
  40. </div>
  41. </div>
  42. <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
  43. <div>
  44. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Validade</label>
  45. <input type="date" bind:value={validade} class="mt-1 block w-full rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700/70 text-gray-900 dark:text-gray-200 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-red-500" />
  46. </div>
  47. <div>
  48. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Calendário</label>
  49. <input type="date" bind:value={calendario} class="mt-1 block w-full rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700/70 text-gray-900 dark:text-gray-200 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-red-500" />
  50. </div>
  51. </div>
  52. <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
  53. <div>
  54. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Estado</label>
  55. <input value={state} readonly class="mt-1 block w-full rounded border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-700/40 text-gray-900 dark:text-gray-200 px-3 py-2" />
  56. </div>
  57. <div>
  58. <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">Commodity</label>
  59. <input value={commodity} readonly class="mt-1 block w-full rounded border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-700/40 text-gray-900 dark:text-gray-200 px-3 py-2" />
  60. </div>
  61. </div>
  62. <div class="flex justify-end">
  63. <button class="px-4 py-2 rounded bg-red-600 hover:bg-red-700 text-white focus:outline-none focus:ring-2 focus:ring-red-500" on:click={confirmar}>Confirmar Venda</button>
  64. </div>
  65. </div>
  66. </ModalBase>