Playground

Html Invoice sederhana lengkap dengan PPN dan Retensi ,Berita Acara ,Kwitansi, Case When ,Round

Bismillah ,lusa ada vendor yang lagi berkembang dan minta dibuatin semacam invoice , process nya begini , ada dua macam 

1. invoice yang dibuat kondisinya 1 invoice dapat mewakili satu material yang terdiri dari banyak quantity yang berbeda, didalamnya tidak ada PPN/Retensi/Diskon /* user juga meminta penomoran invoice dibedakan berdasarkan jenis material yang di invoice kan ,,/*

2. invoice berdasarkan SPK(Surat Perintah Kerja) artinya item/pekerjaan yang ada di detail invoice hanya berdasarkan surat perintah kerja, pada header invoice didalamnya ada pilihan Retensi /*enum ('Yes','No') atau pengurangan 5% dari total invoice dan hasil pengurangan retensi akan ditambah PPN 10% .

saya memillih menggunakan Case When sebagai kondisi dan Round sebagai pembulatannya , total dibuat untuk membuat terbilang nantinya, sementara total2 dibuat ada (,00) dibelakang angkanya . berikut query singkatnya..

select `invoice_other`.`id` AS `id`,
round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) AS `total`,
format(round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0),2) AS `total2`,
((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 10) / 100) AS `ppn_amount`,
format(((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 10) / 100),0) AS `ppn_amount_rupiah`,
(case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end) AS `retensi_amount`,
format((case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end),2) AS `retensi_amount_rupiah`,
(round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end)) AS `subtotal`,
format((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end)),2) AS `subtotal_rupiah`,
(((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end)) * 10) / 100) AS `ppn_ini`,
format((((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end)) * 10) / 100),2) AS `ppn_ini_rupiah`,((((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end)) * 10) / 100) + (round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end))) AS `grand_total`,
format(((((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end)) * 10) / 100) + (round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) - (case when (`invoice_other`.`retensi` = 'Yes') then ((round(sum((`invoice_other_detail`.`qty` * `invoice_other_detail`.`unit_price`)),0) * 5) / 100) else '0' end))),2) AS `grand_total_rupiah` 
from (`invoice_other` join `invoice_other_detail` on((`invoice_other`.`id` = `invoice_other_detail`.`id_header`))) 
group by `invoice_other`.`id`

berikut ini penampakan triger after_delete disetiap tabel_header nya /*

DROP TRIGGER IF EXISTS `after_delete_invoice_other_header`;CREATE DEFINER=`entolnet_entol`@`localhost` TRIGGER `after_delete_invoice_other_header` AFTER DELETE ON `invoice_other` FOR EACH ROW BEGIN
DELETE FROM invoice_other_detail where id_header=OLD.id;
END

supaya detail invoice terisi dengan sendirinya buat triger after insert seperti ini 

DROP TRIGGER IF EXISTS `after_insert_invoice_other_header`;CREATE DEFINER=`entolnet_entol`@`localhost` TRIGGER `after_insert_invoice_other_header` AFTER INSERT ON `invoice_other` FOR EACH ROW INSERT INTO `invoice_other_detail` (`id_header`, `job_description`, `uom`, `qty`, `unit_price`) SELECT 
    NEW.id as id_header,
    spk_detail.id, 
    spk_detail.uom, 
    spk_detail.qty, 
    spk_detail.unit_price
FROM spk_detail where spk_detail.id_header=NEW.spk_number

berikut output invoice , kwitansi , dan berita acaranya Mengenai logo perusahaan anda , alamat vendor anda , silahkan diisi/dikembangkan sesuai kebutuhan . langsung saja, Cek demonya disini  user:[email protected] password :11111111

About the Author

Entol Fakih

Gairah terbesar Saya adalah hiking ke hutan dan menikmati keindahan alam. Meskipun berjiwa romantis, saya adalah geek keseluruhan seperti anggota tim entol.net lainnya.Hal yang dapat menjauhkan saya dari komputer adalah fotografi.


Entol Fakih