merge with origin master

This commit is contained in:
Yan
2017-06-29 14:08:20 +06:30
25 changed files with 369 additions and 29 deletions

View File

@@ -9,10 +9,13 @@ end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.0'
# Use mysql as the database for Active Record
#gem 'mysql2', '>= 0.3.18', '< 0.5'
gem 'pg'
gem 'mysql2', '>= 0.3.18', '< 0.5'
#Use PosgreSQL
gem 'pg'
# redis server for cable
# gem 'redis', '~> 3.0'

View File

@@ -37,14 +37,18 @@ class Api::BillController < Api::ApiController
# # get member information
# member_info = Customer.get_member_account(customer)
# # get printer info
# print_settings=PrintSetting.find_by_unique_code(unique_code)
# # Calculate Price by accounts
# item_price_by_accounts = SaleItem.calculate_price_by_accounts(@sale_items)
# printer = Printer::ReceiptPrinter.new(print_settings)
# printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, item_price_by_accounts, member_info, shop_details)
end

View File

@@ -80,7 +80,7 @@ class HomeController < ApplicationController
redirect_to dashboard_path
elsif employee.role == "cashier"
#check if cashier has existing open cashier
shift = ShiftSale.current_open_shift(employee)
shift = ShiftSale.current_open_shift(employee.id)
if !shift.nil?
redirect_to origami_root_path
else

View File

@@ -0,0 +1,15 @@
class Origami::CashInsController < BaseOrigamiController
def new
end
def create
reference = params[:reference]
remark = params[:remark]
amount = params[:amount]
payment_method = params[:payment_method]
payment_method_reference = params[:payment_method_reference]
p_jour = PaymentJournal.new
p_jour.cash_in(reference, remark, amount, payment_method, payment_method_reference, current_user.id)
end
end

View File

@@ -0,0 +1,13 @@
class Origami::CashOutsController < BaseOrigamiController
def new
end
def create
reference = params[:reference]
remark = params[:remark]
amount = params[:amount]
p_jour = PaymentJournal.new
p_jour.cash_out(reference, remark, amount, current_user.id)
end
end

View File

@@ -6,6 +6,7 @@ class Origami::HomeController < BaseOrigamiController
@rooms = Room.all.active.order('status desc')
@complete = Sale.all
@orders = Order.all.order('date desc')
# @shift = ShiftSale.current_open_shift(current_user.id)
end
# origami table detail

View File

@@ -39,6 +39,7 @@ class Origami::RequestBillsController < BaseOrigamiController
# printer = Printer::ReceiptPrinter.new(print_settings)
# printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, item_price_by_accounts,member_info,shop_details)
# printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, item_price_by_accounts,member_info,shop_details)
end
end

View File

@@ -4,10 +4,11 @@ class Origami::ShiftsController < BaseOrigamiController
end
def show
@shift = ShiftSale.current_open_shift(current_user.id)
end
def new
@float = Lookup.where('lookup_type=?','float')
@float = Lookup.where('lookup_type=?','float_value')
end
def create
@@ -16,6 +17,14 @@ class Origami::ShiftsController < BaseOrigamiController
@shift.create(opening_balance,current_user)
end
def update_shift
@shift = ShiftSale.current_open_shift(current_user.id)
if @shift
@shift.shift_closed_at = DateTime.now.utc
@shift.save
end
end
def edit
end
end

View File

@@ -1,6 +1,7 @@
class Employee < ApplicationRecord
has_secure_password
has_many :shit_sales
validates_presence_of :name, :role
validates_presence_of :password, :on => [:create]
validates :emp_id, uniqueness: true, numericality: true, length: {in: 1..4}, allow_blank: true

View File

@@ -1,2 +1,22 @@
class PaymentJournal < ApplicationRecord
def cash_in(reference, remark, amount, payment_method, payment_method_reference, current_user)
self.payment_references = reference
self.remark = remark
self.credit_amount = amount
self.payment_method = payment_method
self.payment_status = 'paid'
self.payment_method_references = payment_method_reference
self.created_by = current_user
self.save
end
def cash_out(payment_reference, remark, amount, current_user)
self.payment_references = payment_reference
self.remark = remark
self.debit_amount = amount
self.payment_status = 'paid'
self.created_by = current_user
self.save
end
end

View File

@@ -39,8 +39,8 @@ class SaleItem < ApplicationRecord
# Check for actual sale items
sale_items.each do |si|
if si.account_id == a.id
account_price[:price] = account_price[:price] + si.price
end
account_price[:price] = account_price[:price] + si.price
end
end
price_accounts.push(account_price)
end
@@ -57,8 +57,8 @@ class SaleItem < ApplicationRecord
# Check for actual sale items
sale_items.where("is_taxable = false AND remark = 'Discount'").find_each do |si|
if si.account_id == a.id
discount_account[:price] = (discount_account[:price] + si.price) * -1
end
discount_account[:price] = (discount_account[:price] + si.price) * -1
end
end
discount_accounts.push(discount_account)
end

View File

@@ -247,12 +247,14 @@ class SalePayment < ApplicationRecord
end
self.sale.sale_status = "completed"
self.sale.save!
shift = ShiftSale.current_open_shift(self.sale.cashier_id)
if shift
shift.update(self.sale)
end
table_update_status(sObj)
rebat(sObj)
shift = ShiftSale.current_open_shift(self.sale.cashier_id)
puts shift
if !shift.nil?
puts ">>>> shift >>>>>>"
shift.update(self.sale)
end
end
end

View File

@@ -14,13 +14,14 @@
class ShiftSale < ApplicationRecord
belongs_to :cashier_terminal
belongs_to :employee
belongs_to :employee, :foreign_key => 'employee_id'
def self.current_open_shift(current_user)
#if current_user
#find open shift where is open today and is not closed and login by current cashier
today_date = DateTime.now.strftime("%Y-%m-%d")
shift = ShiftSale.where("TO_CHAR(shift_started_at, 'YYYY-MM-DD')=? and shift_started_at is not null and shift_closed_at is null and employee_id = #{current_user.id}",today_date).take
puts today_date
shift = ShiftSale.where("TO_CHAR(shift_started_at, 'YYYY-MM-DD')=? and shift_started_at is not null and shift_closed_at is null and employee_id = #{current_user}",today_date).take
return shift
#end
@@ -35,7 +36,7 @@ class ShiftSale < ApplicationRecord
end
def update(sale)
saleobj = Sale.find(sale)
saleobj = Sale.find_by_sale_id(sale)
self.total_revenue = self.total_revenue + saleobj.total_amount
self.total_discounts = self.total_discounts + saleobj.total_discount
self.total_taxes = self.total_taxes + saleobj.total_tax

View File

@@ -0,0 +1,79 @@
<div class='row'>
<div class="col-lg-11 col-md-11 col-sm-11">
<h2> Payment Credit </h2>
<br>
<table class='table table-striped'>
<tr>
<td> Payment Reference
</td>
<td><input type='text' id='reference'/></td>
</tr>
<tr>
<td> Remark
</td>
<td><input type="text" id='remark'/></td>
</tr>
<tr>
<td> Payment Method
</td>
<td>
<button class='btn btn-primary payment-type' data-id='cash' id='cash'>CASH</button>
<button class='btn btn-primary payment-type' data-id='mpu' id='mpu'>MPU</button>
<button class='btn btn-primary payment-type' data-id='visa' id='visa'>VISA</button>
<button class='btn btn-primary payment-type' data-id='jcb' id='jcb'>JCB</button>
</td>
</tr>
</table>
<div class='row'>
<div class='col-md-2'></div>
<div class='col-md-2'>Reference Number </div>
<div class='col-md-4'><input type='text' id='payment_method_reference'/> </div>
</div>
<br>
<div class='row'>
<div class='col-md-2'></div>
<div class='col-md-2'>Amount</div>
<div class='col-md-4'><input type='text' id='amount'/></div>
</div>
<br><br>
<div class='row'>
<div class='col-md-3'></div>
<div class='col-md-4'><button class='btn btn-primary btn-lg' id='cash_in' style='width:200px;'> Cash In</button></div>
</div>
</div>
<div class="col-lg-1 col-md-1 col-sm-1">
<button class='btn btn-primary ' id='cash_in' style='width:100px;'> Back </button>
</div>
</div>
<script>
var payment_method = "";
$('.payment-type').on('click',function(){
$('.payment-type').css("background-color","#7a62d3")
$(this).css("background-color","green");
var type = $(this).attr('data-id')
if(type == 'cash'){
payment_method = 'cash';
}else if(type == 'mpu'){
payment_method = "mpu";
}else if(type == 'visa'){
payment_method = "visa";
}else if(type == 'jcb'){
payment_method = "jcb";
}
})
$('#cash_in').on('click',function(){
var reference = $('#reference').val();
var remark = $('#remark').val();
var amount = $('#amount').val();
var payment_method_reference = $('#payment_method_reference').val();
$.ajax({type: "POST",
url: "<%= origami_cash_ins_path %>",
data: "reference="+ reference + "&remark=" + remark + "&amount="+ amount + "&payment_method="+payment_method + "&payment_method_reference="+ payment_method_reference,
success:function(result){
window.location.href = '/origami';
}
});
})
</script>

View File

@@ -0,0 +1,44 @@
<h2>Payment Debit</h2>
<div class='row'>
<div class='col-md-9'>
<table class='table table-striped'>
<tr>
<td> Payment Reference
</td>
<td><input id='reference' type='text' value=''/></td>
</tr>
<tr>
<td> Remark
</td>
<td><input id='remark' type="text" value=''/></td>
</tr>
<tr>
<td> Amount
</td>
<td><input id='amount' type="text" value=''/></td>
</tr>
</table>
</div>
</div>
<br><br>
<div class='row'>
<div class='col-md-3'></div>
<div class='col-md-4'><button class='btn btn-primary btn-lg' id='cash_out'> Cash Out</button></div>
</div>
<script>
$('#cash_out').on('click',function(){
var reference = $('#reference').val();
var remark = $('#remark').val();
var amount = $('#amount').val();
$.ajax({type: "POST",
url: "<%= origami_cash_outs_path %>",
data: "reference="+ reference + "&remark=" + remark + "&amount="+ amount,
success:function(result){
window.location.href = '/origami';
}
});
})
</script>

View File

@@ -1,6 +1,6 @@
<div class="row">
<!-- Column One -->
<div class="col-lg-11 col-md-11 col-sm-11">
<div class="col-lg-10 col-md-10 col-sm-10">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
@@ -103,8 +103,11 @@
</div>
<!-- tabs - End -->
</div>
<div class="col-lg-1 col-md-1 col-sm-1">
<div class="col-lg-2 col-md-2 col-sm-2">
<button id="refreshbutton" type="button" class="btn btn-block" style="border-radius:5px;color:#fff;background-color:red;"> Refresh off </button>
<button id="cash_in" type="button" class="btn btn-block btn-primary" style="border-radius:5px;color:#fff;"> Cash In </button>
<button id="cash_out" type="button" class="btn btn-block btn-primary" style="border-radius:5px;color:#fff;"> Cash Out </button>
<button id="close_cashier" type="button" class="btn btn-block btn-primary" style="border-radius:5px;color:#fff;"> Close Cashier </button>
</div>
</div>
<!-- Column One -->
@@ -193,4 +196,16 @@ $(function() {
}
}
});
$('#cash_in').on('click',function(){
window.location.href = '/origami/cash_ins/new';
})
$('#cash_out').on('click',function(){
window.location.href = '/origami/cash_outs/new';
})
$('#close_cashier').on('click',function(){
window.location.href = '/origami/shift/close';
})
</script>

View File

@@ -3,9 +3,11 @@
<div class="col-lg-6 col-md-6 col-sm-6">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist" id="mytab">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#completed" role="tab">Completed</a>
<a class="nav-link" data-toggle="tab" href="#Completed" role="tab">Completed</a>
</li>
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tables" role="tab">Tables</a>
@@ -21,6 +23,7 @@
<div class="tab-content" style="max-height:670px; overflow:auto">
<!--- Panel 0 - Completed Orders -->
<div class="tab-pane" id="completed" role="tabpanel">
<div class="card-columns" style="padding-top:10px; column-gap: 1.2rem;">
<% @complete.each do |sale| %>
@@ -39,6 +42,7 @@
<div class="card-columns" style="padding-top:10px; column-gap: 1.2rem;">
<% @tables.each do |table| %>
<% if table.status == 'occupied' %>
<% if table.get_booking.nil? %>
<div class="card tables red text-white" data-id="<%= table.id %>">
<div class="card-block">
@@ -71,6 +75,7 @@
<div class="card-columns" style="padding-top:10px; column-gap: 1.2rem;">
<% @rooms.each do |room| %>
<% if room.status == 'occupied' %>
<div class="card rooms red text-white" data-id="<%= room.id %>">
<div class="card-block">
<%= room.name %>
@@ -95,6 +100,7 @@
<!--- Panel 3 - Orders -->
<div class="tab-pane" id="orders" role="tabpanel">
<div class="card-columns" style="padding-top:10px; column-gap: 1.2rem;">
<% @orders.each do |order| %>
<div class="card orders red text-white" data-id = "<%= order.order_id %>">
<div class="card-block">
@@ -104,7 +110,6 @@
<% end %>
</div>
</div>
</div>
<!-- tabs - End -->
</div>
@@ -114,6 +119,7 @@
<div class="col-lg-5 col-md-5 col-sm-5">
<div class="card" >
<div class="card-header">
<% if @status_order == 'order' && @status_sale != 'sale' %>
<div id="save_order_id" data-order="<%= @obj_order.order_id %>"><strong id="order-title">ORDER DETAILS </strong> | Table <%= @dining.name rescue "" %></div>
<% elsif @status_sale == 'sale' %>
@@ -124,12 +130,14 @@
<div class="card-title row">
<div class="col-lg-6 col-md-6 col-sm-6">
<p> Receipt No: <span id="receipt_no">
<% if @status_sale == 'sale' %>
<%= @sale_array[0].receipt_no rescue '' %>
<% end %>
</span></p>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 text-right">
<p>Date: <span id="receipt_date"><%= @date.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%></span></p>
</div>
</div>
@@ -146,6 +154,7 @@
<table class="table table-striped" id="order-items-table">
<thead>
<tr>
<th>#</th>
<th class="item-name">Items</th>
<th class="item-attr">QTY</td>
@@ -154,6 +163,7 @@
</thead>
<tbody>
<%
count = 0
sub_total = 0
if @status_sale == "sale"
@@ -173,6 +183,7 @@
<td class='item-attr'><%= sale_item.price %></td>
</tr>
<%
end
end
end
@@ -192,6 +203,7 @@
<td class='item-attr'><%= order_item.qty*order_item.price %></td>
</tr>
<%
end
end
end
@@ -208,6 +220,7 @@
</tr>
<tr>
<td class="charges-name"><strong>Discount:</strong></td>
<td class="item-attr"><strong id="order-discount">(<%= @obj_sale.total_discount rescue 0%>)</strong></td>
</tr>
<% if @status_sale == "sale" %>
@@ -271,7 +284,6 @@
end
end
%>
</div>
</div>
</div>
@@ -279,6 +291,7 @@
<!-- Column Three -->
<div class="col-lg-1 col-md-1 col-sm-1">
<!-- Waiter Buttons -->
<button type="button" class="btn btn-primary btn-block" id='back' >Back</button>
<% if @dining.bookings.length >= 1 %>
<button type="button" id="customer" class="btn btn-primary btn-block" >Customer</button>
@@ -310,6 +323,7 @@
</div>
<script>
$(document).ready(function(){
$('.invoicedetails').on('click',function(){
var dining_id = "<%= @dining.id %>";
var sale_id = this.id;
@@ -394,7 +408,7 @@ $(document).ready(function(){
});
// Print for first bill
$("#first_bill").on('click', function(){
$("#first_bill").on('click', function(){
var sale_id = $('#sale_id').val();
var ajax_url = "/origami/sale/"+ sale_id + "/first_bill";
$.ajax({
@@ -506,5 +520,4 @@ function show_customer_details(customer_id){
}
});
</script>

View File

@@ -1,2 +1 @@
<h1>Origami::Shifts#edit</h1>
<p>Find me in app/views/origami/shifts/edit.html.erb</p>
<h1> Close Cashier </h1>

View File

@@ -1,2 +1,92 @@
<h1>Origami::Shifts#show</h1>
<p>Find me in app/views/origami/shifts/show.html.erb</p>
<div class='row'>
<div class='col-md-10'>
<h1>Close Cashier</h1>
<br>
<table class='table table-striped'>
<tr>
<td>Shift Started At</td>
<td><%= @shift.shift_started_at.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-' %></td>
</tr>
<tr>
<td>Cashier Name</td>
<td><%= @shift.employee.name rescue ''%></td>
</tr>
<tr>
<td>Opening Balance</td>
<td><%= @shift.opening_balance rescue ''%></td>
</tr>
<tr>
<td>Total Revenue</td>
<td><%= @shift.total_revenue rescue ''%></td>
</tr>
<tr>
<td>Total Discount</td>
<td><%= @shift.total_discounts rescue ''%></td>
</tr>
<tr>
<td>Total Tax</td>
<td><%= @shift.total_taxes rescue ''%></td>
</tr>
<tr>
<td>Grand Total</td>
<td><%= @shift.grand_total rescue ''%></td>
</tr>
<tr>
<td>Nett Sale</td>
<td><%= @shift.nett_sales rescue ''%></td>
</tr>
<tr>
<td>Cash Sale</td>
<td><%= @shift.cash_sales rescue ''%></td>
</tr>
<tr>
<td>Credit Sale</td>
<td><%= @shift.credit_sales rescue ''%></td>
</tr>
<tr>
<td>Other Sale</td>
<td><%= @shift.other_sales rescue ''%></td>
</tr>
<tr>
<td>Commercial Tax</td>
<td><%= @shift.commercial_taxes rescue ''%></td>
</tr>
<tr>
<td>Cash In</td>
<td><%= @shift.cash_in rescue ''%></td>
</tr>
<tr>
<td>Cash Out</td>
<td><%= @shift.cash_out rescue ''%></td>
</tr>
</table>
<hr>
<div class='row'>
<div class='col-md-5'>
<span style='font-size:20px;'><b>Closing Balance</b></span>
</div>
<div class='col-md-6'>
<span style='font-size:20px;padding-left:18px;'><b><%= @shift.closing_balance rescue ''%></b></span>
</div>
</div>
</div>
<div class="col-lg-2 col-md-2 col-sm-2">
<button type="button" class="btn btn-primary btn-block" id='back'> Back </button>
<button type="button" class="btn btn-primary btn-block green" id='close_cashier'> Close Cashier </button>
</div>
</div>
<script>
$('#close_cashier').on('click',function(){
$.ajax({type: "POST",
url: "<%= origami_close_shift_path %>",
success:function(result){
console.log(result)
window.location.href = '/';
}
});
})
$('#back').on('click',function(){
window.location.href = '/origami';
})
</script>

View File

@@ -0,0 +1 @@
json.status true

View File

@@ -70,6 +70,8 @@ Rails.application.routes.draw do
#--------- Cashier ------------#
namespace :origami do
resources :cash_ins, only:[:new, :create]
resources :cash_outs, only:[:new, :create]
root "home#index"
get "table/:dining_id" => "home#show" do #origami/:booking_id will show
# resources :discounts, only: [:index,:new, :create ] #add discount type
@@ -98,6 +100,24 @@ Rails.application.routes.draw do
get "/:id/request_bills" => "request_bills#print",:as => "request_bill"
get '/:sale_id/reprint' => 'payments#reprint' ,:defaults => { :format => 'json' }
<<<<<<< HEAD
=======
#---------Shift ---------------#
resources :shifts, only: [:index, :new, :create, :edit]
post 'close_shift' => 'shifts#update_shift'
get 'shift/close' => 'shifts#show'
#shift - index (open/close shift landing page)
#shift - show (sales summary display)
#shift - new (open shift)
#shift - edit (close shift)
resources :cash_mgmt, only: [:new, :create]
#payment - accepting or expending money from cashier - [Cash Journal]
#payment - Incoming payments - [accept all payment types (cash, other payments (except rebate))
#payment - Outing payments - Cash only [ *Misc expeness tracking]
>>>>>>> 11c3be8f4a6b853a11b0e3f27e0fe60af75386d9
#--------- Payment ------------#
get 'sale/:sale_id/first_bill' => 'payments#first_bill', :defaults => { :format => 'json' }
get 'sale/:sale_id/payment' => 'payments#show'

View File

@@ -8,7 +8,7 @@ class CreatePaymentJournals < ActiveRecord::Migration[5.1]
t.string :payment_method,:null => false, :default => "CASH"
t.string :payment_status,:null => false, :default => "NEW"
t.string :payment_method_references
t.integer :created_by, :null => false
t.timestamps
end
end

View File

@@ -83,6 +83,12 @@ void_reason = Lookup.create([{lookup_type:'void_reason', name: 'Approve By Manag
{lookup_type:'void_reason', name: 'Cashier Mistake', value: 'Cashier Mistake'},
{lookup_type:'void_reason', name: 'Waiter Mistake', value: 'Waiter Mistake'}])
# sale void reason
float_value = Lookup.create([{lookup_type:'float_value', name: '500', value: '500'},
{lookup_type:'float_value', name: '1000', value: '1000'},
{lookup_type:'float_value', name: '5000', value: '5000'},
{lookup_type:'float_value', name: '10000', value: '10000'}])
#WALK CUSTOMER - Default CUSTOMER (take key 1)
customer = Customer.create({name:"WALK-IN", email: "cus1@customer.com", contact_no:"000000000",card_no:"000"})
customer2 = Customer.create({name:"TAKEAWAY", email: "cus2@customer.com", contact_no:"111111111",card_no:"111"})
@@ -174,4 +180,5 @@ payment_methods = PaymentMethodSetting.create({payment_method:"JCB",gateway_url:
payment_methods = PaymentMethodSetting.create({payment_method:"Master",gateway_url: "http://192.168.1.47:3006"})
payment_methods = PaymentMethodSetting.create({payment_method:"Redeem",gateway_url: "http://192.168.1.47:3006",merchant_account_id:"vWSsseoZCzxd6xcNf_uS"})
cashier_terminal = CashierTerminal.create({name:"Terminal 1"})
puts " Finished System Default Set Up Data "

BIN
dump.rdb

Binary file not shown.

View File

@@ -11,7 +11,9 @@ namespace :clear do
Sale.delete_all
SaleAudit.delete_all
SalePayment.delete_all
DiningFacility.update_all(status:'available')
ShiftSale.delete_all
PaymentJournal.delete_all
DiningFacility.update_all(status:'available')
puts "Clear Data Done."
end
end