From 5b1bb6f6cdcbd7a19747b8cfff44d21a3cad0f46 Mon Sep 17 00:00:00 2001 From: Min Zeya Phyo Date: Tue, 11 Apr 2017 13:51:09 +0800 Subject: [PATCH] sales and orders methods updates --- app/controllers/api/payments_controller.rb | 14 ++- app/models/order.rb | 4 +- app/models/order_item.rb | 2 +- app/models/sale.rb | 89 +++++++++++++++++++ app/models/sale_item.rb | 4 + app/models/seed_generator.rb | 20 +++++ config/routes.rb | 8 +- db/migrate/20170403135121_create_customers.rb | 1 + .../20170408105938_create_seed_generators.rb | 12 +++ spec/models/seed_generator_spec.rb | 5 ++ 10 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 app/models/seed_generator.rb create mode 100644 db/migrate/20170408105938_create_seed_generators.rb create mode 100644 spec/models/seed_generator_spec.rb diff --git a/app/controllers/api/payments_controller.rb b/app/controllers/api/payments_controller.rb index 970a53f7..b899bbad 100644 --- a/app/controllers/api/payments_controller.rb +++ b/app/controllers/api/payments_controller.rb @@ -1,8 +1,18 @@ class Api::PaymentsController < ActionController::API - #Show customer by ID + #Payment by Invoice ID + # Payment Method - [Cash | CreditNote | VISA | MASTER | etc..] + # Invoice No | Amount + # Output + # Status - [True/False] | Invoice | error_message (* when status false) def create - @customer = Customer.find_by(params[:id]) + @invoice = Sale.find(params[:invoice_id]) + end + + # Update of payment status from the external party + # Invoice No | Payment ID | External params [] (* third party references and status) + # + def update end end diff --git a/app/models/order.rb b/app/models/order.rb index f9ea85c6..066d65fc 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -30,13 +30,11 @@ class Order < ApplicationRecord end booking.save! - self.default_values if self.save! self.adding_line_items - #Add Order Table and Room relation afrer order creation if booking.type = "TableBooking" #add to table_booking_order @@ -60,7 +58,7 @@ class Order < ApplicationRecord end def adding_line_items - + if self.items #loop to add all items to order self.items.each do |item| diff --git a/app/models/order_item.rb b/app/models/order_item.rb index 085bb524..30d91466 100644 --- a/app/models/order_item.rb +++ b/app/models/order_item.rb @@ -25,7 +25,7 @@ class OrderItem < ApplicationRecord oitem.set_order_items = item["sub_order_items"] oitem.item_order_by = item_order_by end - logger.info orderitem.to_yml + logger.debug orderitem.to_yml orderitem.save! diff --git a/app/models/sale.rb b/app/models/sale.rb index f15ed7f8..3ad727c1 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -1,4 +1,93 @@ class Sale < ApplicationRecord + before_create :generate_receipt_no belongs_to :cashier belongs_to :customer + has_many :sale_items + has_many :sale_discounts + has_many :sale_taxes + has_many :sale_payments + has_many :sale_orders + + def generate_invoice_from_order (order_no) + end + + def generate_invoice_by_items (items) + end + + def add_item (item) + #save sale_audit + end + + def remove_item (item) + #save sale_audit + + end + + def apply_discount_item (promotion_id, item) + end + + def apply_discount (discount_type, discount_code) + #save action to sale_audit + end + + def accept_payment (payment_method, amount, payment_ref, payment_external_result) + end + + def void_sales (void_by, reason, approval_code) + #save sale_audit + end + + #compute - invoice total + def compute + sales_items = self.sale_items + + #Computation Fields + total_items_price = 0 + total_discounts = 0 + total_taxable = 0 + rounding_adjustment = 0 + + sales_items.each do |item| + #compute each item and added to total + end + + apply_tax + end + + def apply_tax + #if tax is not apply create new record + self.sale_taxes.each |existing_tax| + #delete existing and create new + existing_tax.delete + end + + #tax_profile - list by order_by + tax_profiles = TaxProfile.all.order("order_by asc") + + + #Creat new tax records + tax_profiles.each do |tax| + sale_tax = SaleTax.new(:sale => self) + sale_tax.tax_name = tax.name + sale_tax.tax_rate = tax.rate + #include or execulive + sale_tax.tax_payable_amount = self.total_amount * tax.rate + sale_tax.inclusive = tax.inclusive + sale_tax.save + end + + + + end + + + private + #Generate new Receipt No when it is not assigned + def generate_receipt_no + #Date-Shift- + if !self.receipt_no.nil? + prefix = Date.now() + self.receipt_no = prefix.to_s + "/" + self.shit_id.to_s + "/" + SeedGenerator.new_receipt_no().to_s + end + end end diff --git a/app/models/sale_item.rb b/app/models/sale_item.rb index 60e57903..82b20237 100644 --- a/app/models/sale_item.rb +++ b/app/models/sale_item.rb @@ -1,3 +1,7 @@ class SaleItem < ApplicationRecord belongs_to :sale + + #compute items - discount, tax, price_change + def compute_item + end end diff --git a/app/models/seed_generator.rb b/app/models/seed_generator.rb new file mode 100644 index 00000000..573e0ff6 --- /dev/null +++ b/app/models/seed_generator.rb @@ -0,0 +1,20 @@ +class SeedGenerator < ApplicationRecord + def self.new_receipt_no + seed = SeedGenerator.find_by_model("sale") + new_receipt_no = 0 + if (seed.nil?) + seed = SeedGenerator.new() + seed.model = "sale" + new_receipt_no = seed.next + seed.save + + else + current_no = seed.next + seed.next = seed.next + seed.increase_by + seed.current = current_no + seed.save + end + + return seed.current + end +end diff --git a/config/routes.rb b/config/routes.rb index e8fda356..4d77a09c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -31,15 +31,17 @@ Rails.application.routes.draw do resources :orders, only: [:create, :show, :update] #Current active bookings resources :bookings, only: [:index, :create, :update] - resources :customers, only: [:index, :show, :create] + resources :customers, only: [:index, :show, :create, :update] #Generating Invoice and making payments - resources :invoices, only: [:create, :show, :update :show ] do - resources :payments, only: [:create] + resources :invoices, only: [:create, :show, :update ] do + resources :payments, only: [:create, :update] end end #--------- Cashier ------------# namespace :cashier do + + #bookings #orders #invoices #payment diff --git a/db/migrate/20170403135121_create_customers.rb b/db/migrate/20170403135121_create_customers.rb index 75e63f7a..76e9894a 100644 --- a/db/migrate/20170403135121_create_customers.rb +++ b/db/migrate/20170403135121_create_customers.rb @@ -5,6 +5,7 @@ class CreateCustomers < ActiveRecord::Migration[5.0] t.string :company t.string :contact_no t.string :email + t.date :date_of_birth t.string :membership_id t.string :membership_type t.string :membership_authentication_code diff --git a/db/migrate/20170408105938_create_seed_generators.rb b/db/migrate/20170408105938_create_seed_generators.rb new file mode 100644 index 00000000..6ccf669f --- /dev/null +++ b/db/migrate/20170408105938_create_seed_generators.rb @@ -0,0 +1,12 @@ +class CreateSeedGenerators < ActiveRecord::Migration[5.0] + def change + create_table :seed_generators do |t| + t.string :model, :null => false, :default => "sale" + t.integer :increase_by, :null => false, :default => 1 + t.bigint :current, :null => false ,:default => 1 + t.bigint :next, :null => false, :default => 2 + + t.timestamps + end + end +end diff --git a/spec/models/seed_generator_spec.rb b/spec/models/seed_generator_spec.rb new file mode 100644 index 00000000..5cd406de --- /dev/null +++ b/spec/models/seed_generator_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SeedGenerator, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end