From 810a6d8afcc0b9fda0be676a2b48a7b1700b68f7 Mon Sep 17 00:00:00 2001 From: Nweni Date: Wed, 7 Jun 2017 14:45:03 +0630 Subject: [PATCH] update sale_payment database --- .../origami/payments_controller.rb | 9 ++- app/models/sale_audit.rb | 5 +- app/models/sale_payment.rb | 70 ++++++++++--------- app/views/origami/payments/show.html.erb | 5 +- .../20170403174111_create_sale_audits.rb | 4 +- 5 files changed, 52 insertions(+), 41 deletions(-) diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 45b03c79..bac414ad 100644 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -6,9 +6,12 @@ class Origami::PaymentsController < BaseOrigamiController def create cash = params[:cash] - card = params[:card] - - #process_payment(invoice, action_by) + sale_id = params[:sale_id] + if(Sale.exists?(sale_id)) + saleObj = Sale.find(sale_id) + sale_payment = SalePayment.new + sale_payment.process_payment(saleObj, @user, cash) + end end def show diff --git a/app/models/sale_audit.rb b/app/models/sale_audit.rb index c99d2dfc..29daa796 100644 --- a/app/models/sale_audit.rb +++ b/app/models/sale_audit.rb @@ -1,6 +1,6 @@ class SaleAudit < ApplicationRecord self.primary_key = "sale_audit_id" - + #primary key - need to be unique generated for SaleAudit before_create :generate_custom_id @@ -44,13 +44,14 @@ class SaleAudit < ApplicationRecord sale_audit.save! end - def record_payment(sale_id, remark, action_by) + def self.record_payment(sale_id, remark, action_by) sale_audit = SaleAudit.new() sale_audit.sale_id = sale_id sale_audit.action = "SALEPAYMENT" sale_audit.action_at = DateTime.now.utc sale_audit.action_by = action_by sale_audit.remark = remark + sale_audit.approved_by = Time.now sale_audit.save! end diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index 15fe4c74..8f9b7294 100644 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -1,17 +1,21 @@ class SalePayment < ApplicationRecord self.primary_key = "sale_payment_id" - + #primary key - need to be unique generated for multiple shops before_create :generate_custom_id belongs_to :sale - :attr_accessor :received_amount, :card_payment_reference, :voucher_no, :giftcard_no, :customer_id, :external_payment_status + attr_accessor :received_amount, :card_payment_reference, :voucher_no, :giftcard_no, :customer_id, :external_payment_status + + def process_payment(invoice, action_by, cash_amount) - def process_payment(invoice, action_by) self.sale = invoice - + self.received_amount = cash_amount + + payment_method = "cash" amount_due = invoice.grand_total + #get all payment for this invoices invoice.sale_payments.each do |payment| if (payment.payment_status == "paid" ) @@ -22,32 +26,33 @@ class SalePayment < ApplicationRecord if (amount_due > 0) payment_status = false #route to payment type - switch (payment_method) - case "cash" + case payment_method + when "cash" payment_status = cash_payment - case "creditnote" - payment_status = creditnote_payment - case "visa" - payment_status = external_terminal_card_payment(:visa) - case "master" - payment_status = external_terminal_card_payment(:master) - case "jcb" - payment_status = external_terminal_card_payment(:jcb) - case "mpu" - payment_status = external_terminal_card_payment(:mpu) - case "unionpay" - payment_status = external_terminal_card_payment(:unionpay) - case "vochure" - payment_status = vochure_payment - case "giftcard" - payment_status = giftcard_payment - case "paypar" - #TODO: implement paypar implementation + when "creditnote" + if !self.customer_id.nil? + payment_status = creditnote_payment(self.customer_id) + end + when "visa" + payment_status = external_terminal_card_payment(:visa) + when "master" + payment_status = external_terminal_card_payment(:master) + when "jcb" + payment_status = external_terminal_card_payment(:jcb) + when "mpu" + payment_status = external_terminal_card_payment(:mpu) + when "unionpay" + payment_status = external_terminal_card_payment(:unionpay) + when "vochure" + payment_status = vochure_payment + when "giftcard" + payment_status = giftcard_payment + when "paypar" payment_status = paypar_payment + else + puts "it was something else" end - - #record an payment in sale-audit remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{amount} | Payment Status ->#{payment_status}" sale_audit = SaleAudit.record_payment(invoice.id, remark, action_by) @@ -66,10 +71,9 @@ class SalePayment < ApplicationRecord private def cash_payment payment_status = false - self.payment_method = "cash" self.payment_amount = self.received_amount - self.outstanding_amount = self.sale.grand_total - received_amount + self.outstanding_amount = self.sale.grand_total - self.received_amount self.payment_status = "paid" payment_method = self.save! @@ -78,7 +82,8 @@ class SalePayment < ApplicationRecord return payment_status end - def creditnote_payment(self.customer_id) + def creditnote_payment(customer_id) + payment_status = false self.payment_method = "creditnote" @@ -147,11 +152,12 @@ class SalePayment < ApplicationRecord end def sale_update_payment_status(paid_amount) - + puts "paid_amount" + puts paid_amount #update amount_outstanding self.sale.amount_received = self.sale.amount_received + paid_amount - self.sale.amount_changed = amount - self.sale.amount_received - if (self.sale.grand_total <= self.sale.amount_received && self.sale.amount_changed > 0) + self.sale.amount_changed = amount - self.sale.amount_received + if (self.sale.grand_total <= self.sale.amount_received && self.sale.amount_changed > 0) self.sale.payment_status = "paid" self.sale.sale_status = "completed" self.sale.save! diff --git a/app/views/origami/payments/show.html.erb b/app/views/origami/payments/show.html.erb index e35696d2..ccd9fd77 100644 --- a/app/views/origami/payments/show.html.erb +++ b/app/views/origami/payments/show.html.erb @@ -172,6 +172,7 @@ $(document).on('click', '.cashier_number', function(event){ original_value = $('#cash').text(); var input_type = $(this).attr("data-type"); + switch (input_type) { case 'num': var input_value = $(this).attr("data-value"); @@ -224,10 +225,10 @@ $( document ).ready(function() { var cash = $('#cash').text(); var credit = $('#credit').text(); var card = $('#card').text(); - + var sale_id = $('#sale_id').text(); $.ajax({type: "POST", url: "<%= origami_payment_process_path %>", - data: "cash="+ cash, + data: "cash="+ cash + "&sale_id=" + sale_id, success:function(result){ alert("THANK YOU") } diff --git a/db/migrate/20170403174111_create_sale_audits.rb b/db/migrate/20170403174111_create_sale_audits.rb index ae6ba3f4..e8197c4b 100644 --- a/db/migrate/20170403174111_create_sale_audits.rb +++ b/db/migrate/20170403174111_create_sale_audits.rb @@ -7,8 +7,8 @@ class CreateSaleAudits < ActiveRecord::Migration[5.0] t.string :action, :null => false t.datetime :action_at, :null => false t.string :action_by, :null => false - t.string :approved_by, :null => false - t.datetime :approved_by, :null => false + t.string :approved_by, :null => true + t.datetime :approved_at, :null => true t.string :remark t.timestamps end