Index: .idea/sqldialects.xml
===================================================================
--- .idea/sqldialects.xml	(revision 59b2e9cdcf9053e1764ec21a504c56b5f7ef7aba)
+++ .idea/sqldialects.xml	(revision ac668234e5932db09f8950c545fe0b558551bbcd)
@@ -2,4 +2,6 @@
 <project version="4">
   <component name="SqlDialectMappings">
+    <file url="file://$PROJECT_DIR$/music/triggers/update_invoice_total_after_delete.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/music/triggers/update_invoice_total_after_insert.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/views/avg_price_per_artist.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/views/avg_song_duration_per_artist.sql" dialect="PostgreSQL" />
Index: music/triggers/update_invoice_total_after_delete.sql
===================================================================
--- music/triggers/update_invoice_total_after_delete.sql	(revision ac668234e5932db09f8950c545fe0b558551bbcd)
+++ music/triggers/update_invoice_total_after_delete.sql	(revision ac668234e5932db09f8950c545fe0b558551bbcd)
@@ -0,0 +1,19 @@
+CREATE OR REPLACE FUNCTION update_invoice_total_after_delete()
+RETURNS TRIGGER AS $$
+BEGIN
+    UPDATE invoice
+    SET total = (
+        SELECT COALESCE(SUM(unit_price * quantity), 0)
+        FROM invoice_line
+        WHERE invoice_id = OLD.invoice_id
+    )
+    WHERE invoice_id = OLD.invoice_id;
+
+    RETURN OLD;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE TRIGGER trg_update_invoice_total_after_delete
+AFTER DELETE ON invoice_line
+FOR EACH ROW
+EXECUTE FUNCTION update_invoice_total_after_delete();
Index: music/triggers/update_invoice_total_after_insert.sql
===================================================================
--- music/triggers/update_invoice_total_after_insert.sql	(revision ac668234e5932db09f8950c545fe0b558551bbcd)
+++ music/triggers/update_invoice_total_after_insert.sql	(revision ac668234e5932db09f8950c545fe0b558551bbcd)
@@ -0,0 +1,19 @@
+CREATE OR REPLACE FUNCTION update_invoice_total_after_insert()
+RETURNS TRIGGER AS $$
+BEGIN
+    UPDATE invoice
+    SET total = (
+        SELECT COALESCE(SUM(unit_price * quantity), 0)
+        FROM invoice_line
+        WHERE invoice_id = NEW.invoice_id
+    )
+    WHERE invoice_id = NEW.invoice_id;
+
+    RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE TRIGGER trg_update_invoice_total_after_insert
+AFTER INSERT ON invoice_line
+FOR EACH ROW
+EXECUTE FUNCTION update_invoice_total_after_insert();
Index: music/views.py
===================================================================
--- music/views.py	(revision 59b2e9cdcf9053e1764ec21a504c56b5f7ef7aba)
+++ music/views.py	(revision ac668234e5932db09f8950c545fe0b558551bbcd)
@@ -19,4 +19,5 @@
     return redirect('home_page')
 
+## LIST OF ALL ##
 def album_list(request):
     heading = request.GET.get('model', 'All Albums')
@@ -38,5 +39,5 @@
 
 
-# VIEWS
+## VIEWS ##
 def tracks_count_per_genre(request):
     with connection.cursor() as cursor:
@@ -108,4 +109,6 @@
     return render(request, 'most_listened_genre_per_customer.html', {'data': data})
 
+
+## QUERRIES ##
 
 def genres_per_customer(request):
