diff --git a/app/assets/javascripts/dining_charges.coffee b/app/assets/javascripts/dining_charges.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/dining_charges.coffee @@ -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/ diff --git a/app/assets/javascripts/settings/item_sets.coffee b/app/assets/javascripts/settings/item_sets.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/settings/item_sets.coffee @@ -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/ diff --git a/app/assets/stylesheets/dining_charges.scss b/app/assets/stylesheets/dining_charges.scss new file mode 100644 index 00000000..b0d4ba51 --- /dev/null +++ b/app/assets/stylesheets/dining_charges.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the dining_charges controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/settings.scss b/app/assets/stylesheets/settings.scss index 37064f07..ba6ba39d 100644 --- a/app/assets/stylesheets/settings.scss +++ b/app/assets/stylesheets/settings.scss @@ -26,7 +26,22 @@ ul.dropdown-menu li a{ background-color: transparent !important; margin-bottom: 0px !important; } + .page-header{ border-bottom :0px solid #000 !important; margin :0px !important; -} \ No newline at end of file +} + +.card-block { + text-align:center; + background-color:#ddd; +} + +.footer { + position: fixed; + bottom: 0; + left: 0; + height: auto; + background-color: #ef404a; + width: 100%; + } \ No newline at end of file diff --git a/app/assets/stylesheets/settings/item_sets.scss b/app/assets/stylesheets/settings/item_sets.scss new file mode 100644 index 00000000..004d8d6b --- /dev/null +++ b/app/assets/stylesheets/settings/item_sets.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Settings/ItemSets controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/origami/voucher_controller.rb b/app/controllers/origami/voucher_controller.rb new file mode 100644 index 00000000..7eda6084 --- /dev/null +++ b/app/controllers/origami/voucher_controller.rb @@ -0,0 +1,72 @@ +class Origami::VoucherController < BaseOrigamiController + + def index + @sale_id = params[:sale_id] + + # limit voucher_amount + sale_data = Sale.find_by_sale_id(@sale_id) + total = sale_data.grand_total + @vouchercount = 0 + others = 0 + sale_data.sale_payments.each do |sale_payment| + if sale_payment.payment_method == "voucher" + @vouchercount = @vouchercount + sale_payment.payment_amount + else + others = others + sale_payment.payment_amount + end + end + @can_voucher = total - @vouchercount - others + + end + + def create + cash = params[:amount] + sale_id = params[:sale_id] + sale_id = params[:refnumber] + if(Sale.exists?(sale_id)) + customer_data= Customer.find_by_customer_id(sale_data.customer_id) + if customer_data + membership_id = customer_data.membership_id + membership_setting = MembershipSetting.find_by_membership_type("paypar_url") + if membership_setting.gateway_url + member_actions =MembershipAction.find_by_membership_type("get_account_balance") #need to modify here + 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 + auth_token = member_actions.auth_token.to_s + # membership_data = SalePayment.get_paypar_account(url,membership_setting.auth_token,@membership_id,@campaign_type_id,merchant_uid,auth_token) + # if membership_data["status"]==true + begin + response = HTTParty.get(url, + :body => { app_token: token,membership_id:membership_id, + campaign_type_id:campaign_type_id,merchant_uid:merchant_uid, + auth_token:auth_token + }.to_json, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + }, :timeout => 10 + ) + rescue Net::OpenTimeout + response = { status: false } + + rescue OpenURI::HTTPError + response = { status: false} + + rescue SocketError + response = { status: false} + end + # end + end + end + end + if( response["status"]==true ) + saleObj = Sale.find(sale_id) + sale_payment = SalePayment.new + @status, @sale = sale_payment.process_payment(saleObj, @user, cash, "voucher") + end + end + end + +end diff --git a/app/controllers/settings/dining_charges_controller.rb b/app/controllers/settings/dining_charges_controller.rb new file mode 100644 index 00000000..6de504bf --- /dev/null +++ b/app/controllers/settings/dining_charges_controller.rb @@ -0,0 +1,91 @@ +class Settings::DiningChargesController < ApplicationController + before_action :set_dining_charge, only: [:show, :edit, :update, :destroy] + before_action :set_settings_facility + before_action :set_settings_zone + # GET /dining_charges + # GET /dining_charges.json + def index + @dining_charges = DiningCharge.all + end + + # GET /dining_charges/1 + # GET /dining_charges/1.json + def show + end + + # GET /dining_charges/new + def new + @dining_charge = DiningCharge.new + end + + # GET /dining_charges/1/edit + def edit + end + + # POST /dining_charges + # POST /dining_charges.json + def create + @dining_charge = DiningCharge.new(dining_charge_params) + @dining_charge.dining_facility_id = @settings_dining_facility.id + respond_to do |format| + if @dining_charge.save + format.html { redirect_to edit_settings_zone_table_path(@zone,@settings_dining_facility), notice: 'Dining charge was successfully created.' } + format.json { render :show, status: :created, location: @dining_charge } + else + format.html { render :new } + format.json { render json: @dining_charge.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /dining_charges/1 + # PATCH/PUT /dining_charges/1.json + def update + respond_to do |format| + @dining_charge.dining_facility_id = @settings_dining_facility.id + if @dining_charge.update(dining_charge_params) + format.html { redirect_to edit_settings_zone_table_path(@zone,@settings_dining_facility), notice: 'Dining charge was successfully updated.' } + format.json { render :show, status: :ok, location: @dining_charge } + else + format.html { render :edit } + format.json { render json: @dining_charge.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /dining_charges/1 + # DELETE /dining_charges/1.json + def destroy + @dining_charge.destroy + respond_to do |format| + format.html { redirect_to dining_charges_url, notice: 'Dining charge was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_dining_charge + @dining_charge = DiningCharge.find(params[:id]) + end + + def set_settings_facility + if params[:table_id] + @table = true + @settings_dining_facility = Table.find(params[:table_id]) + elsif params[:room_id] + @room = true + @settings_dining_facility = Room.find(params[:room_id]) + end + end + + def set_settings_zone + @zone = Zone.find(params[:zone_id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def dining_charge_params + # params.fetch(:dining_charge, {}) + params.require(:dining_charge).permit(:item_code, :unit_price, :taxable, :charge_type,:minimum_free_time ,:charge_block,:time_rounding,:time_rounding_block, :zone_id) + end +end diff --git a/app/controllers/settings/item_sets_controller.rb b/app/controllers/settings/item_sets_controller.rb new file mode 100644 index 00000000..ace39027 --- /dev/null +++ b/app/controllers/settings/item_sets_controller.rb @@ -0,0 +1,74 @@ +class Settings::ItemSetsController < ApplicationController + before_action :set_settings_item_set, only: [:show, :edit, :update, :destroy] + + # GET /settings/item_sets + # GET /settings/item_sets.json + def index + @settings_item_sets = ItemSet.all + end + + # GET /settings/item_sets/1 + # GET /settings/item_sets/1.json + def show + end + + # GET /settings/item_sets/new + def new + @settings_item_set = ItemSet.new + end + + # GET /settings/item_sets/1/edit + def edit + end + + # POST /settings/item_sets + # POST /settings/item_sets.json + def create + @settings_item_set = ItemSet.new(settings_item_set_params) + + respond_to do |format| + if @settings_item_set.save + format.html { redirect_to @settings_item_set, notice: 'Item set was successfully created.' } + format.json { render :show, status: :created, location: @settings_item_set } + else + format.html { render :new } + format.json { render json: @settings_item_set.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /settings/item_sets/1 + # PATCH/PUT /settings/item_sets/1.json + def update + respond_to do |format| + if @settings_item_set.update(settings_item_set_params) + format.html { redirect_to @settings_item_set, notice: 'Item set was successfully updated.' } + format.json { render :show, status: :ok, location: @settings_item_set } + else + format.html { render :edit } + format.json { render json: @settings_item_set.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /settings/item_sets/1 + # DELETE /settings/item_sets/1.json + def destroy + @settings_item_set.destroy + respond_to do |format| + format.html { redirect_to settings_item_sets_url, notice: 'Item set was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_settings_item_set + @settings_item_set = ItemSet.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def settings_item_set_params + params.require(:settings_item_set).permit(:name, :min_selectable_qty, :max_selectable_qty) + end +end diff --git a/app/helpers/dining_charges_helper.rb b/app/helpers/dining_charges_helper.rb new file mode 100644 index 00000000..972a028c --- /dev/null +++ b/app/helpers/dining_charges_helper.rb @@ -0,0 +1,2 @@ +module DiningChargesHelper +end diff --git a/app/helpers/settings/item_sets_helper.rb b/app/helpers/settings/item_sets_helper.rb new file mode 100644 index 00000000..59c3b632 --- /dev/null +++ b/app/helpers/settings/item_sets_helper.rb @@ -0,0 +1,2 @@ +module Settings::ItemSetsHelper +end diff --git a/app/models/dining_charge.rb b/app/models/dining_charge.rb new file mode 100644 index 00000000..e1d70278 --- /dev/null +++ b/app/models/dining_charge.rb @@ -0,0 +1,41 @@ +class DiningCharge < ApplicationRecord + belongs_to :table + belongs_to :room + + def amount_calculate(dining_charges_obj, checkin , checkout) + + if !checkin.nil? && !checkout.nil? && !dining_charges_obj.nil? + + minutes = ((checkin - checkout) * 24 * 60).to_i # stay minutes + dining_minutes = minutes - dining_charges_obj.minimum_free_time # stayminutes - free minutes + charge_type = dining_charges_obj.charge_type + if charge_type == 'hr' + + elsif charge_type == 'day' + price = charge_by_day + end + end + + end + + def charge_by_hour + + end + + def charge_by_day(chargesObj, dining_minutes) + minues_per_day = 12 * 60 + result = dining_minutes / minues_per_day + if result < 1 + return chargesObj.unit_price + elsif result > 1 + solid_price = result * chargesObj.unit_price + + remain_value = dining_minutes % minues_per_day + roundingblock = remain_value / chargesObj.time_rounding_block + if roundingblock > 1 + + end + end + end + +end diff --git a/app/models/dining_facility.rb b/app/models/dining_facility.rb index 510da53d..f441612a 100644 --- a/app/models/dining_facility.rb +++ b/app/models/dining_facility.rb @@ -1,5 +1,6 @@ class DiningFacility < ApplicationRecord belongs_to :zone + has_many :dining_charges TABLE_TYPE = "Table" ROOM_TYPE = "Room" diff --git a/app/models/item_set.rb b/app/models/item_set.rb new file mode 100644 index 00000000..55bc0c6b --- /dev/null +++ b/app/models/item_set.rb @@ -0,0 +1,7 @@ +class ItemSet < ApplicationRecord + has_many :menu_item_sets + has_many :menu_items, through: :menu_item_sets + + has_many :menu_instance_item_sets + has_many :menu_item_instances, through: :menu_instance_item_sets +end diff --git a/app/models/menu_category.rb b/app/models/menu_category.rb index 71ad42c8..29484bcc 100644 --- a/app/models/menu_category.rb +++ b/app/models/menu_category.rb @@ -1,5 +1,5 @@ class MenuCategory < ApplicationRecord - before_create :generate_menu_category_code + # before_create :generate_menu_category_code belongs_to :menu has_many :children, :class_name => "MenuCategory", foreign_key: "menu_category_id" @@ -37,7 +37,7 @@ class MenuCategory < ApplicationRecord private - def generate_menu_category_code - self.code = SeedGenerator.generate_code(self.class.name, "C") - end + # def generate_menu_category_code + # self.code = SeedGenerator.generate_code(self.class.name, "C") + # end end diff --git a/app/models/menu_instance_item_set.rb b/app/models/menu_instance_item_set.rb new file mode 100644 index 00000000..bc1d7aaf --- /dev/null +++ b/app/models/menu_instance_item_set.rb @@ -0,0 +1,4 @@ +class MenuInstanceItemSet < ApplicationRecord + belongs_to :item_set + belongs_to :menu_item_instance +end diff --git a/app/models/menu_item.rb b/app/models/menu_item.rb index 1f1afbe4..4a661c14 100644 --- a/app/models/menu_item.rb +++ b/app/models/menu_item.rb @@ -1,6 +1,5 @@ class MenuItem < ApplicationRecord - - before_create :generate_menu_item_code + # before_create :generate_menu_item_code belongs_to :menu_category, :optional => true has_many :menu_item_instances @@ -8,6 +7,9 @@ class MenuItem < ApplicationRecord has_many :children, :class_name => "MenuItem", foreign_key: "menu_item_id" belongs_to :account + has_many :menu_item_sets + has_many :item_sets, through: :menu_item_sets + validates_presence_of :name, :type, :min_qty, :taxable, :min_selectable_item, :max_selectable_item default_scope { order('item_code asc') } @@ -70,10 +72,10 @@ class MenuItem < ApplicationRecord end - private + # private - def generate_menu_item_code - self.item_code = SeedGenerator.generate_code(self.class.name, "I") - end + # def generate_menu_item_code + # self.item_code = SeedGenerator.generate_code(self.class.name, "I") + # end end diff --git a/app/models/menu_item_instance.rb b/app/models/menu_item_instance.rb index f39c29a2..579b7a5a 100644 --- a/app/models/menu_item_instance.rb +++ b/app/models/menu_item_instance.rb @@ -1,6 +1,6 @@ class MenuItemInstance < ApplicationRecord belongs_to :menu_item - before_create :generate_menu_item_instance_code + # before_create :generate_menu_item_instance_code def self.findParentCategory(item) if item.menu_category_id @@ -11,9 +11,9 @@ class MenuItemInstance < ApplicationRecord end end - private + # private - def generate_menu_item_instance_code - self.item_instance_code = SeedGenerator.generate_code(self.class.name, "II") - end + # def generate_menu_item_instance_code + # self.item_instance_code = SeedGenerator.generate_code(self.class.name, "II") + # end end diff --git a/app/models/menu_item_set.rb b/app/models/menu_item_set.rb new file mode 100644 index 00000000..a39b8522 --- /dev/null +++ b/app/models/menu_item_set.rb @@ -0,0 +1,4 @@ +class MenuItemSet < ApplicationRecord + belongs_to :item_set + belongs_to :menu_item +end diff --git a/app/models/order.rb b/app/models/order.rb index 398fb0f2..0ef19729 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -65,7 +65,6 @@ class Order < ApplicationRecord end def adding_line_items - if self.items #re-order to ordered_list = re_order_items(self.items) diff --git a/app/views/home/dashboard.html.erb b/app/views/home/dashboard.html.erb index 6b49c880..82b99cf0 100644 --- a/app/views/home/dashboard.html.erb +++ b/app/views/home/dashboard.html.erb @@ -1,12 +1,12 @@ - -
<%= notice %>
+ +| + | ||
|---|---|---|
| <%= link_to 'Show', dining_charge %> | +<%= link_to 'Edit', edit_dining_charge_path(dining_charge) %> | +<%= link_to 'Destroy', dining_charge, method: :delete, data: { confirm: 'Are you sure?' } %> | +
<%= notice %>
+ +<%= link_to 'Edit', edit_dining_charge_path(@dining_charge) %> | +<%= link_to 'Back', dining_charges_path %> diff --git a/app/views/settings/dining_charges/show.json.jbuilder b/app/views/settings/dining_charges/show.json.jbuilder new file mode 100644 index 00000000..a91128e1 --- /dev/null +++ b/app/views/settings/dining_charges/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "dining_charges/dining_charge", dining_charge: @dining_charge diff --git a/app/views/settings/employees/index.html.erb b/app/views/settings/employees/index.html.erb index b44a2dcd..7c1f2eb7 100644 --- a/app/views/settings/employees/index.html.erb +++ b/app/views/settings/employees/index.html.erb @@ -16,6 +16,7 @@<%= notice %>
+ +| Name | +Min selectable qty | +Max selectable qty | ++ | ||
|---|---|---|---|---|---|
| <%= settings_item_set.name %> | +<%= settings_item_set.min_selectable_qty %> | +<%= settings_item_set.max_selectable_qty %> | +<%= link_to 'Show', settings_item_set %> | +<%= link_to 'Edit', edit_settings_item_set_path(settings_item_set) %> | +<%= link_to 'Destroy', settings_item_set, method: :delete, data: { confirm: 'Are you sure?' } %> | +
<%= notice %>
+ ++ Name: + <%= @settings_item_set.name %> +
+ ++ Min selectable qty: + <%= @settings_item_set.min_selectable_qty %> +
+ ++ Max selectable qty: + <%= @settings_item_set.max_selectable_qty %> +
+ +<%= link_to 'Edit', edit_settings_item_set_path(@settings_item_set) %> | +<%= link_to 'Back', settings_item_sets_path %> diff --git a/app/views/settings/item_sets/show.json.jbuilder b/app/views/settings/item_sets/show.json.jbuilder new file mode 100644 index 00000000..db3c9813 --- /dev/null +++ b/app/views/settings/item_sets/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "settings_item_sets/settings_item_set", settings_item_set: @settings_item_set diff --git a/app/views/settings/menu_categories/show.html.erb b/app/views/settings/menu_categories/show.html.erb index 25c3c9ba..7e1f44af 100644 --- a/app/views/settings/menu_categories/show.html.erb +++ b/app/views/settings/menu_categories/show.html.erb @@ -1,6 +1,6 @@" do + render + end +end diff --git a/spec/views/settings/item_sets/edit.html.erb_spec.rb b/spec/views/settings/item_sets/edit.html.erb_spec.rb new file mode 100644 index 00000000..5add21aa --- /dev/null +++ b/spec/views/settings/item_sets/edit.html.erb_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe "settings/item_sets/edit", type: :view do + before(:each) do + @settings_item_set = assign(:settings_item_set, Settings::ItemSet.create!( + :name => "MyString", + :min_selectable_qty => 1, + :max_selectable_qty => 1 + )) + end + + it "renders the edit settings_item_set form" do + render + + assert_select "form[action=?][method=?]", settings_item_set_path(@settings_item_set), "post" do + + assert_select "input[name=?]", "settings_item_set[name]" + + assert_select "input[name=?]", "settings_item_set[min_selectable_qty]" + + assert_select "input[name=?]", "settings_item_set[max_selectable_qty]" + end + end +end diff --git a/spec/views/settings/item_sets/index.html.erb_spec.rb b/spec/views/settings/item_sets/index.html.erb_spec.rb new file mode 100644 index 00000000..3dcf7fb2 --- /dev/null +++ b/spec/views/settings/item_sets/index.html.erb_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +RSpec.describe "settings/item_sets/index", type: :view do + before(:each) do + assign(:settings_item_sets, [ + Settings::ItemSet.create!( + :name => "Name", + :min_selectable_qty => 2, + :max_selectable_qty => 3 + ), + Settings::ItemSet.create!( + :name => "Name", + :min_selectable_qty => 2, + :max_selectable_qty => 3 + ) + ]) + end + + it "renders a list of settings/item_sets" do + render + assert_select "tr>td", :text => "Name".to_s, :count => 2 + assert_select "tr>td", :text => 2.to_s, :count => 2 + assert_select "tr>td", :text => 3.to_s, :count => 2 + end +end diff --git a/spec/views/settings/item_sets/new.html.erb_spec.rb b/spec/views/settings/item_sets/new.html.erb_spec.rb new file mode 100644 index 00000000..fc04e612 --- /dev/null +++ b/spec/views/settings/item_sets/new.html.erb_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe "settings/item_sets/new", type: :view do + before(:each) do + assign(:settings_item_set, Settings::ItemSet.new( + :name => "MyString", + :min_selectable_qty => 1, + :max_selectable_qty => 1 + )) + end + + it "renders new settings_item_set form" do + render + + assert_select "form[action=?][method=?]", settings_item_sets_path, "post" do + + assert_select "input[name=?]", "settings_item_set[name]" + + assert_select "input[name=?]", "settings_item_set[min_selectable_qty]" + + assert_select "input[name=?]", "settings_item_set[max_selectable_qty]" + end + end +end diff --git a/spec/views/settings/item_sets/show.html.erb_spec.rb b/spec/views/settings/item_sets/show.html.erb_spec.rb new file mode 100644 index 00000000..4e4b9b2c --- /dev/null +++ b/spec/views/settings/item_sets/show.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "settings/item_sets/show", type: :view do + before(:each) do + @settings_item_set = assign(:settings_item_set, Settings::ItemSet.create!( + :name => "Name", + :min_selectable_qty => 2, + :max_selectable_qty => 3 + )) + end + + it "renders attributes in
" do + render + expect(rendered).to match(/Name/) + expect(rendered).to match(/2/) + expect(rendered).to match(/3/) + end +end diff --git a/test/system/dining_charges_test.rb b/test/system/dining_charges_test.rb new file mode 100644 index 00000000..3ed188c5 --- /dev/null +++ b/test/system/dining_charges_test.rb @@ -0,0 +1,9 @@ +require "application_system_test_case" + +class DiningChargesTest < ApplicationSystemTestCase + # test "visiting the index" do + # visit dining_charges_url + # + # assert_selector "h1", text: "DiningCharge" + # end +end diff --git a/test/system/item_sets_test.rb b/test/system/item_sets_test.rb new file mode 100644 index 00000000..c162d36f --- /dev/null +++ b/test/system/item_sets_test.rb @@ -0,0 +1,9 @@ +require "application_system_test_case" + +class Settings::ItemSetsTest < ApplicationSystemTestCase + # test "visiting the index" do + # visit settings_item_sets_url + # + # assert_selector "h1", text: "Settings::ItemSet" + # end +end