report ui format

This commit is contained in:
Yan
2017-06-13 14:59:00 +06:30
137 changed files with 3958 additions and 1281 deletions

View File

@@ -59,6 +59,8 @@ gem 'sidekiq'
# Pagination
gem 'kaminari', '~> 0.16.3'
# Datatable
gem 'filterrific'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
@@ -91,4 +93,8 @@ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'httparty', '~> 0.15.5'
# gem 'momentjs-rails', '>= 2.9.0'
# gem 'bootstrap-datepicker-rails'
# gem 'momentjs-rails', '>= 2.9.0'
# gem 'bootstrap3-datetimepicker-rails', '~> 4.17.47'
gem 'bootstrap-datepicker-rails'

View File

@@ -72,6 +72,7 @@ GEM
faker (1.7.3)
i18n (~> 0.5)
ffi (1.9.18)
filterrific (2.1.2)
font-awesome-rails (4.7.0.2)
railties (>= 3.2, < 5.2)
globalid (0.4.0)
@@ -238,6 +239,7 @@ DEPENDENCIES
database_cleaner
factory_girl_rails (~> 4.0)
faker
filterrific
font-awesome-rails
httparty (~> 0.15.5)
jbuilder (~> 2.5)

View File

@@ -0,0 +1,17 @@
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require bootstrap
//= require jquery_ujs
//= require turbolinks
//= require cable

View File

@@ -40,31 +40,36 @@ $(document).ready(function(){
// complete for queue item
$('.order-complete').on('click',function(){
var _self= $(this);
var _self = $(this); // To know in ajax return
var assigned_item_id=$(this).attr('id').substr(15);
var params = { 'id':assigned_item_id };
var station=$(this).parent().parent(".queue_station").parent().parent().attr('id');
$.ajax({
type: 'POST',
url: '/oqs/update_delivery',
data: params,
dataType: 'json',
success: function(data){
var queue_station=_self.parent().parent(".queue_station");
success: function(data){
for (i = 0; i < data.length; i++) {
var queue_station = $('#assigned_queue_' + data[i]).parent().parent(".queue_station");
var station = queue_station.parent().parent().attr('id');
// Remove a queue card from current station
queue_station.remove();
// Remove a queue card from current station
queue_station.remove();
// Remove a queue card from current station
queue_station.children('.card-footer').remove();
// Add removed queue card from station to completed
$("#completed").children('.card-columns').append(queue_station);
// Remove a queue card from current station
queue_station.children('.card-footer').remove();
// Add removed queue card from station to completed
$("#completed").children('.card-columns').append(queue_station);
// update queue item count in station
$("#"+station+"_count").text(parseInt($("#"+station+"_count").text())-1);
$("#completed_count").text(parseInt($("#completed_count").text())+1);
// update queue item count in each station
var station_count=parseInt($("#"+station+"_count").text()) - 1;
$("#"+station+"_count").text(station_count);
}
// update queue item count in completed station
$("#completed_count").text(parseInt($("#completed_count").text()) + data.length);
alert("updated!");
}

View File

@@ -17,5 +17,142 @@
//= require turbolinks
//= require cable
//= require settings/processing_items
//= require bootstrap-datepicker
//= require bootstrap-datepicker/core
//= require bootstrap-datepicker/locales/bootstrap-datepicker.es
$(document).on("focus", "[data-behaviour~='datepicker']", function(e){
$(this).datepicker({"format": "yyyy-M-dd", "weekStart": 1, "autoclose": true});
$('.dropdown-toggle').dropdown();
});
/*
* ToDo Move to here from pages
*
*
$(function(){
$('#custom_excel').hide();
$('#custom_excel').click(function(){
var url = $('#custom_excel').attr('data-url');
$('#frm_report').attr('action',url)
$('#frm_report').submit();
// window.location = url;
});
var item = $('#item').val();
var payment_type = $('#payment_type');
if(item == 'order'){
$('#cashier').hide();
$('#waiter').show();
if(payment_type){
$('#payment_type').hide();
}
}
else if(item == 'sale'){
$('#waiter').hide();
$('#cashier').show();
}
else{
$('#waiter').hide();
$('#cashier').show();
$("#item").val('sale');
}
});
//Reset the form to pervious values
$("#branch").val(<%=params[:branch]%>);
$("#waiter").val("<%=params[:waiter]%>");
$("#cashier").val(<%=params[:cashier]%>);
$("#product").val(<%=params[:product]%>);
$("#singer").val(<%=params[:singer]%>);
$("#item").val('<%=params[:item]%>');
$("#guest_role").val('<%=params[:guest_role]%>');
$("#from").val("<%=params[:from]%>");
$("#to").val("<%=params[:to]%>");
$("#sel_period").val(<%=params[:period]%>);
$("#sel_sale_type").val(<%=params[:sale_type]%>);
<% if params[:period_type] == 1 || params[:period_type] == "1" %>
$("#rd_period_type_1").attr("checked","checked");
<% else %>
$("#rd_period_type_0").attr("checked","checked");
<% end %>
$(".btn-group button").removeClass("active");
<% report_type = params[:report_type].blank? ? "0" : params[:report_type] %>
$("#btn_report_type_<%= report_type %>").addClass("active");
$('#item').change(function(){
var item = $('#item').val();
var payment_type = $('#payment_type');
if(item == 'sale'){
$('#waiter').hide();
$('#cashier').show();
if(payment_type){
$('#payment_type').show();
}
}
else{
$('#cashier').hide();
$('#waiter').show();
if(payment_type){
$('#payment_type').hide();
}
}
});
$(function(){
var check_arr = [];
var search = '<%= params[:period_type] %>';
if(search){
if(parseInt(search) == 0){
search_by_period();
}
else{
search_by_date();
}
}else{
search_by_period();
}
$('#sel_period').change(function(){
search_by_period();
});
function search_by_period(){
var period = $('#sel_period').val();
var period_type = 0;
var from = "";
var to = "";
}
$('#from').change(function(){
search_by_date();
});
$('#to').change(function(){
search_by_date();
});
function search_by_date(){
var from = $('#from').val();
var to = $('#to').val();
var period = 0;
var period_type = 1;
if(to != '' && from != ''){
shift_name = from + ',' + to;
check_arr.push(to);
// console.log(check_arr.length)
if(check_arr.length == 1){
}
if(check_arr.length == 3){
check_arr = [];
}
}
}
});
*/

View File

@@ -5,6 +5,7 @@
//= require_self
//= require_tree ./channels
// Temp Disable
(function() {
this.App || (this.App = {});

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/

View File

@@ -17,21 +17,32 @@
//= require cable
$(document).ready(function(){
// Enable/Disable Button
control_button("disabled");
$(".orders").on('click', function(){
var zone_name=$(this).find(".orders-table").text();
$("#order-sub-total").text('');
// $("#order-food").text('');
// $("#order-beverage").text('');
$("#order-discount").text('');
$("#order-Tax").text('');
$("#order-grand-total").text('');
var zone_name=$(this).find(".orders-table").text();
var receipt_no=$(this).find(".orders-receipt-no").text();
var unique_id=$(this).find(".orders-id").text();
var order_status=$(this).find(".orders-order-status").text().trim();
var unique_id = $(this).find(".orders-id").text();
var order_status=$(this).find(".orders-order-status").text().trim();
// Enable/Disable Button
control_button(order_status);
//for customer button
if(unique_id.charAt(0) == 'S'){
$("#customer").removeAttr('disabled');
}else{
$("#customer").attr('disabled','disabled');
}
$("#customer").removeAttr('disabled');
var customer_id=$(this).find(".customer-id").text();
show_customer_details(customer_id);
var cashier="";
var receipt_date="";
@@ -46,10 +57,10 @@ $(document).ready(function(){
// AJAX call for order
$.ajax({
type: "GET",
url: "origami/" + unique_id,
data: { 'id' : unique_id },
success:function(result){
type: "POST",
url: "/origami/" + unique_id,
data: { 'booking_id' : unique_id },
success:function(result){
for (i = 0; i < result.length; i++) {
var data = JSON.stringify(result[i]);
var parse_data = JSON.parse(data);
@@ -57,28 +68,30 @@ $(document).ready(function(){
// Receipt Header
receipt_no = result[i].receipt_no;
cashier = result[i].cashier_name;
receipt_date = result[i].receipt_date;
receipt_date = new Date(result[i].receipt_date);
show_date = receipt_date.getDate() + "-" + receipt_date.getMonth() + "-" + receipt_date.getFullYear() + ' ' + receipt_date.getHours()+ ':' + receipt_date.getMinutes()
$("#receipt_no").text(receipt_no);
$("#cashier").text(cashier==null?"":cashier);
$("#receipt_date").text(receipt_date);
$("#cashier").text(cashier == null ? "" : cashier);
$("#receipt_date").text(show_date);
//Receipt Charges
sub_total += (parse_data.qty*parse_data.price);
discount_amount = parse_data.discount_amount;
discount_amount = parse_data.discount_amount == null? '0.0' : parse_data.discount_amount;
tax_amount = parse_data.tax_amount;
grand_total_amount = parse_data.grand_total_amount;
$("#order-sub-total").text(sub_total);
$("#order-food").text('');
$("#order-beverage").text('');
// $("#order-food").text('');
// $("#order-beverage").text('');
$("#order-discount").text(discount_amount);
$("#order-Tax").text(tax_amount);
$("#order-grand-total").text(grand_total_amount);
// Ordered Items
var order_items_rows = "<tr>" +
var order_items_rows = "<tr>" +
"<td class='item-name'>" + parse_data.item_name + "</td>" +
"<td class='item-attr'>" + parse_data.qty + "</td>" +
"<td class='item-attr'>" + parse_data.qty*parse_data.price + "</td>" +
@@ -94,11 +107,11 @@ $(document).ready(function(){
$(this).addClass('selected-item');
});
// Bill Request
// Bill Request
$('#request_bills').click(function() {
var order_id=$(".selected-item").find(".orders-id").text();
var order_id=$(".selected-item").find(".orders-id").text();
if(order_id!=""){
window.location.href = '/origami/request_bills/'+ order_id
window.location.href = '/origami/' + order_id + '/request_bills'
}
else {
alert("Please select an order!");
@@ -106,42 +119,50 @@ $(document).ready(function(){
return false;
});
// Discount for Payment
// Discount for Payment
$('#discount').click(function() {
var order_id=$(".selected-item").find(".orders-id").text();
var order_id=$(".selected-item").find(".orders-id").text();
if(order_id!=""){
window.location.href = '/origami/discount/'+ order_id
window.location.href = '/origami/' + order_id + '/discount'
}
else {
alert("Please select an order!");
}
}
return false;
});
// Pay Discount for Payment
$("#pay-discount").on('click', function(){
$("#pay-discount").on('click', function(e){
e.preventDefault();
var sale_id = $('#sale-id').text();
var sale_item_id = $('.selected-item').attr('id');
var sub_total = $('#order-sub-total').text();
var grand_total = $('#order-grand-total').text();
var discount_type = $('#discount-type').val();
var discount_value = $('#discount-amount').val();
var discount_value = $('#discount-amount').val();
var discount_amount = discount_value;
var ajax_url = "/origami/" + sale_id + "/discount";
if(sale_item_id != null){
ajax_url = "/origami/" + sale_item_id + "/discount";
}
// For Percentage Discount
if(discount_type == 1){
if(discount_type == 1){
discount_amount=(sub_total*discount_value)/100;
}
var params = {'sale_id': sale_id, 'grand_total' : grand_total, 'discount_type':discount_type, 'discount_value':discount_value, 'discount_amount':discount_amount};
var params = {'sale_id': sale_id, 'sale_item_id': sale_item_id, 'grand_total' : grand_total, 'discount_type':discount_type, 'discount_value':discount_value, 'discount_amount':discount_amount};
$.ajax({
type: "POST",
url: "/origami/discount",
url: ajax_url,
data: params,
success:function(result){ }
});
});
// Payment for Bill
$('#pay-bill').click(function() {
var sale_id=$(".selected-item").find(".orders-id").text();
@@ -150,17 +171,58 @@ $(document).ready(function(){
}
else {
alert("Please select an order!");
}
}
return false;
});
$('#customer').click(function() {
var sale_id=$(".selected-item").find(".orders-id").text();
window.location.href = '/crm/customers/'+ sale_id + "/assign_sale_id"
var sale = $(".selected-item").find(".orders-id").text();
if (sale.substring(0, 3)=="SAL") {
var sale_id = sale
}else{
var sale_id = $(".selected-item").find(".order-cid").text();
}
window.location.href = '/origami/'+ sale_id + "/add_customer"
return false;
});
function show_customer_details(customer_id){
if(window.location.pathname.substring(0, 12) == "/origami/SAL"){
var url = customer_id+"/get_customer/"
}else{
var url = "origami/"+customer_id+"/get_customer/"
}
$('.customer_detail').removeClass('hide');
//Start Ajax
$.ajax({
type: "GET",
url: url,
data: {},
dataType: "json",
success: function(data) {
$("#customer_name").text(data["customer"].name);
$.each(data["response_data"]["data"], function (i) {
if(data["response_data"]["data"][i]["accountable_type"] == "RebateAccount"){
var balance = data["response_data"]["data"][i]["balance"];
console.log(balance);
if (balance == "0.0") {
$("#customer_amount").text('0.0');
}else{
$("#customer_amount").text(balance);
}
}
});
}
});
//End Ajax
}
/* For Receipt - Calculate discount or tax */
$('.cashier_number').on('click', function(event){
if(event.handled !== true) {
@@ -168,7 +230,7 @@ $(document).ready(function(){
original_value = $('#discount-amount').val();
var input_type = $(this).attr("data-type");
switch (input_type) {
case 'num':
var input_value = $(this).attr("data-value");
@@ -179,13 +241,14 @@ $(document).ready(function(){
else{
$('#discount-amount').val(original_value + '' + input_value);
update_balance();
}
}
break;
case 'add':
var input_value = $(this).attr("data-value");
amount = parseInt(input_value) + parseInt(original_value);
amount = parseInt(input_value);
$('#discount-amount').val(amount);
$('#discount-type').val(1);
update_balance();
break;
@@ -207,19 +270,29 @@ $(document).ready(function(){
}
});
$('.discount-item-row').on('click',function(){
$('.discount-item-row').removeClass('selected-item');
$(this).addClass('selected-item');
});
});
/* Button Control by Status */
function control_button(order_status){
function control_button(order_status){
if(order_status=="billed"){
$("#request_bills").prop('disabled', true);
$("#discount").prop('disabled', false);
$("#pay").prop('disabled', false);
$("#pay-bill").prop('disabled', false);
}
else if(order_status=="new") {
$("#request_bills").prop('disabled', false);
$("#discount").prop('disabled', true);
$("#pay").prop('disabled', true);
$("#pay-bill").prop('disabled', true);
}
else {
$("#request_bills").prop('disabled', true);
$("#discount").prop('disabled', true);
$("#pay-bill").prop('disabled', true);
}
}
@@ -236,9 +309,6 @@ function update_balance(){
}
var total = (parseFloat(sub_total) + parseFloat(tax)) - discount_amount;
$('#order-discount').text(discount_amount);
$('#order-discount').text(discount_amount);
$('#order-grand-total').text(total);
}

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/

View File

@@ -7,3 +7,5 @@
// min-height: 75rem;
// padding-top: 4.5rem;
// }

View File

@@ -2,7 +2,7 @@
@import "bootstrap";
@import "font-awesome";
@import "theme";
@import "bootstrap-datepicker3";
@import 'bootstrap-datepicker';
/* Show it is fixed to the top */
// body {
@@ -58,3 +58,19 @@ ul.dropdown-menu li a{
/*----- Header Bar -----*/
/*----- Header Bar -----*/
/*----- Layout ------ */
.margin-top-20 {
margin: 20px 0 0 0;
}
/*----- Layout ------ */
/*--- Reset --- */
select.form-control {
height: inherit !important;
}
/*--- Reset --- */

View File

@@ -7,17 +7,39 @@
// min-height: 75rem;
// padding-top: 4.5rem;
// }
.others-payment{
line-height:100px;
text-align:center;
color:white;
width:300px;
height:100px;
font-size:18px;
}
.orders-table {
cursor: pointer;
}
.cashier_number{
height:76px;
line-height:80px;
width: 33%;
height:70px;
line-height:70px;
text-align:center;
background:#54A5AF;
float:left;
margin:2px;
// float:left;
// margin:2px;
font-size:20px;
color:white;
// cursor:pointer;
}
.pay{
width: 98%;
height:211px;
line-height:211px;
text-align:center;
font-size:20px;
color:white;
cursor:pointer;
}
.cashier_number:hover{
@@ -25,15 +47,20 @@
}
.long{
width:100%
width:49%;
}
.sold {
background-color: red;
}
.paid {
background-color: green;
}
.selected-item {
background-color: blue;
color: #fff !important;
background-color: blue !important;
}
/* Reciept Style */
@@ -42,17 +69,17 @@
}
.charges-name {
width: 80%;
width: 80%;
text-align: left;
}
.item-name {
width: 60%;
width: 60%;
text-align: left;
}
.item-attr {
width: 20%;
width: 20%;
text-align: right;
}
@@ -70,9 +97,29 @@
background-color: #009900
}
.left{
margin-left:1px;
}
.bottom{
margin-bottom: 1px;
}
/*----- Reset -----*/
select.form-control {
height: inherit !important;
}
.form-horizontal .form-group {
margin-right: 0px !important;
}
/* Discount */
.discount-item-row {
cursor: pointer;
}
tr.discount-item-row:hover {
background-color: #e3e3e3 !important;
}

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the origami/redeem_payments controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the settings/orders controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -8,12 +8,18 @@ class Api::BillController < Api::ApiController
#create Bill by Booking ID
if (params[:booking_id])
@sale = Sale.new
@status = @sale.generate_invoice_from_booking(params[:booking_id], current_login_employee.name)
booking = Booking.find(params[:booking_id])
if booking
if booking.sale_id.nil?
@sale = Sale.new
@status, @sale_id = @sale.generate_invoice_from_booking(params[:booking_id], current_login_employee.name)
else
@status = true
end
end
elsif (params[:order_id])
@sale = Sale.new
@status = @sale.generate_invoice_from_order(params[:order_id], current_login_employee.name)
@status, @sale_id = @sale.generate_invoice_from_order(params[:order_id], current_login_employee.name)
end
end

View File

@@ -9,4 +9,9 @@ class Api::CustomersController < ActionController::API
def show
@customer = Customer.find_by(params[:id])
end
#Show customer detail by Order item
def get_customer_order
@customer = Customer.find(params[:id])
end
end

View File

@@ -38,9 +38,8 @@ class Api::OrdersController < Api::ApiController
#Create Table Booking or Room Booking
if !params["booking_id"].nil? && params[:booking_id].to_i > 0
#@order.new_booking = false
@order.new_booking = true
if !params["booking_id"].nil?
@order.new_booking = false
@order.booking_id = params[:booking_id]
end

View File

@@ -1,8 +1,77 @@
class BaseReportController < ActionController::Base
include LoginVerification
include LoginVerification
layout "application"
#before_action :check_installation
protect_from_forgery with: :exception
#before_action :check_installation
protect_from_forgery with: :exception
PERIOD = {
"today" => 0,
"yesterday" => 1,
"this_week" => 2,
"last_week" => 3,
"last_7" => 4,
"this_month" => 5,
"last_month" => 6,
"last_30" => 7,
"this_year" => 8,
"last_year" => 9
}
def get_date_range_from_params
period_type = params[:period_type]
period = params[:period]
from = params[:from]
to = params[:to]
day_ref = Time.now
if period_type.to_i == 1
if params[:from] && params[:to]
if params[:from] != "" && params[:to] !=""
from = DateTime.strptime(params[:from], "%m/%d/%Y")
to = DateTime.strptime(params[:to], "%m/%d/%Y")
else
from = day_ref.beginning_of_day.utc
to = day_ref.end_of_day.utc
end
end
else
case period.to_i
when PERIOD["today"]
from = day_ref.beginning_of_day.utc
to = day_ref.end_of_day.utc
when PERIOD["yesterday"]
from = (day_ref - 1.day).beginning_of_day.utc
to = (day_ref - 1.day).end_of_day.utc
when PERIOD["this_week"]
from = Time.now.beginning_of_week.utc
to = Time.now.utc
when PERIOD["last_week"]
from = (day_ref - 7.day).beginning_of_week.utc
to = (day_ref - 7.day).end_of_week.utc
when PERIOD["last_7"]
from = (day_ref - 7.day).utc
to = Time.now.utc
when PERIOD["this_month"]
from = Time.now.beginning_of_month.utc
to = Time.now.utc
when PERIOD["last_month"]
from = (day_ref - 1.month).beginning_of_month.utc
to = (day_ref - 1.month).end_of_month.utc
when PERIOD["last_30"]
from = (day_ref - 30.day).utc
to = Time.now.utc
when PERIOD["this_year"]
from = Time.now.beginning_of_year.utc
to = Time.now.utc
when PERIOD["last_year"]
from = (day_ref - 1.year).beginning_of_year.utc
to = (day_ref - 1.year).end_of_year.utc
end
end
return from, to
end
end

View File

@@ -1,4 +1,4 @@
class Crm::BookingsController < ApplicationController
class Crm::BookingsController < BaseCrmController
def update_booking
booking = Booking.find(params[:booking_id])

View File

@@ -1,16 +1,26 @@
class Crm::CustomersController < ApplicationController
class Crm::CustomersController < BaseCrmController
before_action :set_crm_customer, only: [:show, :edit, :update, :destroy]
# GET /crm/customers
# GET /crm/customers.json
def index
@sale_id = 0
@crm_customers = Customer.all
@crm_customer = Customer.new
@membership = Customer.get_member_group
if @membership["status"] == true
@member_group = @membership["data"]
filter = params[:filter]
if filter.nil?
@crm_customers = Customer.order("customer_id").page(params[:page])
#@products = Product.order("name").page(params[:page]).per(5)
else
@crm_customers = Customer.where("name LIKE ?", "%#{filter}%").order("name").page(params[:page])
end
#@crm_customers = Customer.all
@crm_customer = Customer.new
if @crm_customer.valid?
@crm_customer.errors.messages
end
# @membership = Customer.get_member_group
# if @membership["status"] == true
# @member_group = @membership["data"]
# end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @crm_customers }
@@ -20,6 +30,15 @@ class Crm::CustomersController < ApplicationController
# GET /crm/customers/1
# GET /crm/customers/1.json
def show
@orders = Order.where("customer_id=?", params[:id])
if @orders
@order_items = []
@orders.each do |bo|
@order_items = @order_items + bo.order_items
end
end
end
# GET /crm/customers/new
@@ -35,27 +54,28 @@ class Crm::CustomersController < ApplicationController
# POST /crm/customers
# POST /crm/customers.json
def create
def create
@crm_customers = Customer.new(customer_params)
respond_to do |format|
if @crm_customers.save
name = customer_params[:name]
phone = customer_params[:contact_no]
email = customer_params[:email]
date_of_birth = customer_params[:date_of_birth]
membership_id = params[:membership_id]
dob = customer_params[:date_of_birth]
member_group_id = params[:member_group_id]
membership = MembershipSetting.find_by_membership_type("paypar_url")
app_token = membership.auth_token.to_s
url = membership.gateway_url.to_s + "/api/create_membership_customer".to_s
memberaction = MembershipAction.find_by_membership_type("create_membership_customer")
merchant_uid = memberaction.merchant_account_id.to_s
url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
response = HTTParty.post(url, :body => { name: name,phone: phone,email: email,
date_of_birth: date_of_birth,
membership_id: membership_id}.to_json,
dob: dob,
member_group_id: member_group_id,merchant_uid:merchant_uid}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
@@ -63,77 +83,72 @@ class Crm::CustomersController < ApplicationController
)
if response["status"] == true
puts "hhhhhhhhhhhhhhhhhh"
puts params[:sale_id]
customer = Customer.find(@crm_customers.customer_id)
status = customer.update_attributes(membership_id: response["customer_datas"]["id"])
if params[:sale_id] != 0
format.html { redirect_to crm_customers_path, notice: 'Customer was successfully created.' }
else
format.html { redirect_to '/crm/customers/'+params[:sale_id]+'/assign_sale_id', notice: 'Customer was successfully created.' }
end
if params[:sale_id]
format.html { redirect_to '/origami/'+params[:sale_id]+'/add_customer', notice: 'Customer was successfully created.' }
else
format.html { redirect_to crm_customers_path, notice: 'Customer was successfully created'}
end
# format.json { render :index, status: :created, location: @crm_customers }
else
@crm_customers.destroy
if params[:sale_id] != 0
format.html { redirect_to crm_customers_path, notice: response["message"] }
if params[:sale_id]
format.html { redirect_to '/origami/'+params[:sale_id]+'/add_customer'}
else
format.html { redirect_to '/crm/customers/'+params[:sale_id]+'/assign_sale_id', notice: response["message"] }
format.html { redirect_to crm_customers_path, notice: response["message"] }
end
end
# format.json { render :index, status: :created, location: @crm_customers }
else
if params[:sale_id] != 0
format.html { redirect_to crm_customers_path}
format.json { render json: @crm_customers.errors, status: :unprocessable_entity }
else
format.html { redirect_to '/crm/customers/'+params[:sale_id]+'/assign_sale_id', notice: response["message"] }
end
if params[:sale_id]
format.html { redirect_to '/origami/'+params[:sale_id]+'/add_customer'}
else
format.html { redirect_to crm_customers_path}
format.json { render json: @crm_customers.errors, status: :unprocessable_entity }
end
end
end
end
end
# PATCH/PUT /crm/customers/1
# PATCH/PUT /crm/customers/1.json
def update
respond_to do |format|
if @crm_customer.update(customer_params)
name = customer_params[:name]
phone = customer_params[:contact_no]
email = customer_params[:email]
date_of_birth = customer_params[:date_of_birth]
id = customer_params[:membership_id]
dob = customer_params[:date_of_birth]
id = @crm_customer.membership_id
member_group_id = params[:member_group_id]
membership = MembershipSetting.find_by_membership_type("paypar_url")
app_token = membership.auth_token.to_s
url = membership.gateway_url.to_s + "/api/update_membership_customer".to_s
memberaction = MembershipAction.find_by_membership_type("update_membership_customer")
merchant_uid = memberaction.merchant_account_id.to_s
url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
response = HTTParty.post(url, :body => { name: name,phone: phone,email: email,
date_of_birth: date_of_birth,
id: id}.to_json,
dob: dob,
id: id,member_group_id:member_group_id,merchant_uid:merchant_uid}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
)
format.html { redirect_to crm_customers_path, notice: 'Customer was successfully updated.' }
format.json { render :show, status: :ok, location: @crm_customer }
else
format.html { render :edit }
format.html { render :index }
format.json { render json: @crm_customer.errors, status: :unprocessable_entity }
end
@@ -150,23 +165,6 @@ class Crm::CustomersController < ApplicationController
end
end
# DELETE /crm/customers/1
# DELETE /crm/customers/1.json
def get_sale_id
@sale_id = params[:sale_id]
@crm_customers = Customer.all
@crm_customer = Customer.new
@membership = Customer.get_member_group
if @membership["status"] == true
@member_group = @membership["data"]
end
respond_to do |format|
format.html { render action: "index"}
format.json { render json: @crm_customers }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_crm_customer
@@ -176,8 +174,6 @@ class Crm::CustomersController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def customer_params
params.require(:customer).permit(:name, :company, :contact_no, :email, :date_of_birth, :membership_type, :membership_authentication_code)
params.require(:customer).permit(:name, :company, :contact_no, :email, :date_of_birth)
end
end

View File

@@ -0,0 +1,74 @@
class Crm::DiningQueuesController < BaseCrmController
before_action :set_dining_queue, only: [:show, :edit, :update, :destroy]
# GET /crm/dining_queues
# GET /crm/dining_queues.json
def index
@dining_queues = DiningQueue.all
end
# GET /crm/dining_queues/1
# GET /crm/dining_queues/1.json
def show
end
# GET /crm/dining_queues/new
def new
@dining_queue = DiningQueue.new
end
# GET /crm/dining_queues/1/edit
def edit
end
# POST /crm/dining_queues
# POST /crm/dining_queues.json
def create
@dining_queue = DiningQueue.new(dining_queue_params)
respond_to do |format|
if @dining_queue.save
format.html { redirect_to crm_dining_queues_path, notice: 'Dining queue was successfully created.' }
format.json { render :show, status: :created, location: @dining_queue }
else
format.html { render :new }
format.json { render json: @dining_queue.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /crm/dining_queues/1
# PATCH/PUT /crm/dining_queues/1.json
def update
respond_to do |format|
if @dining_queue.update(dining_queue_params)
format.html { redirect_to crm_dining_queues_path, notice: 'Dining queue was successfully updated.' }
format.json { render :show, status: :ok, location: @dining_queue }
else
format.html { render :edit }
format.json { render json: @dining_queue.errors, status: :unprocessable_entity }
end
end
end
# DELETE /crm/dining_queues/1
# DELETE /crm/dining_queues/1.json
def destroy
@dining_queue.destroy
respond_to do |format|
format.html { redirect_to crm_dining_queues_path, notice: 'Dining queue was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_dining_queue
@dining_queue = DiningQueue.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def dining_queue_params
params.require(:dining_queue).permit(:name, :contact_no, :queue_no)
end
end

View File

@@ -1,8 +1,13 @@
class Crm::HomeController < BaseCrmController
def index
@booking = Booking.all
@booking = Booking.all
@customer = Customer.all
from = Time.now.beginning_of_day.utc
to = Time.now.end_of_day.utc
@queue = DiningQueue.where('created_at BETWEEN ? AND ?', from, to).order('queue_no ASC')
# .where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
end

View File

@@ -27,10 +27,18 @@ class Oqs::HomeController < BaseOqsController
# update delivery status when complete click
def update_delivery_status
removed_item = []
assigned_item_id = params[:id]
assigned_item=AssignedOrderItem.find(assigned_item_id)
assigned_item.delivery_status=true
assigned_item.save
assigned_items=AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'");
# update delivery status for completed same order items
assigned_items.each do |ai|
ai.delivery_status=true
ai.save
removed_item.push(ai.assigned_order_item_id)
end
render :json => removed_item.to_json
end
# Query for OQS with status

View File

@@ -1,31 +1,39 @@
class Oqs::PrintController < ApplicationController
# Print Order Item
def print
unique_code="OrderItemPdf"
assigned_item_id=params[:id]
assigned_order_item=AssignedOrderItem.select("order_id, item_code").where("assigned_order_item_id='" + assigned_item_id + "'")
assigned_item=AssignedOrderItem.find(assigned_item_id)
assigned_items=AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'");
# print when complete click
print_settings=PrintSetting.find_by_unique_code(unique_code)
order_queue_printer= Printer::OrderQueuePrinter.new(print_settings)
order_queue_printer.print_order_item(print_settings,assigned_order_item[0].order_id, assigned_order_item[0].item_code )
# update print status when complete click
assigned_item=AssignedOrderItem.find(assigned_item_id)
assigned_item.print_status=true
assigned_item.save
order_queue_printer.print_order_item(print_settings,assigned_item.order_id, assigned_item.item_code )
# update print status for completed same order items
assigned_items.each do |ai|
ai.print_status=true
ai.save
end
end
# Print Order Details
def print_order_summary
unique_code="OrderSummaryPdf"
assigned_item_id=params[:id]
assigned_order_item=AssignedOrderItem.select("order_id").where('assigned_order_item_id='+assigned_item_id)
assigned_item=AssignedOrderItem.find(assigned_item_id)
assigned_items=AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'");
# print when complete click
print_settings=PrintSetting.find_by_unique_code(unique_code)
order_queue_printer= Printer::OrderQueuePrinter.new(print_settings)
order_queue_printer.print_order_summary(print_settings,assigned_order_item[0].order_id)
order_queue_printer.print_order_summary(print_settings,assigned_item.order_id)
# update print status when complete click
assigned_item=AssignedOrderItem.find(assigned_item_id)
assigned_item.print_status=true
assigned_item.save
# update print status for completed same order items
assigned_items.each do |ai|
ai.print_status=true
ai.save
end
end
end

View File

@@ -1,7 +1,43 @@
class Origami::CustomersController < BaseOrigamiController
#Form to add customer -
def index
end
def create
# GET /crm/customers/1
# GET /crm/customers/1.json
def show
end
def add_customer
@sale_id = params[:sale_id]
filter = params[:filter]
if filter.nil?
@crm_customers = Customer.order("name").page params[:page]
else
@crm_customers = Customer.where("name LIKE ?", "%#{filter}%").order("name").page params[:page]
end
# @crm_customers = Kaminari.paginate_array(@crm_customers).page(params[:page]).per(2)
@crm_customer = Customer.new
# @membership = Customer.get_member_group
# if @membership["status"] == true
# @member_group = @membership["data"]
# end
# puts "Errrrrrrrrrrrrrrrrr"
# puts @crm_customer.valid?
respond_to do |format|
# format.html { render :template => "crm/customers/index" }
format.html { render action: "index"}
format.json { render json: @crm_customers }
end
end
end

View File

@@ -2,7 +2,7 @@ class Origami::DiscountsController < BaseOrigamiController
#discount page show from origami index with selected order
def index
sale_id = params[:id]
sale_id = params[:id]
if Sale.exists?(sale_id)
@sale_data = Sale.find(sale_id)
end
@@ -11,30 +11,34 @@ class Origami::DiscountsController < BaseOrigamiController
#discount for selected order
def create
sale_id = params[:sale_id]
sale_item_id = params[:sale_item_id]
discount_type = params[:discount_type]
discount_value = params[:discount_value]
discount_amount = params[:discount_amount]
grand_total = params[:grand_total]
discount_value = params[:discount_value]
discount_amount = params[:discount_amount]
grand_total = params[:grand_total]
if discount_type == 0
remark="Discount " + discount_amount + " as net"
else
remark="Discount " + discount_amount + " as percentage"
end
if discount_type == 0
remark="Discount " + discount_amount + " as net"
else
remark="Discount " + discount_amount + " as percentage"
end
#update discount for sale
sale = Sale.find(sale_id)
sale.total_discount = discount_amount
sale.grand_total = grand_total
sale.save
#update discount for sale
sale = Sale.find(sale_id)
sale.total_discount = sale.total_discount + discount_amount.to_f
sale.grand_total = grand_total
sale.save
#save sale item for discount
if sale_item_id != nil
origin_sale_item = SaleItem.find(sale_item_id)
end
sale_item = SaleItem.new
#pull
sale_item.sale_id = sale_id
sale_item.product_code = 0
sale_item.product_name = "Discount"
sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
sale_item.product_name = "Overall Discount"
sale_item.remark = remark
sale_item.qty = 1
@@ -45,7 +49,7 @@ class Origami::DiscountsController < BaseOrigamiController
sale_item.price = sale_item.qty * sale_item.unit_price
sale_item.save
redirect_to origami_root_path
redirect_to origami_path(sale_id)
end
end

View File

@@ -1,28 +1,95 @@
class Origami::HomeController < BaseOrigamiController
def index
if params[:booking_id] != nil
type=params[:booking_id].split('-')[0];
# Sale
if type == "SAL"
@selected_item = Sale.find(params[:booking_id])
@selected_item_type="Sale"
# Booking
else
@selected_item = Order.find(params[:booking_id])
@selected_item_type="Order"
end
end
puts params[:booking_id]
@completed_orders = Order.get_completed_order()
@booking_orders = Order.get_booking_order_table()
@booking_rooms = Order.get_booking_order_rooms()
@orders = Order.get_orders()
end
end
def show
str = []
type=params[:id].split('-')[0];
def item_show
selection(params[:booking_id],1)
end
def selection(selected_id, is_ajax)
str = []
type=selected_id.split('-')[0];
# Sale
if type == "SAL"
@order_details = SaleItem.get_order_items_details(params[:id])
@order_details = SaleItem.get_order_items_details(params[:booking_id])
@order_details.each do |ord_detail|
str.push(ord_detail)
end
render :json => str.to_json
# Booking
else
@order_details = OrderItem.get_order_items_details(params[:id])
@order_details = OrderItem.get_order_items_details(params[:booking_id])
@order_details.each do |ord_detail|
str.push(ord_detail)
end
end
end
if is_ajax == 1
render :json => str.to_json
else
str
end
end
def update_sale_by_customer
id = params[:sale_id][0,3]
if(id == "SAL")
sale = Sale.find(params[:sale_id])
else
sale = Order.find(params[:sale_id])
end
status = sale.update_attributes(customer_id: params[:customer_id])
if status == true
render json: JSON.generate({:status => true})
else
render json: JSON.generate({:status => false, :error_message => "Record not found"})
end
end
def get_customer
@customer = Customer.find(params[:customer_id])
membership = MembershipSetting.find_by_membership_type("paypar_url")
memberaction = MembershipAction.find_by_membership_type("get_all_member_account")
merchant_uid = memberaction.merchant_account_id.to_s
url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
response = HTTParty.get(url, :body => { membership_id: @customer.membership_id,merchant_uid:merchant_uid}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
)
respond_to do |format|
format.js do
render :json => {
:response_data => response.as_json,
:customer => @customer}
end
end
end
end

View File

@@ -0,0 +1,17 @@
class Origami::MpuController < BaseOrigamiController
def index
@sale_id = params[:sale_id]
end
def create
cash = params[:amount]
sale_id = params[:sale_id]
if(Sale.exists?(sale_id))
saleObj = Sale.find(sale_id)
sale_payment = SalePayment.new
@status, @sale = sale_payment.process_payment(saleObj, @user, cash, "mpu")
end
end
end

View File

@@ -5,6 +5,7 @@ class Origami::OthersPaymentsController < BaseOrigamiController
@membership_rebate_balance = 0
@sale_id = params[:sale_id]
@payment_method_setting = PaymentMethodSetting.all
# @sale_id = params[:sale_id]
# sale_data = Sale.find_by_sale_id(@sale_id)

View File

@@ -17,7 +17,17 @@ class Origami::PaymentsController < BaseOrigamiController
def show
sale_id = params[:sale_id]
if Sale.exists?(sale_id)
@cash = 0.0
@other = 0.0
@sale_data = Sale.find_by_sale_id(sale_id)
@sale_data.sale_payments.each do |spay|
if spay.payment_method == "cash"
@cash = spay.payment_amount
end
if spay.payment_method == "mpu" || spay.payment_method == "paypar"
@other += spay.payment_amount
end
end
end
end

View File

@@ -8,7 +8,6 @@ class Origami::PayparPaymentsController < BaseOrigamiController
saleObj = Sale.find(sale_id)
sale_payment = SalePayment.new
status,msg =sale_payment.process_payment(saleObj, @user, redeem_amount,payment_method)
if status == true
@out = true, "Success!"
else
@@ -19,4 +18,4 @@ class Origami::PayparPaymentsController < BaseOrigamiController
end
end
end
end

View File

@@ -0,0 +1,47 @@
class Origami::RedeemPaymentsController < BaseOrigamiController
def index
@sale_id = params[:sale_id]
payment_method = params[:payment_method]
@membership_rebate_balance=0
sale_data = Sale.find_by_sale_id(@sale_id)
if sale_data
if sale_data.customer_id
customer_data= Customer.find_by_customer_id(sale_data.customer_id)
if customer_data
@membership_id = customer_data.membership_id
if !@membership_id.nil?
membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
if membership_setting.gateway_url
member_actions =MembershipAction.find_by_membership_type("get_account_balance")
if member_actions.gateway_url
@campaign_type_id = member_actions.additional_parameter["campaign_type_id"]
url = membership_setting.gateway_url.to_s + member_actions.gateway_url.to_s
merchant_uid= member_actions.merchant_account_id
membership_data = SalePayment.get_paypar_account(url,membership_setting.auth_token,@membership_id,@campaign_type_id,merchant_uid)
if membership_data["status"]==true
@membership_rebate_balance=membership_data["balance"]
@out = true, @membership_rebate_balance,@membership_id
end
else
@out =false,0
end
else
@out = false,0
end
else
@out = false, 0
end
else
@out = false, 0
end
else
@out = false, 0
end
else
@out = false, 0
end
@out = false, 0
end
end

View File

@@ -14,17 +14,23 @@ class Origami::RequestBillsController < BaseOrigamiController
@sale_items = SaleItem.where("sale_id=?",@sale_id)
else
@sale_data = Sale.find_by_sale_id(check_booking.sale_id)
@sale_items = SaleItem.where("sale_id=?",@sale_id)
@sale_items = SaleItem.where("sale_id=?",@sale_data.sale_id)
end
unique_code = "ReceiptBillPdf"
customer_name = Customer.select("name").where('customer_id=' + @sale_data.customer_id)
customer= Customer.where('customer_id=' + @sale_data.customer_id)
print_settings=PrintSetting.find_by_unique_code(unique_code)
# find order id by sale id
sale_order = SaleOrder.find_by_sale_id(@sale_data.sale_id)
# Calculate Food and Beverage Total
food_total, beverage_total = SaleItem.calculate_food_beverage(@sale_items)
printer = Printer::ReceiptPrinter.new(print_settings)
printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer_name)
redirect_to origami_root_path
printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, food_total, beverage_total)
redirect_to origami_path(@sale_data.sale_id)
end
end

View File

@@ -0,0 +1,21 @@
class Reports::DailySaleController < BaseReportController
PERIOD = {
"today" => 0,
"yesterday" => 1,
"this_week" => 2,
"last_week" => 3,
"last_7" => 4,
"this_month" => 5,
"last_month" => 6,
"last_30" => 7,
"this_year" => 8,
"last_year" => 9
}
def index
from, to = get_date_range_from_params
@sale_data = Sale.get_receipt_no_list(from,to)
@sale_data = Kaminari.paginate_array(@sale_data).page(params[:page]).per(50)
end
end

View File

@@ -0,0 +1,15 @@
class Reports::ReceiptNoController < BaseReportController
def index
from, to = get_date_range_from_params
puts "from..."
puts from
puts "to..."
puts to
@sale_data = Sale.get_receipt_no_list(from,to)
@sale_data = Kaminari.paginate_array(@sale_data).page(params[:page]).per(50)
end
def show
end
end

View File

@@ -4,44 +4,7 @@ class Settings::MembershipActionsController < ApplicationController
# GET /settings/membership_actions
# GET /settings/membership_actions.json
def index
type = params[:type]
@sale_id = params[:sale_id]
if type.nil?
@settings_membership_actions = Settings::MembershipAction.all
else
membership_actions_data=Settings::MembershipAction.find_by_membership_type(type)
if !membership_actions_data.nil?
url = params[:gateway_url].to_s + membership_actions_data.gateway_url.to_s
puts url.to_json
sale_data = Sale.find_by_sale_id(@sale_id)
if sale_data.customer_id
customer_data= Customer.find_by_customer_id(sale_data.customer_id)
@membership_id = customer_data.membership_id
@campaign_type_id =1
if !@membership_id.nil?
membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
membership_data = SalePayment.get_paypar_account(url,membership_setting.auth_token,@membership_id,@campaign_type_id)
if membership_data["status"]==true
@membership_rebate_balance=membership_data["balance"]
@out = true, @membership_rebate_balance
else
@out = false, 0
end
else
@out = false, 0
end
else
@out =false, 0
end
# campaign_type_id=1
# get_account_data = MembershipAction.get_account_data(url)
else
@out = false, 0
end
render :json => @out.to_json
end
@settings_membership_actions = MembershipAction.all
end
# GET /settings/membership_actions/1
@@ -51,7 +14,7 @@ class Settings::MembershipActionsController < ApplicationController
# GET /settings/membership_actions/new
def new
@settings_membership_action = Settings::MembershipAction.new
@settings_membership_action = MembershipAction.new
end
# GET /settings/membership_actions/1/edit
@@ -61,11 +24,11 @@ class Settings::MembershipActionsController < ApplicationController
# POST /settings/membership_actions
# POST /settings/membership_actions.json
def create
@settings_membership_action = Settings::MembershipAction.new(settings_membership_action_params)
@settings_membership_action = MembershipAction.new(settings_membership_action_params)
respond_to do |format|
if @settings_membership_action.save
format.html { redirect_to @settings_membership_action, notice: 'Membership action was successfully created.' }
format.html { redirect_to settings_membership_actions_path, notice: 'Membership action was successfully created.' }
format.json { render :show, status: :created, location: @settings_membership_action }
else
format.html { render :new }
@@ -79,7 +42,7 @@ class Settings::MembershipActionsController < ApplicationController
def update
respond_to do |format|
if @settings_membership_action.update(settings_membership_action_params)
format.html { redirect_to @settings_membership_action, notice: 'Membership action was successfully updated.' }
format.html { redirect_to settings_membership_action_path, notice: 'Membership action was successfully updated.' }
format.json { render :show, status: :ok, location: @settings_membership_action }
else
format.html { render :edit }
@@ -101,11 +64,11 @@ class Settings::MembershipActionsController < ApplicationController
private
# Use callbacks to share common setup or constraints between actions.
def set_settings_membership_action
@settings_membership_action = Settings::MembershipAction.find(params[:id])
@settings_membership_action = MembershipAction.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def settings_membership_action_params
params.require(:settings_membership_action).permit(:membership_type, :is_active, :gateway_communication_type, :gateway_url, :auth_token, :merchant_account_id, :created_by, :additional_parameter)
params.require(:membership_action).permit(:membership_type, :is_active, :gateway_communication_type, :gateway_url, :auth_token, :merchant_account_id, :created_by, :additional_parameter)
end
end

View File

@@ -0,0 +1,32 @@
class Settings::OrdersController < ApplicationController
def index
filter = params[:filter]
if filter.nil?
orders = Order.order("order_id desc").limit(1000)
else
order = Order.where("order_id LIKE ?", "%#{filter}%").order("order_id desc").limit(1000).page(params[:page])
if order.count > 0
orders = order
else
orders = Order.order("order_id desc").limit(1000)
flash[:notice] = "There is no data."
end
end
@orders = Kaminari.paginate_array(orders).page(params[:page]).per(50)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @orders }
end
end
def show
@order = Order.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @order }
end
end
end

View File

@@ -0,0 +1,42 @@
class Settings::SalesController < ApplicationController
def index
search_date = params[:date]
receipt_no = params[:receipt_no]
today = Date.today
if receipt_no.nil? && search_date.nil?
@sales = Sale.where("NOT sale_status = 'void'" ).order("sale_id desc").limit(500)
else
if !search_date.blank? && receipt_no.blank?
sale = Sale.where("DATE_FORMAT(receipt_date,'%Y-%b-%d') = ?", search_date).order("sale_id desc").limit(500).page(params[:page])
elsif !search_date.blank? && !receipt_no.blank?
sale = Sale.where("receipt_no LIKE ? or DATE_FORMAT(receipt_date,'%Y-%b-%d') = ?", "%#{receipt_no}%", search_date).order("sale_id desc").limit(500).page(params[:page])
else
sale = Sale.where("receipt_no LIKE ?", receipt_no).order("sale_id desc").limit(500).page(params[:page])
end
if sale.count > 0
@sales = sale
else
@sales = Sale.where("NOT sale_status = 'void'").order("sale_id desc").limit(500)
end
end
@sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @sales }
end
end
def show
@sale = Sale.find(params[:id])
# @sale_receivables = SaleReceivable.where('sale_id = ?', @sale.id)
respond_to do |format|
format.html # show.html.erb
format.json { render json: @sale }
end
end
end

View File

@@ -0,0 +1,2 @@
module Crm::DiningQueuesHelper
end

View File

@@ -0,0 +1,2 @@
module Origami::RedeemPaymentsHelper
end

View File

@@ -0,0 +1,2 @@
module Settings::OrdersHelper
end

5
app/models/crm.rb Normal file
View File

@@ -0,0 +1,5 @@
module Crm
def self.table_name_prefix
'crm_'
end
end

View File

@@ -9,14 +9,16 @@ class Customer < ApplicationRecord
validates_presence_of :name, :contact_no, :email
validates :contact_no, uniqueness: true
validates :email, uniqueness: true
paginates_per 50
def self.get_member_group
membership = MembershipSetting.find_by_membership_type("paypar_url")
app_token = membership.auth_token.to_s
membership = MembershipSetting.find_by_membership_type("paypar_url")
memberaction = MembershipAction.find_by_membership_type("get_all_member_group")
app_token = membership.auth_token.to_s
url = membership.gateway_url.to_s + "/api/get_all_member_group".to_s
url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
response = HTTParty.get(url,
:body => { app_token: app_token}.to_json,
:headers => {
@@ -30,6 +32,14 @@ class Customer < ApplicationRecord
end
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
def lastest_invoices
sales.where(:customer_id => self.id).order("created_at desc").limit(5)
end

View File

@@ -9,10 +9,11 @@ class DiningFacility < ApplicationRecord
scope :active, -> {where(is_active: true)}
def get_current_booking
booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='occupied' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and checkout_at is null").limit(1)
puts "enter booking"
booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and checkout_at is null").limit(1)
if booking.count > 0 then
return booking[0]
return booking[0].booking_id
else
return nil
end

View File

@@ -0,0 +1,2 @@
class DiningQueue < ApplicationRecord
end

View File

@@ -17,6 +17,10 @@ class Lookup < ApplicationRecord
"Gateway Communication Type" => "gateway_communication_type"}
end
# def self.get_by_type( lookup_type)
# Lookup.select("value, name").where("lookup_type = ?", lookup_type ).order("name asc").map { |r| [r.name, r.value] }
# end
def self.collection_of(type)
Lookup.select("name, value").where("lookup_type" => type ).map { |l| [l.name, l.value] }

View File

@@ -0,0 +1,2 @@
class MembershipAction < ApplicationRecord
end

View File

@@ -25,14 +25,15 @@ class Order < ApplicationRecord
booking = nil
if self.new_booking
puts "a"
booking = Booking.create({:dining_facility_id => self.table_id,:type => "TableBooking",
:checkin_at => Time.now.utc, :checkin_by => self.employee_name,
:booking_status => "assign" })
table = DiningFacility.find(self.table_id)
table.status = "occupied"
table.save
else
if (self.booking_id.to_i > 0 )
booking = Booking.find(self.booking_id)
end
booking = Booking.find(self.booking_id)
end
booking.save!
@@ -222,20 +223,34 @@ class Order < ApplicationRecord
#Origami: Cashier : to view booking order Table
def self.get_booking_order_table
booking_orders = Booking.select("sales.receipt_no,orders.status as order_status,
booking_orders = Booking.select("sales.receipt_no,orders.status as order_status, sales.sale_status as sale_status,
orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id,
bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
.joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
.joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
.joins("left join orders on orders.order_id = booking_orders.order_id")
.joins("left join orders on orders.order_id = booking_orders.order_id")
.joins("left join sales on sales.sale_id = bookings.sale_id")
.where("booking_orders.order_id IS NOT NULL and dining_facilities.type=? and dining_facilities.is_active=?",DiningFacility::TABLE_TYPE,true)
.group("bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.status")
.group("bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.status,orders.order_id")
end
#Origami: Cashier : to view booking order Table
def self.get_completed_order
completed_orders = Booking.select("sales.receipt_no,orders.status as order_status,orders.order_id,
bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id")
.joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
.joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
.joins("left join orders on orders.order_id = booking_orders.order_id")
.joins("left join sales on sales.sale_id = bookings.sale_id")
.where("sales.sale_status='completed'")
.group("bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.status,orders.order_id")
end
#Origami: Cashier : to view order type Room
def self.get_booking_order_rooms
booking_rooms = Booking.select("sales.receipt_no,orders.status as order_status,bookings.booking_id,
booking_rooms = Booking.select("sales.receipt_no,orders.status as order_status, sales.sale_status as sale_status,
orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id,
bookings.booking_id,orders.customer_id as customer_id,
sales.sale_id as sale_id,dining_facilities.name as room_name")
.joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
.joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
@@ -243,7 +258,7 @@ class Order < ApplicationRecord
.joins("left join sale_orders on sale_orders.order_id = orders.order_id")
.joins("left join sales on sales.sale_id = sale_orders.sale_id")
.where("booking_orders.order_id IS NOT NULL and dining_facilities.type=? and dining_facilities.is_active=?",DiningFacility::ROOM_TYPE,true)
.group("bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name")
.group("bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.customer_id,orders.order_id")
end
#Origami: Cashier : to view order type Room
@@ -263,8 +278,9 @@ class Order < ApplicationRecord
def self.get_orders
from = Time.now.beginning_of_day.utc
to = Time.now.end_of_day.utc
orders = Order.select("orders.order_id as order_id,sales.receipt_no,orders.status as order_status,
bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
orders = Order.select("orders.order_id as order_id,sales.receipt_no,orders.status as order_status, sales.sale_status as sale_status,
orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id
,bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
.joins("left join booking_orders on booking_orders.order_id = orders.order_id
left join bookings on bookings.booking_id = booking_orders.order_id
left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
@@ -272,7 +288,7 @@ class Order < ApplicationRecord
left join sale_orders on sale_orders.order_id = orders.order_id
left join sales on sales.sale_id = sale_orders.sale_id")
.where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
.group("orders.order_id,order_items.order_items_id,dining_facilities.name,sales.receipt_no,bookings.booking_id,sales.sale_id")
.group("orders.order_id,order_items.order_items_id,dining_facilities.name,sales.receipt_no,bookings.booking_id,sales.sale_id,orders.customer_id")
end

View File

@@ -40,7 +40,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
left join customers as cus ON cus.customer_id = orders.customer_id")
.where("orders.order_id='" + code.to_s + "'")
.where("orders.order_id='" + code + "'")
.group("order_items.item_code")
end

View File

@@ -63,12 +63,13 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
self.print(filename)
end
#Bill Receipt Print
def print_receipt_bill(printer_settings,sale_items,sale_data, customer_name)
#Bill Receipt Print
def print_receipt_bill(printer_settings,sale_items,sale_data, customer_name, food_total, beverage_total)
#Use CUPS service
#Generate PDF
#Print
pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name)
pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, food_total, beverage_total)
pdf.render_file "tmp/receipt_bill.pdf"
self.print("tmp/receipt_bill.pdf")
end

View File

@@ -3,7 +3,6 @@ class Sale < ApplicationRecord
#primary key - need to be unique generated for multiple shops
before_create :generate_custom_id
#before_create :generate_receipt_no
belongs_to :cashier, :optional => true
belongs_to :customer, :optional => true
@@ -17,7 +16,6 @@ class Sale < ApplicationRecord
scope :open_invoices, -> { where("sale_status = 'new' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") }
def generate_invoice_from_booking(booking_id, requested_by)
puts "get invoice from booking"
booking = Booking.find(booking_id)
status = false
Rails.logger.debug "Booking -> " + booking.id.to_s
@@ -33,7 +31,6 @@ class Sale < ApplicationRecord
booking.sale_id = sale_id
end
order = booking.booking_orders.take.order
puts "add sale order"
link_order_sale(order.id)
return status, sale_id
end
@@ -231,9 +228,10 @@ class Sale < ApplicationRecord
def link_order_sale(order_id)
#create if it doesn't exist
saleOrder = SaleOrder.where("sale_id=? and order_id=?", self.id, order_id).take
if saleOrder.nil?
SaleOrder.create(:sale_id => self.id, :order_id => order_id)
sale_order = SaleOrder.new
sale_order.create_sale_order(self.id, order_id)
end
# if (SaleOrder.where("sale_id = #{self.id} and order_id=#{order_id}").nil?)
# SaleOrder.create(:sale_id => self.id, :order_id => order_id)
@@ -261,7 +259,12 @@ class Sale < ApplicationRecord
end
private
def generate_custom_id
self.sale_id = SeedGenerator.generate_id(self.class.name, "SAL")
end
def self.get_receipt_no_list(from,to)
sale = Sale.where("sale_status=? and receipt_date between ? and ?","completed",from,to)
end
end

View File

@@ -1,6 +1,6 @@
class SaleItem < ApplicationRecord
self.primary_key = "sale_item_id"
#primary key - need to be unique generated for multiple shops
before_create :generate_custom_id
@@ -12,24 +12,53 @@ class SaleItem < ApplicationRecord
def self.get_order_items_details(sale_id)
order_details = SaleItem.select("sales.total_tax as tax_amount, sales.grand_total as grand_total_amount , sales.total_discount as discount_amount,DATE_FORMAT(sales.receipt_date,'%Y-%m-%d %h:%m') as receipt_date,
order_details = SaleItem.select("sales.total_tax as tax_amount, sales.grand_total as grand_total_amount , sales.total_discount as discount_amount,sales.receipt_date as receipt_date,
sales.cashier_name,sales.receipt_no,sale_items.product_name as item_name,sale_items.qty,sale_items.price,sale_items.unit_price as total_price")
.joins("left join sales on sales.sale_id = sale_items.sale_id")
.where("sale_items.sale_id=?",sale_id)
# sale_orders = SaleOrder.where("sale_id=?",sale_id)
# if sale_orders
# sale_orders.each do |sale_order|
# sale_orders.each do |sale_order|
# order_details = SaleItem.select("sales.total_discount as discount_amount,DATE_FORMAT(sales.receipt_date,'%Y-%m-%d %h:%m') as receipt_date,sales.cashier_name,sales.receipt_no,sale_items.product_name as item_name,sale_items.qty,sale_items.price,sale_items.unit_price as total_price")
# .joins("left join sales on sales.id = sale_items.sale_id")
# .where("sale_items.sale_id=?",sale_order.sale_id)
# .where("sale_items.sale_id=?",sale_order.sale_id)
# return order_details
# end
# else
# return false
# end
end
def self.calculate_food_beverage(sale_items)
food_prices=0
beverage_prices=0
sale_items.each do |si|
food_price, beverage_price = self.get_price(si.sale_item_id)
food_prices = food_prices + food_price
beverage_prices = beverage_prices + beverage_price
end
return food_prices, beverage_prices
end
def self.get_price(sale_item_id)
food_price=0
beverage_price=0
item=SaleItem.select("sale_items.price , menu_items.account_id")
.joins("left join menu_items on menu_items.item_code = sale_items.product_code")
.where("sale_items.sale_item_id=?", sale_item_id.to_s)
if item[0].account_id == 1
food_price = item[0].price
else
beverage_price = item[0].price
end
return food_price, beverage_price
end
private
def generate_custom_id
self.sale_item_id = SeedGenerator.generate_id(self.class.name, "SLI")

View File

@@ -2,13 +2,22 @@ class SaleOrder < ApplicationRecord
self.primary_key = "sale_order_id"
#primary key - need to be unique generated for multiple shops
before_create :generate_custom_id
before_create :generate_sale_order_id
belongs_to :sale
belongs_to :order
def create_sale_order(sale, order)
self.sale_id = sale
self.order_id = order
self.save
end
private
def generate_custom_id
self.sale_order_id = SeedGenerator.generate_id(self.class.name, "SOI")
def generate_sale_order_id
self.class.name
saleOrderId = SeedGenerator.generate_id(self.class.name, "SOI")
self.sale_order_id = saleOrderId
end
end

View File

@@ -66,9 +66,9 @@ class SalePayment < ApplicationRecord
end
def self.get_paypar_account(url,token,membership_id,campaign_type_id)
def self.get_paypar_account(url,token,membership_id,campaign_type_id,merchant_uid)
response = HTTParty.get(url,
:body => { app_token: token,membership_id:membership_id,campaign_type_id:campaign_type_id}.to_json,
:body => { app_token: token,membership_id:membership_id,campaign_type_id:campaign_type_id,merchant_uid:merchant_uid}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
@@ -78,13 +78,14 @@ class SalePayment < ApplicationRecord
end
def self.redeem(paypar_url,token,membership_id,received_amount,sale_id,campaign_type_id)
membership_actions_data = Settings::MembershipAction.find_by_membership_type("redeem_url");
def self.redeem(paypar_url,token,membership_id,received_amount,sale_id)
membership_actions_data = MembershipAction.find_by_membership_type("redeem");
if !membership_actions_data.nil?
url = paypar_url.to_s + membership_actions_data.gateway_url.to_s
campaign_type_id = 1
merchant_uid = membership_actions_data.merchant_account_id
campaign_type_id = membership_actions_data.additional_parameter["campaign_type_id"]
response = HTTParty.post(url,
:body => { generic_customer_id:membership_id,total_amount:received_amount,receipet_no:sale_id,campaign_type_id:campaign_type_id,account_no:""}.to_json,
:body => { generic_customer_id:membership_id,redeem_amount:received_amount,receipet_no:sale_id,campaign_type_id:campaign_type_id,account_no:"",merchant_uid:merchant_uid}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
@@ -93,7 +94,7 @@ class SalePayment < ApplicationRecord
else
response =false;
end
puts response.to_json
return response;
end
@@ -106,7 +107,6 @@ class SalePayment < ApplicationRecord
self.outstanding_amount = self.sale.grand_total.to_f - self.received_amount.to_f
self.payment_status = "paid"
payment_method = self.save!
sale_update_payment_status(self.received_amount)
return payment_status
@@ -134,7 +134,7 @@ class SalePayment < ApplicationRecord
self.payment_method = method
self.payment_amount = self.received_amount
self.payment_reference = self.card_payment_reference
self.outstanding_amount = self.sale.grand_total- self.received_amount
self.outstanding_amount = self.sale.grand_total.to_f - self.received_amount.to_f
self.payment_status = "paid"
payment_method = self.save!
@@ -188,10 +188,9 @@ class SalePayment < ApplicationRecord
self.payment_status = "pending"
payment_method = self.save!
campaign_type_id =1;
customer_data = Customer.find_by_customer_id(self.sale.customer_id)
membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
membership_data = SalePayment.redeem(membership_setting.gateway_url,membership_setting.auth_token,customer_data.membership_id,self.received_amount,self.sale.sale_id,campaign_type_id)
membership_data = SalePayment.redeem(membership_setting.gateway_url,membership_setting.auth_token,customer_data.membership_id,self.received_amount,self.sale.sale_id)
if membership_data["status"]==true
SalePayment.where(:sale_payment_id => self.sale_payment_id).update_all(:payment_status => 'paid')
sale_update_payment_status(self.received_amount.to_f)
@@ -207,15 +206,66 @@ class SalePayment < ApplicationRecord
def sale_update_payment_status(paid_amount)
#update amount_outstanding
self.sale.amount_received = self.sale.amount_received.to_f + paid_amount.to_f
self.sale.amount_changed = paid_amount.to_f - self.sale.amount_received
if (self.sale.grand_total <= self.sale.amount_received.to_f && self.sale.amount_changed.to_f > 0)
self.sale.amount_changed = paid_amount.to_f - self.sale.amount_received.to_f
all_received_amount = 0.0
sObj = Sale.find(self.sale_id)
sObj.sale_payments.each do |spay|
all_received_amount += spay.payment_amount.to_f
end
if (self.sale.grand_total <= all_received_amount)
self.sale.payment_status = "paid"
self.sale.sale_status = "completed"
self.sale.save!
table_update_status(sObj)
rebat(sObj)
end
end
def table_update_status(sale_obj)
booking = Booking.find_by_sale_id(sale_obj.id)
if booking
table = DiningFacility.find(booking.dining_facility_id)
if table
table.status = "available"
table.save
end
end
end
def rebat(sObj)
food_prices, beverage_prices = SaleItem.calculate_food_beverage(sObj.sale_items)
generic_customer_id = sObj.customer.membership_id
if generic_customer_id != nil || generic_customer_id != ""
paypar = sObj.sale_payments
payparcost = 0
paypar.each do |pp|
if pp.payment_method == "paypar"
payparcost = payparcost + pp.payment_amount
end
end
total_amount = food_prices - payparcost
puts "aaaa"
puts food_prices
puts payparcost
puts total_amount
receipt_no = sObj.receipt_no
membership = MembershipSetting.find_by_membership_type("paypar_url")
memberaction = MembershipAction.find_by_membership_type("rebate")
campaign_type_id = memberaction.additional_parameter["campaign_type_id"]
app_token = membership.auth_token.to_s
url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
response = HTTParty.post(url, :body => { generic_customer_id:generic_customer_id ,total_amount: total_amount,campaign_type_id: campaign_type_id,
receipt_no: receipt_no}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
})
puts response.to_json
end
end
private
def generate_custom_id
self.sale_payment_id = SeedGenerator.generate_id(self.class.name, "SPI")

View File

@@ -1,7 +1,9 @@
class SeedGenerator < ApplicationRecord
def self.generate_id(model, prefix)
seed = SeedGenerator.find_by_model(model)
new_receipt_no = 0
if (seed.nil?)
seed = SeedGenerator.new()
seed.model = model
@@ -16,8 +18,8 @@ class SeedGenerator < ApplicationRecord
end
padding_len = 15 - prefix.length
return prefix +"-"+ seed.current.to_s.to_s.rjust((14-prefix.length)+1,'0')
saleOrderId = prefix +"-"+ seed.current.to_s.to_s.rjust((14-prefix.length)+1,'0')
return saleOrderId
end

View File

@@ -1,2 +0,0 @@
class Settings::MembershipAction < ApplicationRecord
end

View File

@@ -1,6 +1,6 @@
class CrmOrderPdf < Prawn::Document
attr_accessor :receipt_width,:price_column_width,:p_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_column_width,:item_description_width
def initialize(booking,order_items,print_settings)
def initialize(booking,order_items,printer_settings)
self.p_width = 200
self.page_height = 1450
self.margin = 10
@@ -18,20 +18,19 @@ class CrmOrderPdf < Prawn::Document
@half_qty = @qty_width / 2
#setting page margin and width
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.p_width, self.page_height])
self.header_font_size = 7
self.header_font_size = 10
self.item_font_size = 9
header( booking.type, booking.dining_facility.name)
header( printer_settings.printer_name, printer_settings.name)
stroke_horizontal_rule
order_detail(booking.checkin_by,booking.checkin_at,booking.dining_facility.name)
cashier_info(booking)
line_items(order_items)
#all_total(order_items)
end
def header (type, name)
text "#{type}", :size => self.header_font_size,:align => :center
def header (printer_name, name)
text "#{printer_name}", :size => self.header_font_size,:align => :center
move_down 5
text "#{name}", :size => self.header_font_size,:align => :center
# move_down self.item_height
@@ -41,37 +40,37 @@ class CrmOrderPdf < Prawn::Document
end
def order_detail(order_by,order_at,customer)
def cashier_info(booking)
move_down 5
move_down 2
y_position = cursor
qty_column_width = self.p_width * 0.2
item_description_width = self.p_width * 0.5
price_column_width = self.p_width * 0.3
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
text "Order By:", :size => self.item_font_size,:align => :left
end
stroke_horizontal_rule
bounding_box([self.price_width, y_position], :width =>self.receipt_width) do
text "#{booking.checkin_by}" , :size => self.item_font_size, :align => :left
end
move_down 5
y_position = cursor
pad_top(15) {
# @item_width.to_i + @half_qty.to_i
text_box "Order By", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
text_box "Order At", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "Customer", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
}
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
text "Customer:", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
text "#{booking.customer_id}" , :size => self.item_font_size,:align => :left
end
move_down 5
stroke_horizontal_rule
y_position = cursor
pad_top(15) {
text_box "#{order_by}", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "#{order_at.to_i}", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "#{customer}", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
}
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
text "Date:", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
text "#{booking.checkin_at.strftime('%Y %m %d %h:%m')}" , :size => self.item_font_size,:align => :left
end
# stroke_horizontal_rule
move_down 5
end
def line_items(order_items)
@@ -97,10 +96,41 @@ y_position = cursor
move_down 5
stroke_horizontal_rule
add_line_item_row(order_items)
end
def add_line_item_row(order_items)
y_position = cursor
move_down 5
sub_total = 0.0
order_items.each do |item|
sub_total += item.qty*item.price
qty = item.qty
total_price = item.qty*item.price
price = item.price
item_name = item.item_name
y_position = cursor
pad_top(15) {
# @item_width.to_i + @half_qty.to_i
text_box "#{item_name}", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
text_box "#{price}", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "#{qty.to_i}", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "#{total_price}", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
}
move_down 3
end
stroke_horizontal_rule
move_down 5
y_position = cursor
end
end

View File

@@ -1,29 +1,46 @@
class OrderItemPdf < Prawn::Document
attr_accessor :receipt_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:item_description_width
def initialize(order_item, print_settings)
super(:margin => [10, 5, 30, 5], :page_size => [200,400])
self.page_width = 300
self.page_height = 400
self.margin = 10
self.price_width = 50
self.qty_width = 50
self.item_width = self.page_width - (self.price_width + self.qty_width)
self.item_height = 15
self.item_description_width = self.page_width - (self.price_width + self.qty_width)
self.receipt_width=130
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
# super(:margin => [10, 5, 30, 5], :page_size => [200,400])
# font "public/fonts/#{font_name}".to_s + ".ttf".to_s
# font "public/fonts/Zawgyi-One.ttf"
# font "public/fonts/padauk.ttf"
font_size 9
text "#{order_item.dining}", :size => 15
# font "public/fonts/padauk.ttf"
self.header_font_size = 12
self.item_font_size = 10
text "#{order_item.dining}", :size => self.header_font_size,:align => :center
stroke_horizontal_rule
move_down 5
#order_info
order_info(order_item.order_by,order_item.order_at, order_item.customer)
order_info(order_item.order_by,order_item.order_at)
# order items
order_items(order_item)
end
# Write Order Information to PDF
def order_info(order_by, order_at, customer)
def order_info(order_by, order_at)
y_position = cursor
bounding_box([0,y_position], :width => 200, :height => 15) do
text "OrderBy:#{order_by} Customer:#{customer} Date:#{order_at.strftime("%Y-%m-%d")}", :size => 7,:align => :left
bounding_box([0,y_position], :width => self.item_width - 50, :height => self.item_height) do
text "OrderBy:#{order_by} ", :size => self.item_font_size,:align => :left
end
bounding_box([self.item_width - 50,y_position], :width => self.item_width + 50, :height => self.item_height) do
text "Date:#{order_at.strftime("%Y-%m-%d %I:%M %p")}", :size => self.item_font_size,:align => :left
end
stroke_horizontal_rule
@@ -35,12 +52,12 @@ class OrderItemPdf < Prawn::Document
def order_items(order_item)
y_position = cursor
bounding_box([0,y_position], :width => 180, :height => 15) do
text "Item", :size => 7,:align => :left
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
text "Item", :size => self.item_font_size,:align => :left
end
bounding_box([160,y_position], :width => 20, :height => 15) do
text "Qty", :size => 7,:align => :right
bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
text "Qty", :size => self.item_font_size,:align => :right
end
stroke_horizontal_rule
@@ -56,12 +73,12 @@ class OrderItemPdf < Prawn::Document
move_down 5
bounding_box([0,y_position], :width => 180, :height => 20) do
text "#{order_item.item_name}", :size => 7,:align => :left
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
text "#{order_item.item_name}", :size => self.item_font_size,:align => :left
end
bounding_box([160,y_position], :width => 20, :height => 20) do
text "#{order_item.qty}", :size => 7,:align => :right
bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
text "#{order_item.qty}", :size => self.item_font_size,:align => :right
end
move_down 5

View File

@@ -1,19 +1,30 @@
class OrderSummaryPdf < Prawn::Document
attr_accessor :receipt_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:item_description_width
def initialize(order, print_settings)
super(:margin => [10, 5, 30, 5], :page_size => [200,400])
self.page_width = 300
self.page_height = 400
self.margin = 10
self.price_width = 60
self.qty_width = 60
self.item_width = self.page_width - (self.price_width + self.qty_width)
self.item_height = 15
self.item_description_width = self.page_width - (self.price_width + self.qty_width)
self.receipt_width=130
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
# font "public/fonts/#{font_name}".to_s + ".ttf".to_s
# font "public/fonts/Zawgyi-One.ttf"
# font "public/fonts/padauk.ttf"
self.header_font_size = 12
self.item_font_size = 10
font_size 9
text "#{order[0].dining}", :size => 15
text "#{order[0].dining}", :size => self.header_font_size,:align => :center
stroke_horizontal_rule
move_down 5
#order_info
order_info(order[0].order_by,order[0].order_at, order[0].customer)
order_info(order[0].order_by,order[0].order_at)
# order items
order_items(order)
@@ -21,11 +32,15 @@ class OrderSummaryPdf < Prawn::Document
end
# Write Order Information to PDF
def order_info(order_by, order_at, customer)
def order_info(order_by, order_at)
y_position = cursor
bounding_box([0,y_position], :width => 200, :height => 15) do
text "OrderBy:#{order_by} Customer:#{customer} Date:#{order_at.strftime("%Y-%m-%d")}", :size => 7,:align => :left
bounding_box([0,y_position], :width => self.item_width - 20, :height => self.item_height) do
text "OrderBy:#{order_by} ", :size => self.item_font_size,:align => :left
end
bounding_box([self.item_width - 20,y_position], :width => self.item_width + 20, :height => self.item_height) do
text "Date:#{order_at.strftime("%Y-%m-%d %I:%M %p")}", :size => self.item_font_size,:align => :left
end
stroke_horizontal_rule
@@ -37,12 +52,12 @@ class OrderSummaryPdf < Prawn::Document
def order_items(order_item)
y_position = cursor
bounding_box([0,y_position], :width => 180, :height => 15) do
text "Item", :size => 7,:align => :left
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
text "Item", :size => self.item_font_size,:align => :left
end
bounding_box([160,y_position], :width => 20, :height => 15) do
text "Qty", :size => 7,:align => :right
bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
text "Qty", :size => self.item_font_size,:align => :right
end
stroke_horizontal_rule
@@ -59,13 +74,13 @@ class OrderSummaryPdf < Prawn::Document
move_down 5
order_item.each do|odi|
bounding_box([0,y_position], :width => 180, :height => 20) do
text "#{odi.item_name}", :size => 7,:align => :left
end
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
text "#{odi.item_name}", :size => self.item_font_size,:align => :left
end
bounding_box([160,y_position], :width => 20, :height => 20) do
text "#{odi.qty}", :size => 7,:align => :right
end
bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
text "#{odi.qty}", :size => self.item_font_size,:align => :right
end
end
move_down 5

View File

@@ -1,171 +1,184 @@
class ReceiptBillPdf < Prawn::Document
attr_accessor :receipt_width,:price_column_width,:p_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_column_width,:item_description_width
def initialize(printer_settings, sale_items, sale_data, customer_name)
self.p_width = 200
attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
def initialize(printer_settings, sale_items, sale_data, customer_name, food_total, beverage_total)
self.page_width = 250
self.page_height = 1450
self.margin = 10
# self.price_width = self.p_width / 2
self.price_width=80
self.item_width = self.p_width - self.price_width
self.item_height = self.item_height
self.qty_column_width = self.p_width / 2
self.item_description_width=self.p_width - self.price_width
self.receipt_width=130
self.price_width = 40
self.qty_width = 20
self.total_width = 40
self.item_width = self.page_width - ((self.price_width + self.qty_width + self.total_width)+(self.margin*4))
self.item_height = 15
self.item_description_width = self.page_width - (self.price_width + self.qty_width + self.total_width)
self.label_width=80
@item_width = self.p_width.to_i / 2
@qty_width = @item_width.to_i / 3
@double = @qty_width * 1.3
@half_qty = @qty_width / 2
# @item_width = self.page_width.to_i / 2
# @qty_width = @item_width.to_i / 3
# @double = @qty_width * 1.3
# @half_qty = @qty_width / 2
#setting page margin and width
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.p_width, self.page_height])
self.header_font_size = 10
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
# font "public/fonts/#{font_name}".to_s + ".ttf".to_s
# font "public/fonts/Zawgyi-One.ttf"
# font "public/fonts/padauk.ttf"
self.header_font_size = 11
self.item_font_size = 9
header( printer_settings.printer_name, printer_settings.name)
stroke_horizontal_rule
cashier_info(sale_data, customer_name)
line_items(sale_items)
all_total(sale_data)
stroke_horizontal_rule
cashier_info(sale_data, customer_name)
line_items(sale_items, food_total, beverage_total)
all_total(sale_data)
footer
end
def header (printer_name, name)
text "#{printer_name}", :size => self.header_font_size,:align => :center
move_down 5
text "#{name}", :size => self.header_font_size,:align => :center
# move_down self.item_height
move_down 5
stroke_horizontal_rule
text "#{printer_name}", :left_margin => -10, :size => self.header_font_size,:align => :center
move_down 5
text "#{name}", :size => self.header_font_size,:align => :center
# move_down self.item_height
move_down 5
stroke_horizontal_rule
end
def cashier_info(sale_data, customer_name)
move_down 5
move_down 2
move_down 7
# move_down 2
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
text "Receipt No:", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width, y_position], :width =>self.receipt_width) do
text "#{sale_data.receipt_no}" , :size => self.item_font_size, :align => :left
bounding_box([self.label_width, y_position], :width =>self.item_width) do
text "#{sale_data.receipt_no}" , :size => self.item_font_size, :align => :left
end
move_down 5
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
text "Customer:", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
bounding_box([self.label_width,y_position], :width =>self.item_width) do
text "#{customer_name}" , :size => self.item_font_size,:align => :left
end
move_down 5
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
text "Date:", :size => self.item_font_size,:align => :left
bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
text "Date:", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
text "#{sale_data.receipt_date.strftime('%Y %m %d %h:%m')}" , :size => self.item_font_size,:align => :left
bounding_box([self.label_width,y_position], :width => self.item_width) do
text "#{sale_data.receipt_date.strftime('%Y-%m-%d %I:%M %p')}" , :size => self.item_font_size,:align => :left
end
# stroke_horizontal_rule
move_down 5
stroke_horizontal_rule
move_down 5
end
def line_items(sale_items)
def line_items(sale_items, food_total, beverage_total)
y_position = cursor
qty_column_width = self.p_width * 0.2
item_description_width = self.p_width * 0.5
price_column_width = self.p_width * 0.3
stroke_horizontal_rule
move_down 5
y_position = cursor
pad_top(15) {
# @item_width.to_i + @half_qty.to_i
text_box "Items", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
text_box "Price", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "Qty", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "Total", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "Items", :at =>[0,y_position], :width => self.item_width, :height =>self.item_height, :size => self.item_font_size, :overflow => :shrink_to_fix
text_box "Price", :at =>[self.item_width,y_position], :width => self.price_width, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
text_box "Qty", :at =>[(self.item_width+self.price_width),y_position], :width => self.qty_width, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
text_box "Total", :at =>[(self.item_width+self.price_width+2),y_position], :width => self.total_width+2, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
}
move_down 5
stroke_horizontal_rule
add_line_item_row(sale_items)
add_line_item_row(sale_items, food_total, beverage_total)
end
def add_line_item_row(sale_items)
def add_line_item_row(sale_items, food_total, beverage_total)
item_name_width = (self.item_width+self.price_width)
y_position = cursor
move_down 5
sub_total = 0.0
sale_items.each do |item|
sale_items.each do |item|
sub_total += (item.qty*item.unit_price)
qty = item.qty
total_price = item.qty*item.unit_price
price = item.unit_price
product_name = item.product_name
sub_total += item.qty*item.unit_price
qty = item.qty
total_price = item.qty*item.unit_price
price = item.unit_price
product_name = item.product_name
y_position = cursor
y_position = cursor
pad_top(15) {
# @item_width.to_i + @half_qty.to_i
text_box "#{product_name}", :at =>[0,y_position], :width => self.item_width, :height =>self.item_height, :overflow => :shrink_to_fix, :size => self.item_font_size, :overflow => :shrink_to_fix
text_box "#{price}", :at =>[self.item_width,y_position], :width => self.price_width, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
text_box "#{qty.to_i}", :at =>[item_name_width,y_position], :width => self.qty_width, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
text_box "#{total_price}", :at =>[(item_name_width+2),y_position], :width =>self.total_width+2, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
pad_top(15) {
# @item_width.to_i + @half_qty.to_i
text_box "#{product_name}", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
text_box "#{price}", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "#{qty.to_i}", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
text_box "#{total_price}", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
}
move_down 3
end
}
move_down 3
end
stroke_horizontal_rule
move_down 5
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
bounding_box([0,y_position], :width =>item_name_width, :height => self.item_height) do
text "Sub Total", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
text "#{sub_total}" , :size => self.item_font_size,:align => :right
bounding_box([item_name_width,y_position], :width =>self.total_width) do
text "#{ sub_total }" , :size => self.item_font_size,:align => :right
end
# Food and Beverage
food_beverage_total = food_total.to_s + "/" + beverage_total.to_s
move_down 5
y_position = cursor
bounding_box([0,y_position], :width =>(item_name_width), :height => self.item_height) do
text "Food/Beverage Total", :size => self.item_font_size,:align => :left
end
bounding_box([item_name_width,y_position], :width =>self.total_width) do
text "#{ food_beverage_total }" , :size => self.item_font_size,:align => :right
end
end
def all_total(sale_data)
item_name_width = self.item_width
move_down 5
y_position =cursor
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
bounding_box([0,y_position], :width =>(item_name_width+self.price_width), :height => self.item_height) do
text "Discount", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
bounding_box([(item_name_width+self.price_width),y_position], :width =>self.total_width) do
text "( " +"#{sale_data.total_discount}" +" )" , :size => self.item_font_size,:align => :right
end
move_down 5
y_position =cursor
y_position = cursor
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
bounding_box([0,y_position], :width =>(item_name_width+self.price_width), :height => self.item_height) do
text "Total Tax", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
bounding_box([(item_name_width+self.price_width),y_position], :width =>self.total_width) do
text "( " +"#{sale_data.total_tax}" +" )" , :size => self.item_font_size,:align => :right
end
move_down 5
y_position = cursor
move_down 5
bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
bounding_box([0,y_position], :width =>(item_name_width+self.price_width), :height => self.item_height) do
text "Grand Total", :size => self.item_font_size,:align => :left
end
bounding_box([self.price_width,y_position], :width =>self.price_width) do
bounding_box([(item_name_width+self.price_width),y_position], :width =>self.total_width) do
text "#{sale_data.grand_total}" , :size => self.item_font_size,:align => :right
end
move_down 5
@@ -173,4 +186,14 @@ class ReceiptBillPdf < Prawn::Document
end
def footer
move_down 5
stroke_horizontal_rule
move_down 5
text "*** Thank You ***", :left_margin => -10, :size => self.header_font_size,:align => :center
move_down 5
end
end

View File

@@ -0,0 +1,38 @@
if (@customer)
json.id @customer.customer_id
json.name @customer.name
json.email @customer.email
json.contact_no @customer.contact_no
json.date_of_birth @customer.date_of_birth
@total_amount = 0.00
@total_tax = 0.00
if @customer.orders
order_items = []
@customer.orders.each do |bo|
order = Order.find(bo.order_id)
#if (order.status == "new")
order_items = order_items + order.order_items
#end
end
json.order_items order_items do |item|
json.item_instance_code item.item_code
json.item_name item.item_name
json.price item.price
json.qty item.qty
json.options item.options
json.remark item.remark
json.item_status item.order_item_status
@total_amount = @total_amount + (item.price * item.qty)
end
end
json.sub_total @total_amount
json.commerical_tax @total_amount * 0.05
json.total @total_amount + (@total_amount * 0.05)
end

View File

@@ -0,0 +1,9 @@
<div class="form-group">
<select class="selectpicker form-control col-md-12" name="membership_id">
<option>Select Member Group</option>
<% @member_group.each do |member| %>
<option value="<%= member["id"] %>">
<%= member["name"] %></option>
<%end %>
</select>
</div>

View File

@@ -16,5 +16,5 @@
<%= f.button :submit %>
</div>
<% end %>
<!-- -->
<!---->

View File

@@ -11,7 +11,7 @@
</ol>
</div>
</div>
<br/>
<div class="row">
<div class="col-lg-8">
@@ -21,6 +21,17 @@
<table class="table table-striped">
<thead>
<tr>
<td colspan="6">
<%= form_tag crm_customers_path, :method => :get do %>
<div class="input-append form-group pull-left">
<input type="text" name="filter" placeholder="Search" class="form-control input-sm col-md-8">
<button type="submit" class="btn btn-primary btn-sm">Search</button>
</div>
<% end %>
</td>
</tr>
<tr>
<th>Select</th>
<th>Name</th>
@@ -40,7 +51,7 @@
<td><%= crm_customer.contact_no %></td>
<td><%= crm_customer.email %></td>
<td>
<%= link_to 'Destroy', crm_customer_path(crm_customer), method: :delete, data: { confirm: 'Are you sure?' } %>
<%= link_to 'Show', crm_customer_path(crm_customer) %>
</td>
@@ -48,66 +59,65 @@
<% end %>
</tbody>
</table>
<br>
<%= paginate @crm_customers %>
</div>
</div>
</div>
<div class="col-lg-4">
<%= simple_form_for @crm_customer,:url => crm_customers_path, :method => :post do |f| %>
<span class="patch_method"></span>
<input type="hidden" id="sale_id" name="sale_id" value="<%= @sale_id %>" />
<%= f.hidden_field :id, :class => "form-control col-md-6 " %>
<div class="form-group">
<%= f.input :name, :class => "form-control col-md-6 name" %>
<%= simple_form_for @crm_customer,:url => crm_customers_path, :method => :post do |f| %>
</div>
<div class="form-group">
<%= f.input :company, :class => "form-control col-md-6 company" %>
</div>
<div class="form-group">
<%= f.input :contact_no, :class => "form-control col-md-6 contact_no" %>
<span class="patch_method"></span>
<%= f.error_notification %>
<%= f.hidden_field :id, :class => "form-control col-md-6 " %>
<div class="form-group">
<%= f.input :name, :class => "form-control col-md-6 name" %>
</div>
<div class="form-group">
<%= f.input :company, :class => "form-control col-md-6 company" %>
</div>
<div class="form-group">
<%= f.input :contact_no, :class => "form-control col-md-6 contact_no" %>
</div>
</div>
<div class="form-group">
<%= f.input :email, :class => "form-control col-md-6 email" %>
</div>
<div class="form-group">
<%= f.input :email, :class => "form-control col-md-6 email" %>
</div>
<div class="form-group">
<label>Date Of Birth</label>
<%= f.text_field :date_of_birth,:class=>"form-control datepicker date_of_birth",:readonly =>true, :value => @date_of_birth%>
</div>
<div class="form-group">
<label>Date Of Birth</label>
<%= f.text_field :date_of_birth,:class => "form-control datepicker date_of_birth "%>
</div>
<div class="form-group">
<select class="selectpicker form-control col-md-12" name="membership_id">
<div class="form-group">
<select class="selectpicker form-control col-md-12" name="member_group_id">
<option>Select Member Group</option>
<% @member_group.each do |member| %>
<option value="<%= member["id"] %>">
<%= member["name"] %></option>
<% Lookup.where("lookup_type = ?", "member_group_type" ).each do |member| %>
<option value="<%= member.value %>">
<%= member.name %></option>
<%end %>
</select>
</div>
<div class="form-group">
<%= f.input :membership_type, :class => "form-control col-md-6 membership_type" %>
</div>
<div class="form-group">
<%= f.input :membership_authentication_code, :class => "form-control col-md-6 membership_authentication_code" %>
</div>
<div class="form-group">
<div class="form-group">
<%= f.button :submit, "Submit",:class => 'btn btn-primary ', :id => 'submit_customer' %>
<%= f.button :submit, "Update",:class => 'btn btn-primary ', :disabled =>'', :id => 'update_customer' %>
</div>
<%end%>
</div>
<%end%>
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.2.0/jquery-confirm.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.2.0/jquery-confirm.min.js"></script>
<script type="text/javascript">
$(function () {
if (jQuery().datepicker) {
@@ -124,11 +134,11 @@
$(document).on('click',".checkbox_check",function(){
if(this.checked){
var sale_id = $("#sale_id").val() || 0;
var sale_id = $("#sale_id").val() || 0;
var customer_id = $(this).val();
if(sale_id != 0){
var url = "../"+customer_id;
// var url = "/"+customer_id;
update_sale(customer_id,sale_id);
}else{
@@ -185,7 +195,7 @@
action: function(){
$.ajax({
type: "POST",
url: "../../update_sale/" ,
url: "update_sale/" ,
data: {customer_id:customer_id,sale_id:sale_id},
dataType: "json",
success: function(data) {
@@ -207,23 +217,6 @@
});
}
/*function changeMethod() {
$("#update_customer").attr('method', 'put');
}*/
/* $("#update_customer").click(function() {
$("#new_customer").attr('class', 'edit_customer');
var id = "edit_customer_"+$('#customer_id').val();alert(id);
$("#new_customer").attr('id', id);
alert(";;")
//$('#new_customer').removeClass('new_customer');
//$('#new_customer').addClass('edit_customer')
}); */
</script>

View File

@@ -1,40 +1,84 @@
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<%= @crm_customer.name %>
</p>
<p>
<strong>Company:</strong>
<%= @crm_customer.company %>
</p>
<p>
<strong>Contact no:</strong>
<%= @crm_customer.contact_no %>
</p>
<p>
<strong>Email:</strong>
<%= @crm_customer.email %>
</p>
<p>
<strong>Date of birth:</strong>
<%= @crm_customer.date_of_birth %>
</p>
<div class="row">
<div class="col-lg-12">
<ol class="breadcrumb">
<li><a href="<%= crm_root_path %>">Home</a></li>
<li class="active">
<a href="<%= crm_customers_path %>">Customer</a>
</li>
<li class="active">Details
</li>
</ol>
</div>
</div>
<p>
<strong>Membership type:</strong>
<%= @crm_customer.membership_type %>
</p>
<div class="row">
<div class="col-lg-12">
<div class="main-box-body clearfix">
<div class="table-responsive">
<hr>
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Contact no</th>
<th>Company</th>
<th>Date Of Birth</th>
</tr>
</thead>
<p>
<strong>Membership authentication code:</strong>
<%= @crm_customer.membership_authentication_code %>
</p>
<tbody>
<tr>
<td><%= @crm_customer.name %></td>
<td><%= @crm_customer.email %></td>
<td><%= @crm_customer.contact_no %></td>
<td><%= @crm_customer.company %></td>
<td><%= @crm_customer.date_of_birth %> </td>
</tr>
</tbody>
</table>
<br>
<h3>Order Details</h3>
<table class="table table-striped">
<thead>
<tr>
<th>Created at </th>
<th>Menu Item</th>
<th>QTY</th>
<th>Unit Price </th>
<th>Option</th>
<th>Status</th>
<th>Waiter</th>
</tr>
</thead>
<tbody>
<% @order_items.each do |order_item| %>
<tr>
<td><%= order_item.created_at %></td>
<td><%= order_item.item_name %></td>
<td><%= order_item.qty %></td>
<td><%= order_item.price %></td>
<td><%= order_item.options %></td>
<td><%= order_item.order_item_status %></td>
<td><%= order_item.item_order_by %> </td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<%= link_to 'Edit', edit_crm_customer_path(@crm_customer) %> |
<%= link_to 'Back', crm_customers_path %>

View File

@@ -0,0 +1,2 @@
json.extract! crm_dining_queue, :id, :name, :contact, :queue_no, :created_at, :updated_at
json.url crm_dining_queue_url(crm_dining_queue, format: :json)

View File

@@ -0,0 +1,16 @@
<%= simple_form_for([:crm,@dining_queue]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.input :contact_no %>
<%= f.input :queue_no %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>

View File

@@ -0,0 +1,11 @@
<div class="span12">
<div class="page-header">
<ul class="breadcrumb">
<li><a href="<%= root_path %>">Home</a></li>
<li><a href="<%= crm_dining_queues_path %>">Queue</a></li>
<li>Edit</li>
</ul>
</div>
<%= render 'form', dining_queue: @dining_queue %>
</div>

View File

@@ -0,0 +1,38 @@
<div class="page-header">
<ul class="breadcrumb">
<li><a href="<%= %>">Home</a></li>
<li>Queue</li>
<span style="float: right">
<%= link_to t('.new', :default => t("helpers.links.new")),new_crm_dining_queue_path,:class => 'btn btn-primary btn-sm' %>
</span>
</ul>
</div>
<br>
<div class="card">
<table class="table table-striped">
<thead>
<tr>
<th style="width:25%">Name</th>
<th style="width:25%">Contact No</th>
<th style="width:25%">Queue No</th>
<th style="width:25%">Action</th>
</tr>
</thead>
<tbody>
<% @dining_queues.each do |dining_queue| %>
<tr>
<td><%= dining_queue.name %></td>
<td><%= dining_queue.contact_no %></td>
<td><%= dining_queue.queue_no %></td>
<td>
<%= link_to 'Edit', edit_crm_dining_queue_path(dining_queue) %> | <%= link_to 'Destroy', crm_dining_queue_path(dining_queue), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
</div>

View File

@@ -0,0 +1 @@
json.array! @crm_dining_queues, partial: 'crm_dining_queues/crm_dining_queue', as: :crm_dining_queue

View File

@@ -0,0 +1,11 @@
<div class="span12">
<div class="page-header">
<ul class="breadcrumb">
<li><a href="<%= root_path %>">Home</a></li>
<li><a href="<%= crm_dining_queues_path %>">Queue</a></li>
<li>New</li>
</ul>
</div>
<%= render 'form', dining_queue: @dining_queue %>
</div>

View File

@@ -0,0 +1,19 @@
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<%= @crm_dining_queue.name %>
</p>
<p>
<strong>Contact:</strong>
<%= @crm_dining_queue.contact %>
</p>
<p>
<strong>Queue no:</strong>
<%= @crm_dining_queue.queue_no %>
</p>
<%= link_to 'Edit', edit_crm_dining_queue_path(@crm_dining_queue) %> |
<%= link_to 'Back', crm_dining_queues_path %>

View File

@@ -0,0 +1 @@
json.partial! "crm_dining_queues/crm_dining_queue", crm_dining_queue: @crm_dining_queue

View File

@@ -6,29 +6,29 @@
<% @booking.each do |booking| %>
<% if booking.booking_status == "new" %>
<div class="card">
<div class="card-block booking_click" data-id="sfddf" data-ref="<%= api_booking_path booking.id%>" id="card-block booking_block" >
<p class="hidden booking-id"><%= booking.id %></p>
<h4 class="card-title">
<%= @i += 1 %> . <%= booking.dining_facility.name %>
- <%= booking.id %>
</h4>
<!-- <p class="card-text">Medium, Fries, Salad</p> -->
<p class="card-text">
<small class="text-muted">
Order at <%= booking.checkin_at.strftime("%H,%m") %>, <%= booking.checkin_by %>
</small>
</p>
</div>
<div class="card-footer">
<div class="row">
<div class="col-md-6">
<div class="card-block booking_click" data-id="sfddf" data-ref="<%= api_booking_path booking.id%>" id="card-block booking_block" >
<p class="hidden booking-id"><%= booking.id %></p>
<h4 class="card-title">
<%= @i += 1 %> . <%= booking.dining_facility.name %>
- <%= booking.id %>
</h4>
<!-- <p class="card-text">Medium, Fries, Salad</p> -->
<p class="card-text">
<small class="text-muted">
Order at <%= booking.checkin_at.strftime("%H,%m") %>, <%= booking.checkin_by %>
</small>
</p>
</div>
<div class="col-md-6">
<div class="card-footer">
<div class="row">
<div class="col-md-6">
</div>
<div class="col-md-6">
</div>
</div>
</div>
</div>
</div>
</div>
<% end %>
<% end %>
@@ -38,67 +38,95 @@
$(function(){
$(".booking_click").on("click", function(){
$(".summary-items tbody tr").remove();
$("#cancel").removeAttr("disabled");
$("#assign").removeAttr("disabled");
var booking_id = $(this).find(".booking-id").text();
$("#crm_print").val(booking_id);
$("#crm_print").removeAttr("disabled");
$(".summary-items tbody tr").remove();
$("#cancel").removeAttr("disabled");
$("#assign").removeAttr("disabled");
var url = $(this).attr('data-ref');
show_details(url);
var booking_id = $(this).find(".booking-id").text();
$("#crm_print").val(booking_id);
$("#crm_print").removeAttr("disabled");
});
var url = $(this).attr('data-ref');
show_details(url);
}); //End Booking Click
$('.nav-link').click(function () {
var href = $(this).attr('href');
if(href== "#customer" || href == "#queue"){
$("#cancel").attr("disabled","disabled");
$("#assign").attr("disabled","disabled");
}
});
//End nav-liik
$('.crm_print').click(function() {
var booking_id = $('#crm_print').val();
var booking_id = $('#crm_print').val();
$.ajax({
type: "GET",
url: "crm/print/"+booking_id,
data: {},
dataType: "json",
success: function(data) {
}
});
$.ajax({
type: "GET",
url: "crm/print/"+booking_id,
data: {},
dataType: "json",
success: function(data) {
}
});
});
//End Print Click
$('.assign').click(function(e){
var booking_id = $(this).val()
var type = $(this).attr("data-type")
var booking_id = $(this).val();
var type = $(this).attr("data-type");
alert(booking_id);
update_booking(booking_id,type)
update_booking(booking_id,type)
});
//End Assing Click
$('.cancel').click(function(e){
var booking_id = $(this).val()
var type = $(this).attr("data-type")
var booking_id = $(this).val()
var type = $(this).attr("data-type")
update_booking(booking_id,type)
update_booking(booking_id,type)
});
//End cancle Click
$(".customer_detail").on("click", function(){
$(".summary-items tbody tr").remove();
$("#crm_print").removeAttr("disabled");
var id = $(this).attr('data-ref');
$('.customer_detail').removeClass('selected-item');
$(this).addClass('selected-item');
customer_details(id);
});
//end customer click
});
function show_details(url_item){
//Start Ajax
$.ajax({
type: "GET",
url: url_item,
data: {},
dataType: "json",
success: function(data) {
item_data = data.order_items;
type: "GET",
url: url_item,
data: {},
dataType: "json",
success: function(data) {
item_data = data.order_items;
//console.log(item_data.length);
$("#table").text(data.table_name)
$("#order_at").text(data.checkin_at)
$("#order_by").text(data.checkin_by)
$("#assign").val(data.id)
$("#cancel").val(data.id)
$('.no_record').addClass('hide');
for(var field in item_data) {
if (item_data[field].item_name){
if (item_data[field].item_name){
var price = parseFloat(item_data[field].price).toFixed(2);
row = "<tr>"
@@ -106,32 +134,82 @@ function show_details(url_item){
+'<td style="width:33%; text-align:center">' + item_data[field].qty + '</td>'
+'<td style="width:33%; text-align:right">' + price + '</td>'
+'</tr>';
}
$(".summary-items tbody").append(row);
}
$(".summary-items tbody").append(row);
}
}
}
});
//end Ajax
$('.booking_click').removeClass('selected-item');
$(this).addClass('selected-item');
}
function customer_details(id){
//Start Ajax
$.ajax({
type: "GET",
url: "api/customers/get_order/"+id,
data: {},
dataType: "json",
success: function(data) {
item_data = data.order_items;
$("#for-booking").remove();
var div_data = "<strong>CUSTOMER DETAILS</strong>";
$("#order-title").replaceWith(div_data);
$('.no_record').addClass('hide');
$('.customer-detail').removeClass('hide') ;
$("#cus_name").text(data.name)
$("#cus_email").text(data.email)
$("#cus_contact_no").text(data.contact_no)
if(item_data.length>0){
for(var field in item_data) {
if (item_data[field].item_name){
var price = parseFloat(item_data[field].price).toFixed(2);
row = "<tr>"
+'<td style="width:33%; text-align:left">' + item_data[field].item_name +'</td>'
+'<td style="width:33%; text-align:center">' + item_data[field].qty + '</td>'
+'<td style="width:33%; text-align:right">' + price + '</td>'
+'</tr>';
}
$(".summary-items tbody").append(row);
}
}else{
$('.no_record').removeClass('hide');
$("#crm_print").attr("disabled","disabled");
}
}
});
//End Ajax
}
function update_booking(booking_id,type) {
//Start Ajax
$.ajax({
type: "POST",
url: "update_booking/" ,
data: {booking_id:booking_id,type:type},
dataType: "json",
success: function(data) {
if(data.status == true && data.type == "cancel")
{
alert('Booking has canceled!');
}else{
alert('Booking has completed!');
}
location.reload();
}
});
type: "POST",
url: "crm/update_booking/" ,
data: {booking_id:booking_id,type:type},
dataType: "json",
success: function(data) {
if(data.status == true && data.type == "cancel")
{
alert('Booking has canceled!');
}else{
alert('Booking has completed!');
}
location.reload();
}
});//End Ajax
}
</script>
</script>
<style type="text/css">
.selected-item {
background-color: #ccc;
}
</style>

View File

@@ -1,7 +1,7 @@
<!--- Booking Items -->
<div class="card-columns" style="padding-top:10px">
<% @customer.each do |customer| %>
<div class="card">
<div class="card customer_detail" data-ref="<%= customer.id%>">
<div class="card-block">
<!-- <h4 class="card-title">Customer Name : <%= customer.name %></h4> -->
<p class="card-text">Name : <%= customer.name %></p>

View File

@@ -1,33 +1,21 @@
<div class="card-columns" style="padding-top:10px">
<% @i = 0 %>
<% @booking.each do |booking| %>
<% if booking.booking_status == "assign" %>
<div class="card booking_click" data-ref="<%= api_booking_path booking.id%>" id="booking_block">
<div class="card-block" id="card-block" style="width:100%;">
<p class="hidden booking-id"><%= booking.id %></p>
<% @queue.each do |queue| %>
<div class="card">
<div class="card-block" style="width:100%;">
<h4 class="card-title">
<%= @i += 1 %> . <%= booking.dining_facility.name %>
- <%= booking.id %>
<%= @i += 1 %> . <%= queue.name %>
</h4>
<!-- <p class="card-text">Medium, Fries, Salad</p> -->
<p class="card-text">
<small class="text-muted">
Order at <%= booking.checkin_at.strftime("%H,%m") %>, <%= booking.checkin_by %>
</small>
Contact No - <%= queue.contact_no %>
</p>
</div>
<!-- <div class="card-footer">
<div class="row">
<div class="col-md-6">
<button id="assign" data-ref="<%= booking.id%>" data-type="complete" class="btn assign btn-primary btn-sm btn-block">ASSIGN</button>
</div>
<div class="col-md-6">
<button id="cancel" data-ref="<%= booking.id%>" data-type="cancel" class="btn btn-danger cancel btn-sm btn-block">CANCLE</button>
</div>
</div>
</div> -->
</div>
<% end %>
<% end %>
</div>

View File

@@ -3,34 +3,34 @@
<!-- Column One -->
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<!-- <ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#completed" role="tab">Queue <span class="badge badge-pill badge-default"><%= @booking.where("booking_status=?","assign").count %></span></a>
<a class="nav-link" data-toggle="tab" href="#queue" role="tab">Queue <span class="badge badge-pill badge-default"><%= @queue.count %></span></a>
</li>
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tables" role="tab">Bookings <span class="badge badge-pill badge-default"><%= @booking.where("booking_status=?","new").count %></span></a>
<a class="nav-link active" data-toggle="tab" href="#booking" role="tab">Bookings <span class="badge badge-pill badge-default"><%= @booking.where("booking_status=?","new").count %></span></a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#rooms" role="tab">Customers</a>
<a class="nav-link" data-toggle="tab" href="#customer" role="tab">Customers</a>
</li>
</ul>
</ul> -->
<!-- Nav tabs - End -->
<div class="tab-content" style="min-height:670px; max-height:670px; overflow-y:scroll">
<!--- Panel 0 - Completed -->
<div class="tab-pane" id="completed" role="tabpanel" style="min-height:670px; max-height:670px; overflow-y:scroll">
<div class="tab-pane" id="queue" role="tabpanel" style="min-height:670px; max-height:670px; overflow-y:">
<%= render :partial => 'queue' %>
</div>
<!-- Panel 1 - Tables -->
<div class="tab-pane active" id="tables" role="tabpanel">
<div class="tab-pane active" id="booking" role="tabpanel">
<%= render :partial => 'booking' %>
</div>
<!-- Panel 1 - Tables - End -->
<!-- Panel 2 - Rooms -->
<div class="tab-pane" id="rooms" role="tabpanel" style="min-height:670px; max-height:670px; overflow-y:scroll">
<div class="tab-pane" id="customer" role="tabpanel" style="min-height:670px; max-height:670px; overflow-y:">
<%= render :partial => 'customer' %>
</div>
<!-- Panel 2 - Rooms - End -->
@@ -47,12 +47,12 @@
<div id="station"></div>
<div class="card-block">
<div class="card-title">
<table class="table" >
<table class="table for-booking" id="for-booking">
<thead>
<tr>
<th style="width:33%; text-align:left">Order By</th>
<th style="width:33%; text-align:center;">Order At</td>
<th style="width:33%; text-align:right">Customer</td>
<th style="width:33%; text-align:center;">Order At</th>
<th style="width:33%; text-align:right">Customer</th>
</tr>
</thead>
<tbody>
@@ -67,17 +67,38 @@
</tr>
</tbody>
</table>
<table class="table customer-detail hide">
<thead>
<tr>
<td style="width:44%; text-align:center"><strong>Name</strong></td>
<td style="width:44%; text-align:" id="cus_name"></td>
</tr>
<tr>
<td style="width:44%; text-align:center"><strong>Email</strong></td>
<td style="width:44%; text-align:" id="cus_email"></td>
</tr>
<tr>
<td style="width:44%; text-align:center"><strong>Contact No</strong></td>
<td style="width:44%; text-align:" id="cus_contact_no"></td>
</tr>
</thead>
</table>
<table class="table">
<thead>
<tr>
<th style="width:33%; text-align:left">Items</th>
<th style="width:33%; text-align:center">Qty</th>
<th style="width:33%; text-align:right">Price</td>
<th style="width:33%; text-align:right">Price</th>
</tr>
<tr class="hide no_record">
<td style="width:44%; text-align:center;" id="no_record">No Order Items</td>
</tr>
</thead>
</table>
</div>
<div class="card-text" style="min-height:400px; max-height:400px; overflow-x:scroll">
<table class="table summary-items">
<tbody>
@@ -95,12 +116,10 @@
<button id="crm_print" value="" disabled="disabled" data-type="assign" class="btn crm_print btn-primary btn-lg btn-block" >
Print
</button>
<button type="button" class="btn btn-primary btn-lg btn-block" disabled>Print <br/>Order<br/>Summary</button>
<!-- <button type="button" class="btn btn-primary btn-lg btn-block" disabled>Print <br/>Order<br/>Summary</button> -->
<button id="assign" value="" disabled="disabled" data-type="assign" class="btn assign btn-primary btn-lg btn-block">ASSIGN</button>
<button id="cancel" value="" disabled="disabled" data-type="cancel" class="btn btn-danger cancel btn-lg btn-block">CANCLE</button>
</div>
</div>
</script>

View File

@@ -0,0 +1,11 @@
<%# Link to the "First" page
- available local variables
url: url to the first page
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
-%>
<span class="first">
<%= link_to_unless current_page.first?, t('views.pagination.first').html_safe, url, :remote => remote %>
</span>

View File

@@ -0,0 +1,8 @@
<%# Non-link tag that stands for skipped pages...
- available local variables
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
-%>
<span class="page gap"><%= t('views.pagination.truncate').html_safe %></span>

View File

@@ -0,0 +1,11 @@
<%# Link to the "Last" page
- available local variables
url: url to the last page
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
-%>
<span class="last">
<%= link_to_unless current_page.last?, t('views.pagination.last').html_safe, url, :remote => remote %>
</span>

View File

@@ -0,0 +1,11 @@
<%# Link to the "Next" page
- available local variables
url: url to the next page
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
-%>
<span class="next">
<%= link_to_unless current_page.last?, t('views.pagination.next').html_safe, url, :rel => 'next', :remote => remote %>
</span>

View File

@@ -0,0 +1,12 @@
<%# Link showing page number
- available local variables
page: a page object for "this" page
url: url to this page
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
-%>
<span class="page<%= ' current' if page.current? %>">
<%= link_to_unless page.current?, page, url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
</span>

View File

@@ -0,0 +1,23 @@
<%# The container tag
- available local variables
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
paginator: the paginator that renders the pagination tags inside
-%>
<%= paginator.render do -%>
<nav class="pagination">
<%= first_page_tag unless current_page.first? %>
<%= prev_page_tag unless current_page.first? %>
<% each_page do |page| -%>
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
<%= page_tag page %>
<% elsif !page.was_truncated? -%>
<%= gap_tag %>
<% end -%>
<% end -%>
<%= next_page_tag unless current_page.last? %>
<%= last_page_tag unless current_page.last? %>
</nav>
<% end -%>

View File

@@ -0,0 +1,11 @@
<%# Link to the "Previous" page
- available local variables
url: url to the previous page
current_page: a page object for the currently displayed page
total_pages: total number of pages
per_page: number of items to fetch per page
remote: data-remote
-%>
<span class="prev">
<%= link_to_unless current_page.first?, t('views.pagination.previous').html_safe, url, :rel => 'prev', :remote => remote %>
</span>

View File

@@ -9,8 +9,8 @@
<title>SmartSales : Restaurant</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_link_tag 'CRM', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'CRM', 'data-turbolinks-track': 'reload' %>
</head>
<body>

View File

@@ -27,8 +27,8 @@
<li class="navbar-nav mr-auto dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">&nbsp;&nbsp;&nbsp;Transactions</a>
<ul class="dropdown-menu">
<li><%= link_to "Orders ", origami_root_path, :tabindex =>"-1" %></li>
<li><%= link_to "Sales ", crm_root_path, :tabindex =>"-1" %></li>
<li><%= link_to "Orders ", settings_orders_path, :tabindex =>"-1" %></li>
<li><%= link_to "Sales ", settings_sales_path, :tabindex =>"-1" %></li>
</ul>
</li>
<li class="navbar-nav mr-auto dropdown">
@@ -36,7 +36,7 @@
<ul class="dropdown-menu">
<li><%= link_to "Daily Sale Report", origami_root_path, :tabindex =>"-1" %></li>
<li><%= link_to "Sales Item Report", origami_root_path, :tabindex =>"-1" %></li>
<li><%= link_to "Receipt Report", origami_root_path, :tabindex =>"-1" %></li>
<li><%= link_to "Receipt Report", reports_receipt_no_index_path, :tabindex =>"-1" %></li>
</ul>
</li>
</ul>

View File

@@ -4,7 +4,7 @@
<strong>CRM</strong>
</div>
<div style="float:left;margin-top:3px;text-align:left; width:600px">
Queue | Bookings | Online Orders | <%= link_to 'Customer', crm_customers_path, :html=>":color:white" %>
<%= link_to 'Queue', crm_dining_queues_path, :html=>":color:white" %> | Bookings | Online Orders | <%= link_to 'Customer', crm_customers_path, :html=>":color:white" %>
</div>
<div style="float:right; margin-top:3px; text-align:right;width:200px;color:#ffffff">

View File

@@ -0,0 +1,233 @@
<div class="row">
<div class="col-lg-12">
<ol class="breadcrumb">
<li><a href="<%= crm_root_path %>">Home</a></li>
<li class="active">
<a href="<%= crm_customers_path %>">Customer</a>
</li>
<!-- <a href="<%= new_crm_customer_path%>" class="btn btn-primary pull-right">
<i class="fa fa-plus-circle fa-lg"></i> Add Customer
</a> -->
</ol>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<div class="main-box-body clearfix">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<td colspan="6">
<%= form_tag crm_customers_path, :method => :get do %>
<div class="input-append form-group pull-left">
<input type="text" name="filter" placeholder="Search" class="form-control input-sm col-md-8">
<button type="submit" class="btn btn-primary btn-sm">Search</button>
</div>
<% end %>
</td>
</tr>
<tr>
<th>Select</th>
<th>Name</th>
<th>Company</th>
<th>Contact no</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<% @crm_customers.each do |crm_customer| %>
<tr>
<td>
<input type="radio" style="width:20px;" value="<%= crm_customer.customer_id %>" name="checkbox" class="checkbox_check" ></td>
<td><%= crm_customer.name %></td>
<td><%= crm_customer.company %></td>
<td><%= crm_customer.contact_no %></td>
<td><%= crm_customer.email %></td>
<td>
<%= link_to 'Destroy', crm_customer_path(crm_customer), method: :delete, data: { confirm: 'Are you sure?' } %>
</td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= paginate @crm_customers %>
</div>
</div>
</div>
<div class="col-lg-4">
<%= simple_form_for @crm_customer,:url => crm_customers_path, :method => :post do |f| %>
<span class="patch_method"></span>
<input type="hidden" id="sale_id" name="sale_id" value="<%= @sale_id %>" />
<%= f.error_notification %>
<%= f.hidden_field :id, :class => "form-control col-md-6 " %>
<div class="form-group">
<%= f.input :name, :class => "form-control col-md-6 name" %>
</div>
<div class="form-group">
<%= f.input :company, :class => "form-control col-md-6 company" %>
</div>
<div class="form-group">
<%= f.input :contact_no, :class => "form-control col-md-6 contact_no" %>
</div>
<div class="form-group">
<%= f.input :email, :class => "form-control col-md-6 email" %>
</div>
<div class="form-group">
<label>Date Of Birth</label>
<%= f.text_field :date_of_birth,:class=>"form-control date_of_birth datepicker"%>
</div>
<div class="form-group">
<select class="selectpicker form-control col-md-12" name="member_group_id">
<option>Select Member Group</option>
<% Lookup.where("lookup_type = ?", "member_group_type" ).each do |member| %>
<option value="<%= member.value %>">
<%= member.name %></option>
<%end %>
</select>
</div>
<!-- <div class="form-group">
<%= f.input :membership_type, :class => "form-control col-md-6 membership_type" %>
</div>
<div class="form-group">
<%= f.input :membership_authentication_code, :class => "form-control col-md-6 membership_authentication_code" %>
</div> -->
<div class="form-group">
<%= f.button :submit, "Submit",:class => 'btn btn-primary ', :id => 'submit_customer' %>
<%= f.button :submit, "Update",:class => 'btn btn-primary ', :disabled =>'', :id => 'update_customer' %>
</div>
<%end%>
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.2.0/jquery-confirm.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.2.0/jquery-confirm.min.js"></script>
<script type="text/javascript">
$(function () {
if (jQuery().datepicker) {
$('.datepicker').datepicker({
format : 'dd-mm-yyyy',
autoclose: true
});
$('.datepicker').attr('ReadOnly','true');
$('.datepicker').css('cursor','pointer');
}
});
$(document).on('click',".checkbox_check",function(){
if(this.checked){
var sale_id = $("#sale_id").val() || 0;
var customer_id = $(this).val();
if(sale_id != 0){
// var url = "/"+customer_id;
update_sale(customer_id,sale_id);
}else{
var url = "customers/"+customer_id;
}
$.ajax({
type: "GET",
url: url,
data: {},
dataType: "json",
success: function(data) {
$('#customer_id').val(data.id);
$('#customer_name').val(data.name);
$('#customer_company').val(data.company);
$('#customer_contact_no').val(data.contact_no);
$('#customer_email').val(data.email);
$('#customer_date_of_birth').val(data.date_of_birth);
$('#customer_membership_type').val(data.membership_type);
$('.select > option[value="'+data.membership_id+'"]').attr('selected','selected');
$('.membership_authentication_code').val(data.membership_authentication_code);
$('#update_customer').removeAttr('disabled').val('');
$('#update_customer').attr('value', 'Update');
$('#submit_customer').attr('disabled','disabled');
$("#new_customer").attr('class', 'simple_form edit_customer');
var id = "edit_customer_"+$('#customer_id').val();
$("#new_customer").attr('id', id);
$(".edit_customer").attr('action', '/crm/customers/' + $('#customer_id').val());
$(".edit_customer").attr('action', '/crm/customers/' + $('#customer_id').val());
$(".patch_method").append('<input type="hidden" name="_method" value="patch">');
//$(".edit_customer").attr('method', 'PATCH');
}
});
}else{
}
})
function update_sale(customer_id,sale_id) {
$.confirm({
title: 'Confirm!',
content: 'Are You Sure to assign this customer!',
buttons: {
cancel: function () {
},
confirm: {
text: 'Confirm',
btnClass: 'btn-green',
keys: ['enter', 'shift'],
action: function(){
$.ajax({
type: "POST",
url: "update_sale" ,
data: {customer_id:customer_id,sale_id:sale_id},
dataType: "json",
success: function(data) {
if(data.status == true)
{
alert('Customer has assigned');
window.location.href = '/origami'
}else{
alert('Record not found!');
location.reload();
}
}
});
}
}
}
});
}
</script>

View File

@@ -4,22 +4,22 @@
<!-- Order Details -->
<div class="card" >
<div class="card-header">
<p id="sale-id" class="hidden"><%=@sale_data.sale_id %></p>
<!-- <div class="card-header">
<div><strong id="order-title">ORDER DETAILS</strong></div>
</div>
</div> -->
<div class="card-block">
<div class="card-title row">
<div class="col-lg-6 col-md-6 col-sm-6">
<p id="sale-id" class="hidden"><%=@sale_data.sale_id %></p>
<p>Receipt No: <span id="receipt_no"><%=@sale_data.receipt_no rescue ' '%></span></p>
<p>Cashier: <span id="cashier"><%=@sale_data.cashier_name rescue ' '%></span></p>
</div>
<!-- <p>Cashier: <span id="cashier"><%=@sale_data.cashier_name rescue ' '%></span></p> -->
</div>
<div class="col-lg-6 col-md-6 col-sm-6 text-right">
<p>Date: <span id="receipt_date"> <%=@sale_data.receipt_date.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%></span></p>
</div>
</div>
</div>
<div class="card-text">
<table class="table table-striped" id="order-items-table">
<table class="table table-default" id="order-items-table">
<thead>
<tr>
<th class="item-name">Items</th>
@@ -31,7 +31,7 @@
<% sub_total = 0 %>
<% @sale_data.sale_items.each do |sale_item| %>
<% sub_total += sale_item.qty*sale_item.unit_price%>
<tr>
<tr class="discount-item-row" id=<%= sale_item.sale_item_id %> >
<td style="width:60%; text-align:left">
<span id="item-name-price"><%=sale_item.product_name%>@<%=sale_item.unit_price%></span>
</td>
@@ -52,30 +52,30 @@
<td class="charges-name"><strong>Sub Total:</strong></td>
<td class="item-attr"><strong id="order-sub-total"><%=sub_total%></strong></td>
</tr>
<tr>
<!-- <tr>
<td class="charges-name"><strong>Food:</strong></td>
<td class="item-attr"><strong id="order-food"></strong></td>
</tr>
<tr>
<td class="charges-name"><strong>Beverage:</strong></td>
<td class="item-attr"><strong id="order-beverage"></strong></td>
</tr>
</tr> -->
<tr>
<td class="charges-name"><strong>Discount:</strong></td>
<td class="item-attr"><strong id="order-discount">(<%=@sale_data.total_discount rescue 0%>)</strong></td>
</tr>
<tr>
<tr class="hidden">
<td class="charges-name"><strong>Tax:</strong></td>
<td class="item-attr"><strong id="order-Tax"><%=@sale_data.total_tax rescue 0%></strong></td>
</tr>
<tr>
<tr class="hidden">
<td class="charges-name"><strong>Grand Total:</strong></td>
<td class="item-attr"><strong id="order-grand-total"><%=@sale_data.grand_total rescue 0%></strong></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- Column One -->
@@ -84,11 +84,11 @@
<!-- Discount Amount -->
<div class="card row">
<div class="card-header">
<div><strong id="order-title">Pay Discount</strong></div>
<div><strong id="order-title">Overall Discount</strong></div>
</div>
<div class="card-block">
<div class="card-title">
<div class="form-horizontal">
<div class="form-horizontal">
<div class="form-group">
<div class="col-md-3">
<select name="discount_type" id="discount-type" class="form-control">
@@ -97,82 +97,82 @@
</select>
</div>
<div class="col-md-9">
<input type="text" id="discount-amount" name="discount-amount" value="<%= @sale_data.total_discount rescue 0 %>" class="form-control" />
</div>
</div>
<input type="text" id="discount-amount" name="discount-amount" value="<%= @sale_data.total_discount rescue 0 %>" class="form-control" />
</div>
</div>
<button id="pay-discount" class="btn btn-primary long">Discount</button>
</div>
</div>
</div>
<hr />
<div class="col-md-12">
<div class="col-md-12">
<div class="row">
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="5" data-type="add">5%</div>
</div>
<div class="col-md-7">
<div class="row">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="1" data-type="num">1</div>
<div class="col-md-3 cashier_number" data-value="2" data-type="num">2</div>
<div class="col-md-3 cashier_number" data-value="3" data-type="num">3</div>
<div class="col-md-3 left cashier_number" data-value="2" data-type="num">2</div>
<div class="col-md-3 left cashier_number" data-value="3" data-type="num">3</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="500" data-type="add">500</div>
</div>
</div>
<div class="row">
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="10" data-type="add">10%</div>
</div>
<div class="col-md-7">
<div class="row">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="4" data-type="num">4</div>
<div class="col-md-3 cashier_number" data-value="5" data-type="num">5</div>
<div class="col-md-3 cashier_number" data-value="6" data-type="num">6</div>
<div class="col-md-3 left cashier_number" data-value="5" data-type="num">5</div>
<div class="col-md-3 left cashier_number" data-value="6" data-type="num">6</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="1000" data-type="add">1000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="7" data-type="num">7</div>
<div class="col-md-3 cashier_number" data-value="8" data-type="num">8</div>
<div class="col-md-3 cashier_number" data-value="9" data-type="num">9</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="5000" data-type="add">5000</div>
<div class="col-md-12 cashier_number long" data-value="20" data-type="add">20%</div>
</div>
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="7" data-type="num">7</div>
<div class="col-md-3 left cashier_number" data-value="8" data-type="num">8</div>
<div class="col-md-3 left cashier_number" data-value="9" data-type="num">9</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="0" data-type="num">0</div>
<div class="col-md-3 cashier_number" data-value="." data-type="num">.</div>
<div class="col-md-3 cashier_number" data-value="00" data-type="num">00</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="30" data-type="add">30%</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="10000" data-type="add">10000</div>
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="0" data-type="num">0</div>
<div class="col-md-3 left cashier_number" data-value="." data-type="num">.</div>
<div class="col-md-3 left cashier_number" data-value="00" data-type="num">00</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="50" data-type="add">50%</div>
</div>
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number"></div>
<div class="col-md-3 cashier_number red" data-type="del">DEL</div>
<div class="col-md-3 cashier_number green" data-type="clr">CLR</div>
<div class="col-md-3 left cashier_number red" data-type="del">DEL</div>
<div class="col-md-3 left cashier_number green" data-type="clr">CLR</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="50000" data-type="add">50000</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -4,6 +4,9 @@
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<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>
</li>
@@ -16,28 +19,111 @@
</ul>
<!-- Nav tabs - End -->
<div class="tab-content" style="min-height:670px; max-height:670px; overflow:auto">
<!--- Panel 0 - Table Orders -->
<div class="tab-pane active" id="tables" role="tabpanel">
<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;">
<%
@booking_orders.each do |bko|
# Assigned Id for new Order? Sale?
unique_id=""
# For CSS- Class for Order? Sale?
sale_status=""
if bko.order_status == 'new'
unique_id=bko.booking_id
else
unique_id=bko.sale_id
sale_status="sold"
end
<%
@completed_orders.each do |cpo|
# ToDo no need check new
# Assigned Id for new Order? Sale?
unique_id = ""
customer_id = ""
# For CSS- Class for Order? Sale?
sale_status=""
if cpo.order_status == 'new'
unique_id=cpo.booking_id
customer_id=cpo.order_customer_id
# check selected item and assign
if @selected_item != nil
if cpo.order_id == @selected_item.order_id
sale_status = sale_status + " selected-item"
end
end
else
unique_id=cpo.sale_id
customer_id=cpo.sale_customer_id
sale_status="paid"
# check selected item and assign
if @selected_item != nil
if unique_id == @selected_item.sale_id
sale_status = sale_status + " selected-item"
end
end
end
%>
<div class="card orders <%= sale_status %>">
<div class="card-block">
<p class="hidden orders-id"><%= unique_id %></p>
<h4 class="card-title orders-table"><%= bko.table_name %></h4>
<p class="hidden orders-id"><%= unique_id %></p>
<p class="hidden customer-id"><%= customer_id %></p>
<p class="hidden order-cid"><%= cpo.order_id %></p>
<h4 class="card-title orders-table"><%= cpo.table_name %></h4>
<p class="card-text">
Receipt No :
<span class="orders-receipt-no">
<%= cpo.receipt_no %>
</span>
</p>
<p class="card-text">
Order Status :
<span class="orders-order-status">
<%= cpo.order_status %>
</span>
</small>
</p>
</div>
</div>
<%
end
%>
</div>
</div>
<!--- Panel 1 - Table Orders -->
<div class="tab-pane active" id="tables" role="tabpanel">
<div class="card-columns" style="padding-top:10px; column-gap: 1.2rem;">
<%
@booking_orders.each do |bko|
# No Show completed
if bko.sale_status == 'completed'
next
end
# Assigned Id for new Order? Sale?
unique_id=""
customer_id=""
# For CSS- Class for Order? Sale?
sale_status=""
if bko.order_status == 'new'
unique_id=bko.booking_id
customer_id=bko.order_customer_id
# check selected item and assign
if !@selected_item.nil?
if bko.order_id == @selected_item.order_id
sale_status = sale_status + " selected-item"
end
end
else
unique_id=bko.sale_id
customer_id=bko.sale_customer_id
sale_status="sold"
# check selected item and assign
if @selected_item != nil
if unique_id == @selected_item.sale_id
sale_status = sale_status + " selected-item"
end
end
end
%>
<div class="card orders <%= sale_status %>">
<div class="card-block">
<p class="hidden orders-id"><%= unique_id %></p>
<p class="hidden customer-id"><%= customer_id %></p>
<p class="hidden order-cid"><%= bko.order_id %></p>
<h4 class="card-title orders-table"><%= bko.table_name %></h4>
<p class="card-text">
Receipt No :
<span class="orders-receipt-no">
@@ -48,37 +134,60 @@
Order Status :
<span class="orders-order-status">
<%= bko.order_status %>
</span>
</span>
</small>
</p>
</div>
</div>
<%
</p>
</div>
</div>
<%
end
%>
</div>
</div>
<!--- Panel 1 - Room Orders -->
<div class="tab-pane active" id="rooms" role="tabpanel">
<!--- Panel 2 - Room Orders -->
<div class="tab-pane" id="rooms" role="tabpanel">
<div class="card-columns" style="padding-top:10px; column-gap: 1.2rem;">
<%
@booking_rooms.each do |rmo|
<%
@booking_rooms.each do |rmo|
# No Show completed
if rmo.sale_status == 'completed'
next
end
# Assigned Id for new Order? Sale?
unique_id=""
customer_id=""
# For CSS- Class for Order? Sale?
sale_status=""
if rmo.order_status == 'new'
unique_id=rmo.booking_id
else
if rmo.order_status == 'new'
unique_id=rmo.booking_id
customer_id=rmo.order_customer_id
# check selected item and assign
if @selected_item != nil
if rmo.order_id == @selected_item.order_id
sale_status = sale_status + " selected-item"
end
end
else
unique_id=rmo.sale_id
customer_id=rmo.sale_customer_id
sale_status="sold"
end
# check selected item and assign
if @selected_item != nil
if unique_id == @selected_item.sale_id
sale_status = sale_status + " selected-item"
end
end
end
%>
<div class="card orders <%= sale_status %>">
<div class="card-block">
<p class="hidden orders-id"><%= unique_id %></p>
<h4 class="card-title orders-table"><%= rmo.room_name %></h4>
<p class="hidden orders-id"><%= unique_id %></p>
<p class="hidden customer-id"><%= customer_id %></p>
<p class="hidden order-cid"><%= rmo.order_id %></p>
<h4 class="card-title orders-table"><%= rmo.room_name %></h4>
<p class="card-text">
Receipt No :
<span class="orders-receipt-no">
@@ -89,38 +198,59 @@
Order Status :
<span class="orders-order-status">
<%= rmo.order_status %>
</span>
</span>
</small>
</p>
</div>
</div>
<%
</p>
</div>
</div>
<%
end
%>
</div>
</div>
<!--- Panel 2 - Orders -->
<div class="tab-pane active" id="orders" role="tabpanel">
<!--- 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 |odr|
<%
@orders.each do |odr|
# No Show completed
if odr.sale_status == 'completed'
next
end
# Assigned Id for new Order? Sale?
unique_id=""
customer_id=""
# For CSS- Class for Order? Sale?
sale_status=""
if odr.order_status == 'new'
if odr.order_status == 'new'
unique_id=odr.booking_id
else
customer_id = odr.order_customer_id
if @selected_item != nil
if odr.order_id == @selected_item.order_id
sale_status = sale_status + " selected-item"
end
end
else
unique_id=odr.sale_id
customer_id = odr.sale_customer_id
sale_status="sold"
end
# check selected item and assign
if @selected_item != nil
if unique_id == @selected_item.sale_id
sale_status = sale_status + " selected-item"
end
end
end
%>
<div class="card orders <%= sale_status %>">
<div class="card-block">
<p class="hidden orders-id"><%= unique_id %></p>
<h4 class="card-title orders-table"><%= odr.table_name %></h4>
<p class="card-text">
<p class="hidden orders-id"><%= unique_id %></p>
<p class="hidden customer-id"><%= customer_id %></p>
<p class="hidden order-cid"><%= odr.order_id %></p>
<h4 class="card-title orders-table"><%= odr.table_name %></h4
<p class="card-text">
Receipt No :
<span class="orders-receipt-no">
<%= odr.receipt_no %>
@@ -130,16 +260,16 @@
Order Status :
<span class="orders-order-status">
<%= odr.order_status %>
</span>
</span>
</small>
</p>
</div>
</div>
<%
</p>
</div>
</div>
<%
end
%>
</div>
</div>
</div>
<!-- tabs - End -->
@@ -155,12 +285,21 @@
<div class="card-block">
<div class="card-title row">
<div class="col-lg-6 col-md-6 col-sm-6">
<p>Receipt No: <span id="receipt_no"></span></p>
<p>Cashier: <span id="cashier"></span></p>
</div>
<p>Receipt No: <span id="receipt_no"><%=@selected_item.receipt_no rescue ' '%></span></p>
<!-- <p>Cashier: <span id="cashier"><%=@sale_data.cashier_name rescue ' '%></span></p> -->
</div>
<div class="col-lg-6 col-md-6 col-sm-6 text-right">
<p>Date: <span id="receipt_date"></span></p>
</div>
<p>Date: <span id="receipt_date"><%=@selected_item.receipt_date.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%></span></p>
</div>
</div>
<div class="card-title row customer_detail hide">
<div class="col-lg-6 col-md-6 col-sm-6">
<p>Customer : <span id="customer_name"></span></p>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 text-right">
<p>Amount : <span id="customer_amount"></span></p>
</div>
</div>
<div class="card-text">
<table class="table table-striped" id="order-items-table">
@@ -172,7 +311,39 @@
</tr>
</thead>
<tbody>
<!-- Append Javascript Template -->
<%
# For Sale Items
sub_total = 0
if @selected_item_type == "Sale"
@selected_item.sale_items.each do |sale_item|
sub_total += (sale_item.qty*sale_item.unit_price)
%>
<tr>
<td class='item-name'><%= sale_item.product_name %></td>
<td class='item-attr'><%= sale_item.qty %></td>
<td class='item-attr'><%= sale_item.qty*sale_item.price %></td>
</tr>
<%
end
end
%>
<%
# For Order Items
sub_total = 0
if @selected_item_type == "Order"
@selected_item.order_items.each do |order_item|
sub_total += (order_item.qty*order_item.unit_price)
%>
<tr>
<td class='item-name'><%= order_item.item_name %></td>
<td class='item-attr'><%= order_item.qty %></td>
<td class='item-attr'><%= order_item.qty*order_item.price %></td>
</tr>
<%
end
end
%>
</tbody>
</table>
</div>
@@ -180,32 +351,32 @@
<table class="table" id="order-charges-table" border="0">
<tr>
<td class="charges-name"><strong>Sub Total:</strong></td>
<td class="item-attr"><strong id="order-sub-total"></strong></td>
<td class="item-attr"><strong id="order-sub-total"><%= sub_total %></strong></td>
</tr>
<tr>
<!-- <tr>
<td class="charges-name"><strong>Food:</strong></td>
<td class="item-attr"><strong id="order-food"></strong></td>
</tr>
<tr>
<td class="charges-name"><strong>Beverage:</strong></td>
<td class="item-attr"><strong id="order-beverage"></strong></td>
</tr>
</tr> -->
<tr>
<td class="charges-name"><strong>Discount:</strong></td>
<td class="item-attr"><strong id="order-discount"></strong></td>
<td class="item-attr"><strong id="order-discount">(<%=@selected_item.total_discount rescue 0%>)</strong></td>
</tr>
<tr>
<td class="charges-name"><strong>Tax:</strong></td>
<td class="item-attr"><strong id="order-Tax"></strong></td>
<td class="item-attr"><strong id="order-Tax"><%=@selected_item.total_tax rescue 0%></strong></td>
</tr>
<tr>
<td class="charges-name"><strong>Grand Total:</strong></td>
<td class="item-attr"><strong id="order-grand-total"></strong></td>
<td class="item-attr"><strong id="order-grand-total"><%=@selected_item.grand_total rescue 0%></strong></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- Column Three -->
@@ -214,14 +385,13 @@
<button type="button" class="btn btn-primary btn-lg btn-block" disabled>Add Order</button>
<button type="button" class="btn btn-primary btn-lg btn-block" disabled>Edit</button>
<button type="button" class="btn btn-primary btn-lg btn-block" disabled>Move</button>
<button type="button" class="btn btn-primary btn-lg btn-block" disabled>Customer</button>
<button type="button" id="request_bills" class="btn btn-primary btn-lg btn-block">Req.Bill</button>
<button type="button" id="customer" class="btn btn-primary btn-lg btn-block" disabled>Customer</button>
<button type="button" id="request_bills" class="btn btn-primary btn-lg btn-block" disabled>Req.Bill</button>
<button type="button" id="request_bills" class="btn btn-primary btn-lg btn-block" disabled>Req.Bill</button>
<!-- Cashier Buttons -->
<button type="button" id="discount" class="btn btn-primary btn-lg btn-block">Discount</button>
<button type="button" id="discount" class="btn btn-primary btn-lg btn-block" disabled>Discount</button>
<!-- <button type="button" class="btn btn-primary btn-lg btn-block" disabled>Tax</button> -->
<button type="button" id="pay-bill" class="btn btn-primary btn-lg btn-block" >Pay</button>
<button type="button" id="pay-bill" class="btn btn-primary btn-lg btn-block" disabled>Pay</button>
<button type="button" class="btn btn-primary btn-lg btn-block" disabled>Re.Print</button>
</div>
</div>

View File

@@ -0,0 +1,5 @@
if(@status)
json.status @status
else
json.status false
end

View File

@@ -0,0 +1,26 @@
<h2> MPU </h2>
Amount :
<input type="text" name="amount" id="amount" value=""/>
<button type="submit" id="mpu_pay" > PAY </button>
<script>
$('#mpu_pay').on('click',function(){
var amount = $('#amount').val();
var sale_id = "<%= @sale_id %>";
$.ajax({type: "POST",
url: "<%= origami_payment_mpu_path %>",
data: "amount="+ amount + "&sale_id="+ sale_id,
success:function(result){
if(result){
alert("Payment success")
window.location.href = '/origami/sale/'+ sale_id + "/payment";
}
}
});
})
</script>

View File

@@ -1,177 +1,19 @@
<div class="row">
<div class="col-lg-5 col-md-5 col-sm-3">
<div class="card">
<div >
<div >
<% @payment_method_setting.each do |payment_method|%>
<div class="col-md-5">
<div class="col-md-12 long purple " id="<%= payment_method.payment_method%>" data-url="<%=payment_method.gateway_url%>" data-sale-id="<%= @sale_id%>"><%= payment_method.payment_method %></div>
</div>
<% end %>
<div class="purple others-payment bottom left" data-type="<%= payment_method.payment_method %>" id="<%= payment_method.payment_method %>" data-url="<%=payment_method.gateway_url%>" data-sale-id="<%= @sale_id%>"><%= payment_method.payment_method %></div>
<% end %>
</div>
</div>
<div class="col-lg-7 col-md-7 col-sm-7">
<div class="rebate-form" hidden="true">
<div class="row">
<div class="form-group col-lg-12 col-md-12 col-sm-12">
<label class="col-lg-4 col-md-4 col-sm-4">Valid Amount</label>
<input type="text" name="valid_amount" id="valid_amount" class="form-control col-lg-7 col-md-7 col-sm-7" readonly="" value="">
</div>
<hr>
</div>
<div class="row">
<div class="form-group col-lg-12 col-md-12 col-sm-12">
<label class="col-lg-4 col-md-4 col-sm-4">Used Amount</label>
<div id="used_amount" class="form-control col-lg-7 col-md-7 col-sm-7">0.0</div>
</div>
<hr>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="1" data-type="num">1</div>
<div class="col-md-3 cashier_number" data-value="2" data-type="num">2</div>
<div class="col-md-3 cashier_number" data-value="3" data-type="num">3</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="1000" data-type="add">1000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="4" data-type="num">4</div>
<div class="col-md-3 cashier_number" data-value="5" data-type="num">5</div>
<div class="col-md-3 cashier_number" data-value="6" data-type="num">6</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="5000" data-type="add">5000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="7" data-type="num">7</div>
<div class="col-md-3 cashier_number" data-value="8" data-type="num">8</div>
<div class="col-md-3 cashier_number" data-value="9" data-type="num">9</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="10000" data-type="add">10000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="0" data-type="num">0</div>
<div class="col-md-3 cashier_number" data-value="." data-type="num">.</div>
<div class="col-md-3 cashier_number" data-value="00" data-type="num">00</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="50000" data-type="add">50000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number"></div>
<div class="col-md-3 cashier_number">DEL</div>
<div class="col-md-3 cashier_number">CLR</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long purple" id="redeem" data-value="<%=@sale_id %>" data-member-value = "<%= @membership_id %>">PAY</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
</div>
<script type="text/javascript">
$(document).on('click', '.cashier_number', function(event){
// event.stopPropagation();
// event.preventDefault();
// if(event.handled !== true) {
var original_value;
original_value = $('#used_amount').text();
var input_value = $(this).attr("data-value");
var input_type = $(this).attr("data-type");
switch (input_type) {
case 'num':
if (original_value == "0.0"){
$('#used_amount').text(input_value);
}else{
$('#used_amount').append(input_value);
}
break;
case 'add':
var input_value = $(this).attr("data-value");
amount = parseInt(input_value) + parseInt(original_value);
$('#used_amount').html(amount);
break;
case 'clr':
$('#used_amount').html("0.0");
break;
}
// event.handled = true;
// } else {
// return false;
// }
});
$("#REDIMREBATE").click(function(){
$('.rebate-form').removeAttr("hidden");
gateway_url = $(this).attr("data-url");
sale_id = $(this).attr("data-sale-id");
$.ajax({
type: "GET",
url: "../../../../settings/membership_actions",
data: {type:"get_account_balance_url",gateway_url:gateway_url,sale_id:sale_id},
success: function(result){
$("#valid_amount").val(result[1]);
}
})
});
$("#redeem").click(function(){
valid_amount = $("#valid_amount").val();
sale_id = $("#REDIMREBATE").attr("data-sale-id");
membership_id = $(this).attr("data-member-value");
redeem_amount = parseInt($("#used_amount").text());
if(redeem_amount<=0){
alert(" Insufficient Amount!")
}else if(valid_amount< redeem_amount){
alert("Please type valid amount");
}else{
$.ajax({
type: "POST",
url: "<%=origami_paypar_payment_process_path%>",
data: {redeem_amount:redeem_amount,membership_id:membership_id,sale_id:sale_id},
success: function(result){
if(result.status == true){
window.location.href = '/origami/sale/'+ sale_id + "/payment"
}else{
alert(result.message);
}
}
})
}
});
</script>
$('.others-payment').on('click',function(){
var input_type = $(this).attr("data-type");
var sale_id = $(this).attr("data-sale-id");
window.location.href = '/origami/sale/'+ sale_id + "/payment/others_payment/" + input_type;
})
</script>

View File

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

View File

@@ -1,25 +1,35 @@
<div class="row">
<div class="col-lg-5 col-md-5 col-sm-3">
<div class="col-lg-6 col-md-6 col-sm-3">
<div class="card" >
<div class="card-header">
<div id="order-title">
<span><strong>Receipt No : <%=@sale_data.receipt_no rescue ' '%></strong></span>
<span style="margin-left: 24%"><strong>Receipt Date : <%=@sale_data.receipt_date.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%></strong></span>
<span><strong>Table No</strong> <% if @sale_data%>- <%=@sale_data.receipt_no%><% end %></span>
<span style="margin-left: 27%"><strong>Sale Id</strong> </span><span id="sale_id"><% if @sale_data %><%=@sale_data.sale_id %><% end %></span>
<table>
<tr>
<td style="width:55%;"><strong>Receipt No : <%=@sale_data.receipt_no rescue ' '%></strong></td>
<td style="width:45%;"><strong>Receipt Date : <%=@sale_data.receipt_date.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%></strong></td>
</tr>
<tr>
<td><strong>Table No</strong> <% if @sale_data%>- <%=@sale_data.receipt_no%><% end %></td>
<td><strong>Sale Id</strong> </span><span id="sale_id"><% if @sale_data %><%=@sale_data.sale_id %><% end %></td>
</tr>
<tr>
<td><strong>Customer :</strong> Default Customer</td>
<td><strong>Points :</strong> 1234 </td>
</tr>
</table>
</div>
</div>
<div class="card-block">
<div class="card-title">
<table class="table">
<thead>
<table >
<!-- <thead> -->
<tr>
<th style="width:60%; text-align:left">Items</th>
<th style="width:20%; text-align:right">QTY</td>
<th style="width:20%; text-align:right">Price</td>
<th style="width:80%;">Items</th>
<th style="width:20%;">QTY</td>
<th style="width:20%;">Price</td>
</tr>
</thead>
<!-- </thead> -->
</table>
</div>
<div id="table-details" class="card-text" style="min-height:400px; max-height:400px; overflow-x:scroll">
@@ -71,99 +81,87 @@
</div>
</div>
<div class="col-lg-5 col-md-5 col-sm-3">
<div class="row">
<div class="col-md-8"><strong>AMOUNT DUE</strong></div>
<div class="col-md-4"><strong><span id="amount_due"><%= @sale_data.grand_total %></span></strong></div>
<div class="row" style="margin-top:10px;">
<div class="col-md-8"><strong style="font-size:18px;">Amount Due</strong></div>
<div class="col-md-4"><strong><span id="amount_due" style="font-size:18px;"><%= @sale_data.grand_total %></span></strong></div>
</div>
<hr>
<div class="row">
<div class="col-md-8">CASH</div>
<div class="col-md-4" id="cash" >0.0</div>
<div class="col-md-8">Cash</div>
<div class="col-md-4" id="cash" ><%= @cash %></div>
</div>
<hr>
<div class="row" id="credit_payment">
<div class="col-md-8">CREDIT</div>
<div class="col-md-4">0.0</div>
<div class="col-md-8">Credit</div>
<div class="col-md-4" id="credit">0.0</div>
</div>
<hr>
<div class="row" id="card_payment">
<div class="col-md-8">OTHERS PAYMENT</div>
<div class="col-md-4">0.0</div>
<div class="col-md-8">Others Payment</div>
<div class="col-md-4" id="others"><%= @other %></div>
</div>
<hr>
<div class="row">
<div class="col-md-8">BALANCE</div>
<div class="col-md-8">Balance</div>
<div class="col-md-4"><span id='balance'><%= @sale_data.grand_total %></span></div>
</div>
<hr>
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="1" data-type="num">1</div>
<div class="col-md-3 cashier_number" data-value="2" data-type="num">2</div>
<div class="col-md-3 cashier_number" data-value="3" data-type="num">3</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="1000" data-type="add">1000</div>
<div class="row">
<div class="col-lg-6 col-md-1 col-sm-1">
<div class="row bottom">
<div class=" cashier_number " data-value="1" data-type="num">1</div>
<div class=" cashier_number left" data-value="2" data-type="num">2</div>
<div class=" cashier_number left" data-value="3" data-type="num">3</div>
</div>
<div class="row bottom">
<div class=" cashier_number " data-value="4" data-type="num">4</div>
<div class=" cashier_number left" data-value="5" data-type="num">5</div>
<div class=" cashier_number left" data-value="6" data-type="num">6</div>
</div>
<div class="row bottom">
<div class=" cashier_number " data-value="7" data-type="num">7</div>
<div class=" cashier_number left" data-value="8" data-type="num">8</div>
<div class=" cashier_number left" data-value="9" data-type="num">9</div>
</div>
<div class="row bottom">
<div class=" cashier_number " data-value="0" data-type="num">0</div>
<div class=" cashier_number left" data-value="." data-type="num">.</div>
<div class=" cashier_number left" data-value="00" data-type="num">00</div>
</div>
<div class="row bottom">
<div class=" cashier_number" data-type="nett">Nett</div>
<div class=" cashier_number red left" data-type="del">Del</div>
<div class=" cashier_number green left" data-type="clr">Clr</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="4" data-type="num">4</div>
<div class="col-md-3 cashier_number" data-value="5" data-type="num">5</div>
<div class="col-md-3 cashier_number" data-value="6" data-type="num">6</div>
</div>
<div class="col-lg-6 col-md-1 col-sm-1">
<div class="row bottom">
<div class="cashier_number long" data-value="1000" data-type="add">1000</div>
<div class="cashier_number long left" data-value="3000" data-type="add">3000</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="5000" data-type="add">5000</div>
<div class="row bottom">
<div class="cashier_number long" data-value="5000" data-type="add">5000</div>
<div class="cashier_number long left" data-value="10000" data-type="add">10000</div>
</div>
<div class="row bottom">
<div class="pay purple" id="pay">Pay</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="7" data-type="num">7</div>
<div class="col-md-3 cashier_number" data-value="8" data-type="num">8</div>
<div class="col-md-3 cashier_number" data-value="9" data-type="num">9</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="10000" data-type="add">10000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number" data-value="0" data-type="num">0</div>
<div class="col-md-3 cashier_number" data-value="." data-type="num">.</div>
<div class="col-md-3 cashier_number" data-value="00" data-type="num">00</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="50000" data-type="add">50000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row">
<div class="col-md-3 cashier_number"></div>
<div class="col-md-3 cashier_number red" data-type="del">DEL</div>
<div class="col-md-3 cashier_number green" data-type="clr">CLR</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long purple " id="pay">PAY</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-1 col-md-1 col-sm-1">
<!-- Waiter Buttons -->
<button type="button" class="btn btn-primary btn-lg btn-block"> Foc </button>
<button type="button" class="btn btn-primary btn-lg btn-block"> Void </button>
</div>
</div>
<script>
$(document).ready(function(){
update_balance();
})
$(document).on('click', '.cashier_number', function(event){
if(event.handled !== true) {
var original_value;
@@ -197,6 +195,10 @@ $(document).on('click', '.cashier_number', function(event){
$('#cash').text("0.0");
update_balance();
break;
case 'nett':
$('#cash').text($('#amount_due').text());
update_balance();
break;
}
event.handled = true;
} else {
@@ -218,7 +220,6 @@ $( document ).ready(function() {
});
$('#pay').click(function() {
if($('#balance').text() > 0){
alert(" Insufficient Amount!")
}else{
@@ -228,10 +229,16 @@ $( document ).ready(function() {
var card = $('#card').text();
var sale_id = $('#sale_id').text();
$.ajax({type: "POST",
url: "<%= origami_payment_process_path %>",
url: "<%= origami_payment_cash_path %>",
data: "cash="+ cash + "&sale_id=" + sale_id,
success:function(result){
alert("THANK YOU")
if($('#balance').text() < 0){
alert("Changed amount " + $('#balance').text() * (-1) )
}else{
alert("Thank you")
}
window.location.href = '/origami';
}
});
}
@@ -242,9 +249,9 @@ $( document ).ready(function() {
function update_balance(){
var cash = $('#cash').text();
var credit = $('#credit').text();
var card = $('#card').text();
var card = $('#others').text();
var amount_due = $('#amount_due').text();
var total = cash + credit + card
var total = parseFloat(cash) + parseFloat(credit) + parseFloat(card)
var result = amount_due - total
$('#balance').text(result);
}

View File

@@ -0,0 +1,162 @@
<div class="row">
<div class="col-lg-5 col-md-5 col-sm-3">
<div class="card" style="margin-top:10px;padding-top:20px;">
<div class="rebate-form">
<div class="row">
<div class="form-group col-lg-12 col-md-12 col-sm-12">
<label class="col-lg-4 col-md-4 col-sm-4">Valid Amount</label>
<input type="text" name="valid_amount" id="valid_amount" class="form-control col-lg-7 col-md-7 col-sm-7" readonly="" value="<%=@membership_rebate_balance%>" data-value="<%=@sale_id %>" data-member-value="<%= @membership_id %>">
</div>
<hr>
</div>
<div class="row">
<div class="form-group col-lg-12 col-md-12 col-sm-12">
<label class="col-lg-4 col-md-4 col-sm-4">Used Amount</label>
<div id="used_amount" class="form-control col-lg-7 col-md-7 col-sm-7">0.0</div>
</div>
<hr>
</div>
</div>
</div>
</div>
<div class="col-lg-7 col-md-7 col-sm-7">
<div class="row" style="margin-top:10px;">
<div class="col-md-12">
<div class="row">
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="1" data-type="num">1</div>
<div class="col-md-3 left cashier_number" data-value="2" data-type="num">2</div>
<div class="col-md-3 left cashier_number" data-value="3" data-type="num">3</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="1000" data-type="add">1000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="4" data-type="num">4</div>
<div class="col-md-3 left cashier_number" data-value="5" data-type="num">5</div>
<div class="col-md-3 left cashier_number" data-value="6" data-type="num">6</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="5000" data-type="add">5000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="7" data-type="num">7</div>
<div class="col-md-3 left cashier_number" data-value="8" data-type="num">8</div>
<div class="col-md-3 left cashier_number" data-value="9" data-type="num">9</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="10000" data-type="add">10000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number" data-value="0" data-type="num">0</div>
<div class="col-md-3 left cashier_number" data-value="." data-type="num">.</div>
<div class="col-md-3 left cashier_number" data-value="00" data-type="num">00</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long" data-value="50000" data-type="add">50000</div>
</div>
</div>
<div class="row">
<div class="col-md-7">
<div class="row bottom">
<div class="col-md-3 cashier_number"></div>
<div class="col-md-3 left cashier_number red" data-type="del">DEL</div>
<div class="col-md-3 left cashier_number green" data-type="clr">CLR</div>
</div>
</div>
<div class="col-md-5">
<div class="col-md-12 cashier_number long purple" id="redeem" >PAY</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
</div>
<script type="text/javascript">
$(document).on('click', '.cashier_number', function(event){
event.stopPropagation();
event.preventDefault();
if(event.handled !== true) {
var original_value;
original_value = $('#used_amount').text();
var input_value = $(this).attr("data-value");
var input_type = $(this).attr("data-type");
switch (input_type) {
case 'num':
if (original_value == "0.0"){
$('#used_amount').text(input_value);
}else{
$('#used_amount').append(input_value);
}
break;
case 'add':
var input_value = $(this).attr("data-value");
amount = parseInt(input_value) + parseInt(original_value);
$('#used_amount').html(amount);
break;
case 'clr':
$('#used_amount').html("0.0");
break;
case 'del' :
var cash=$('#used_amount').text();
$('#used_amount').text(cash.substr(0,cash.length-1));
break;
}
event.handled = true;
} else {
return false;
}
});
$("#redeem").click(function(){
valid_amount = $("#valid_amount").val();
sale_id = $("#valid_amount").attr('data-value');
membership_id = $("#valid_amount").attr('data-member-value');
redeem_amount = parseInt($("#used_amount").text());
if(redeem_amount<=0 ){
alert("Please type valid amount");
}else if(valid_amount< redeem_amount){
alert(" Insufficient Amount!")
}else{
$.ajax({
type: "POST",
url: "<%=origami_payment_paypar_path%>",
data: {redeem_amount:redeem_amount,membership_id:membership_id,sale_id:sale_id},
success: function(result){
if(result.status == true){
window.location.href = '/origami/sale/'+ sale_id + "/payment"
}else{
alert(result.message);
}
}
})
}
});
</script>

View File

@@ -0,0 +1,211 @@
<div class="row">
<div class="col-md-12">
<%= form_tag report_path, :method => :get, :id=>"frm_report", :class => "form" do %>
<% if period_type != false %>
<div class="row">
<div class="form-group col-md-2">
<label>Select Period</label>
<select name="period" id="sel_period" class="form-control">
<option value="0">Today</option>
<option value="1">Yesterday</option>
<option value="2">This week</option>
<option value="3">Last week</option>
<option value="4">Last 7 days</option>
<option value="5">This month</option>
<option value="6">Last month</option>
<option value="7">Last 30 days</option>
<option value="8">This year</option>
<option value="9">Last year</option>
</select>
</div>
<div class="form-group col-md-2">
<label>Select Type</label>
<select name="sale_type" id="sel_sale_type" class="form-control">
<option value="0">All Sale Type</option>
<option value="1">Revenue Only</option>
<option value="2">Discount Only</option>
<option value="3">Void Only</option>
<option value="4">Taxes Only</option>
<option value="5">Other Amount Only</option>
</select>
</div>
<div class="form-group col-md-3">
<!-- <label class="">Select Shift Period</label> -->
<label class="">From</label>
<input data-behaviour='datepicker' class="form-control" name="from" id="from" type="text" placeholder="From date">
</div>
<div class="form-group col-md-3">
<label class="">To</label>
<input data-behaviour='datepicker' class="form-control" name="to" id="to" type="text" placeholder="To date">
</div>
<div class="form-group col-md-2 margin-top-20">
<input type="submit" value="Generate Report" class='btn btn-primary'>
</div>
</div>
<% end %>
<!-- <div class="row">
<% if defined? show_monthly %>
<div class="span3" style="margin-bottom:10px;">
<input type="hidden" id="report_type" name="report_type" value="0">
<div class="btn-group" data-toggle="buttons-radio">
<button id="btn_report_type_1" onclick="$('#report_type').val(1)" type="button" class="btn btn-inverse">Monthly</button>
<button id="btn_report_type_2" onclick="$('#report_type').val(2)" type="button" class="btn btn-inverse">Yearly</button>
</div>
</div>
<% end %>
</div> -->
<div class="row">
<div class="form-group">
<% if defined? promotions %>
<%= select_tag "promotion", options_for_select(@promotions, :selected => params[:promotion_type]), :class => "form-control" %>
<% end %>
<% if defined? menu_types %>
<%= select_tag "menu_type", options_for_select(@menu_types, :selected => params[:menu_type]), :class => "form-control" %>
<% end %>
<% if defined? payments %>
<%= select_tag "payment_type", options_for_select(@payments, :selected => params[:payment_type]), :class => "form-control" %>
<% end %>
<% if defined? shift_name %>
<!-- Temporary no needs
<select name="shift_name" id="shift_name"></select>
-->
<% end %>
<% if defined? cashiers %>
<%= select_tag "cashier", options_from_collection_for_select(@cashiers,"id","name"),:prompt => "All Cashier Stations", :class => "form-control" %>
<% end %>
<% if defined? singer %>
<%= select_tag "singer", options_from_collection_for_select(singer,"id","name"),:prompt => "All Vocal List", :class => "form-control" %>
<% end %>
<% if defined? bsm %>
<%= select_tag "singer", options_from_collection_for_select(bsm,"id","name"),:prompt => "All BSM List", :class => "form-control" %>
<% end %>
<% if defined? guest_role %>
<%= select_tag "guest_role", options_from_collection_for_select(@guest_role,"id","name"),:prompt => "Vocal/BSM List", :class => "form-control" %>
<% end %>
<% if defined? list_by_payment_type %> <!-- for report detail by credit and foc -->
<%= select_tag "payment_type_list", options_for_select(@payment_list, :selected => params[:payment_type_list]), :class => "form-control" %>
<% end %>
<% if defined? products %>
<%= select_tag "product", options_from_collection_for_select(@products,"id","name"),:prompt => "All Products", :class => "form-control" %>
<% end %>
<% if defined? items %>
<%= select_tag "item", options_for_select(@items, :selected => params[:item_type]), :class => "form-control" %>
<% end %>
</div>
</div>
<!-- <div class="row">
<div class="col-md-12">
<input type="submit" value="Generate Report" class='btn btn-primary'>
</div>
</div> -->
<% end %>
</div>
</div>
<!--
<div class = "row">
<div class = "span3">
<input type="button" value="Filter by Shift" class='btn' onclick = "select_shift(this)">
</div>
<div class = "span3">
<select name="shift" id="shift">
<option value="">All Shift</option>
</select>
</div>
<div class = "span3">
</div>
</div>
-->
<script type="text/javascript">
$(function(){
$('#custom_excel').hide();
$('#custom_excel').click(function(){
var url = $('#custom_excel').attr('data-url');
$('#frm_report').attr('action',url)
$('#frm_report').submit();
// window.location = url;
});
var item = $('#item').val();
var payment_type = $('#payment_type');
if(item == 'order'){
$('#cashier').hide();
$('#waiter').show();
if(payment_type){
$('#payment_type').hide();
}
}
else if(item == 'sale'){
$('#waiter').hide();
$('#cashier').show();
}
else{
$('#waiter').hide();
$('#cashier').show();
$("#item").val('sale');
}
});
//Reset the form to pervious values
$("#branch").val(<%=params[:branch]%>);
$("#waiter").val("<%=params[:waiter]%>");
$("#cashier").val(<%=params[:cashier]%>);
$("#product").val(<%=params[:product]%>);
$("#singer").val(<%=params[:singer]%>);
$("#item").val('<%=params[:item]%>');
$("#guest_role").val('<%=params[:guest_role]%>');
$("#from").val("<%=params[:from]%>");
$("#to").val("<%=params[:to]%>");
$("#sel_period").val(<%=params[:period]%>);
$("#sel_sale_type").val(<%=params[:sale_type]%>);
<% if params[:period_type] == 1 || params[:period_type] == "1" %>
$("#rd_period_type_1").attr("checked","checked");
<% else %>
$("#rd_period_type_0").attr("checked","checked");
<% end %>
$(".btn-group button").removeClass("active");
<% report_type = params[:report_type].blank? ? "0" : params[:report_type] %>
$("#btn_report_type_<%= report_type %>").addClass("active");
$('#item').change(function(){
var item = $('#item').val();
var payment_type = $('#payment_type');
if(item == 'sale'){
$('#waiter').hide();
$('#cashier').show();
if(payment_type){
$('#payment_type').show();
}
}
else{
$('#cashier').hide();
$('#waiter').show();
if(payment_type){
$('#payment_type').hide();
}
}
});
</script>

View File

@@ -0,0 +1,110 @@
<div class="page-header">
<ul class="breadcrumb">
<li><a href="<%= %>">Home</a></li>
<li>Receipt List Report</li>
</ul>
</div>
<div class="container">
<%= render :partial=>'shift_sale_report_filter',
:locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_receipt_no_index_path} %>
<hr />
</div>
<div class="container">
<div class="row">
<div class="col-md-12 text-right">
<a href="javascript:export_to('<%=reports_receipt_no_index_path%>.xls')" class = "btn btn-default">Export to Excel</a>
</div>
</div>
</div>
<div class="container margin-top-20">
<div class="card row">
<table class="table table-striped">
<thead>
<tr>
<th style='text-align:center;'>Date</th>
<th style='text-align:center;'>Receipt No</th>
<th style='text-align:center;'>Cashier Name</th>
<th style='text-align:center;'>Gross Sales</th>
<th style='text-align:center;'>Discount</th>
<th style='text-align:center;'>Total Sales</th>
<th style='text-align:center;'>CT</th>
<th style='text-align:center;'>Nett Sales</th>
</tr>
</thead>
<tbody>
<% total_sales = 0 %>
<% net_sales = 0 %>
<% @sale_data.each do |sale| %>
<% total_sales = sale.total_amount.to_f - sale.total_discount.to_f%>
<% net_sales = total_sales.to_f + sale.total_tax.to_f%>
<tr>
<td style='text-align:center;'><%= sale.receipt_date.strftime("#{sale.receipt_date.day.ordinalize} %b") rescue '-' %></td>
<td style='text-align:center;'><%=sale.receipt_no.to_s rescue ''%></td>
<td style='text-align:center;'><%=sale.cashier_id rescue ''%></td>
<td style='text-align:center;'><%= number_with_delimiter(sprintf("%.2f",sale.total_amount.to_f), :delimiter => ',') %></td>
<td style='text-align:center;'><%= number_with_delimiter(sprintf("%.2f",sale.total_discount.to_f), :delimiter => ',') %></td>
<td style='text-align:center;'><%= number_with_delimiter(sprintf("%.2f",total_sales.to_f), :delimiter => ',') %></td>
<td style='text-align:center;'><%= number_with_delimiter(sprintf("%.2f",sale.total_tax.to_f), :delimiter => ',') %></td>
<td style='text-align:center;'><%= number_with_delimiter(sprintf("%.2f",net_sales.to_f), :delimiter => ',') %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<%= paginate @sale_data %>
<script>
$(function(){
var check_arr = [];
var search = '<%= params[:period_type] %>';
if(search){
if(parseInt(search) == 0){
search_by_period();
}
else{
search_by_date();
}
}else{
search_by_period();
}
$('#sel_period').change(function(){
search_by_period();
});
function search_by_period(){
var period = $('#sel_period').val();
var period_type = 0;
var from = "";
var to = "";
}
$('#from').change(function(){
search_by_date();
});
$('#to').change(function(){
search_by_date();
});
function search_by_date(){
var from = $('#from').val();
var to = $('#to').val();
var period = 0;
var period_type = 1;
if(to != '' && from != ''){
shift_name = from + ',' + to;
check_arr.push(to);
// console.log(check_arr.length)
if(check_arr.length == 1){
}
if(check_arr.length == 3){
check_arr = [];
}
}
}
});
</script>

Some files were not shown because too many files have changed in this diff Show More