diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index f2ee34ba..8ff96589 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -18,3 +18,4 @@ //= require cable //= require settings/processing_items //= require bootstrap-datepicker + diff --git a/app/controllers/crm/customers_controller.rb b/app/controllers/crm/customers_controller.rb index c25f6e80..295a0d8f 100644 --- a/app/controllers/crm/customers_controller.rb +++ b/app/controllers/crm/customers_controller.rb @@ -4,10 +4,13 @@ class Crm::CustomersController < ApplicationController # GET /crm/customers # GET /crm/customers.json def index - @crm_customers = Customer.all - @customers = Customer.new + @sale_id = 0 + @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 # index.html.erb format.json { render json: @crm_customers } @@ -33,15 +36,68 @@ class Crm::CustomersController < ApplicationController # POST /crm/customers # POST /crm/customers.json def create - @crm_customer = Customer.new(customer_params) + @crm_customers = Customer.new(customer_params) + respond_to do |format| - if @crm_customer.save - format.html { redirect_to @crm_customer, notice: 'Customer was successfully created.' } - format.json { render :show, status: :created, location: @crm_customer } + 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] + + membership = MembershipSetting.find_by_membership_type("smartpay_url") + app_token = membership.auth_token.to_s + url = membership.gateway_url.to_s + "/api/create_membership_customer".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, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + } + ) + + 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 + # 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"] } + + else + format.html { redirect_to '/crm/customers/'+params[:sale_id]+'/assign_sale_id', notice: response["message"] } + end + + end + + + # format.json { render :index, status: :created, location: @crm_customers } + else - format.html { render :new } - format.json { render json: @crm_customer.errors, status: :unprocessable_entity } + 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 + end end end @@ -49,14 +105,38 @@ class Crm::CustomersController < ApplicationController # PATCH/PUT /crm/customers/1 # PATCH/PUT /crm/customers/1.json def update + respond_to do |format| if @crm_customer.update(customer_params) - format.html { redirect_to @crm_customer, notice: 'Customer was successfully updated.' } + + 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] + + membership = MembershipSetting.find_by_membership_type("smartpay_url") + app_token = membership.auth_token.to_s + url = membership.gateway_url.to_s + "/api/update_membership_customer".to_s + + response = HTTParty.post(url, :body => { name: name,phone: phone,email: email, + date_of_birth: date_of_birth, + id: id}.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.json { render json: @crm_customer.errors, status: :unprocessable_entity } end + end end @@ -70,6 +150,23 @@ 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 @@ -78,6 +175,9 @@ 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_id, :membership_type, :membership_authentication_code) + + params.require(:customer).permit(:name, :company, :contact_no, :email, :date_of_birth, :membership_type, :membership_authentication_code) end end + + diff --git a/app/controllers/crm/home_controller.rb b/app/controllers/crm/home_controller.rb index 083f2bf7..f3e82e41 100644 --- a/app/controllers/crm/home_controller.rb +++ b/app/controllers/crm/home_controller.rb @@ -3,22 +3,38 @@ class Crm::HomeController < BaseCrmController @booking = Booking.all @customer = Customer.all - - #@booking = Booking.select("bookings.id as booking_id, - # bookings.checkin_at, - # bookings.checkin_by, - # bookings.dining_facility_id, - # od.customer_id as customer, - # od.id as order_id, - # od.item_count as count, - # odt.id as order_item_id, - # odt.item_name as item_name") - # .joins("join booking_orders as bko ON bko.booking_id = bookings.id") - # .joins("right join orders as od ON od.id = bko.order_id") - # .joins("right join order_items as odt ON odt.order_id=od.id") - # .order("bookings.id DESC") end + def show end + + #print for crm + def print_order + + @booking = Booking.find(params[:id]) + unique_code="CrmOrderPdf" + + print_settings = PrintSetting.find_by_unique_code(unique_code) + + printer = Printer::ReceiptPrinter.new(print_settings) + + printer.print_crm_order(@booking,print_settings) + + end + + def update_sale_by_customer + + sale = Sale.find(params[:sale_id]) + 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 + end + diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index 62289c89..c5b87b6b 100644 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -1,5 +1,6 @@ class Origami::RequestBillsController < BaseOrigamiController + def print @sale = Sale.new sale_order=SaleOrder.new @@ -25,4 +26,4 @@ class Origami::RequestBillsController < BaseOrigamiController printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer_name) redirect_to origami_root_path end -end + diff --git a/app/models/account.rb b/app/models/account.rb index dc2e7cf8..5d775b83 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -2,7 +2,7 @@ class Account < ApplicationRecord validates_presence_of :title, :account_type has_many :menu_items - # belongs_to :lookup , :class_name => "Lookup" + def self.collection Account.select("id, title").map { |e| [e.title, e.id] } end diff --git a/app/models/customer.rb b/app/models/customer.rb index 95901cce..6d2bd561 100644 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -10,21 +10,26 @@ class Customer < ApplicationRecord validates :contact_no, uniqueness: true validates :email, uniqueness: true + def self.get_member_group - gateway_url = MembershipSetting.find_by_membership_type("smartpay_url") - url = gateway_url.gateway_url.to_s + "/api/get_all_member_group".to_s - response = HTTParty.get(url) + membership = MembershipSetting.find_by_membership_type("smartpay_url") + app_token = membership.auth_token.to_s + + url = membership.gateway_url.to_s + "/api/get_all_member_group".to_s + response = HTTParty.get(url, + :body => { app_token: app_token}.to_json, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + } + ) puts response.body, response.code, response.message, response.headers.inspect return response; end -# http://192.168.1.47:3006/api/create_membership_customer -#get_all_member_group - - def lastest_invoices sales.where(:customer_id => self.id).order("created_at desc").limit(5) end diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb index d0819529..523b9ec9 100644 --- a/app/models/printer/receipt_printer.rb +++ b/app/models/printer/receipt_printer.rb @@ -72,4 +72,14 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker pdf.render_file "tmp/receipt_bill.pdf" self.print("tmp/receipt_bill.pdf") end + + #Bill Receipt Print + def print_crm_order(booking,setting) + #Use CUPS service + #Generate PDF + #Print + pdf = CrmOrderPdf.new(booking,setting) + pdf.render_file "tmp/print_crm_order.pdf" + self.print("tmp/print_crm_order.pdf") + end end diff --git a/app/pdf/crm_order_pdf.rb b/app/pdf/crm_order_pdf.rb new file mode 100644 index 00000000..36aed0a1 --- /dev/null +++ b/app/pdf/crm_order_pdf.rb @@ -0,0 +1,71 @@ +class CrmOrderPdf < Prawn::Document + + def initialize(order_item, print_settings) + 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.type}", :size => 15 + stroke_horizontal_rule + move_down 5 + + #order_info + order_info(order_item.checkin_by,order_item.checkin_at, order_item.customer_id) + + # order items + order_items(order_item) + end + + # Write Order Information to PDF + def order_info(order_by, order_at, customer) + 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 + end + + stroke_horizontal_rule + + move_down 20 + end + + # Write Order items to PDF + def order_items(order_item) + y_position = cursor + + bounding_box([0,y_position], :width => 180, :height => 15) do + text "Item", :size => 7,:align => :left + end + + bounding_box([160,y_position], :width => 20, :height => 15) do + text "Qty", :size => 7,:align => :right + end + + stroke_horizontal_rule + move_down 5 + + #Add Order Item + add_order_items(order_item) + end + + # Add order items under order info + def add_order_items(order_item) + y_position = cursor + + move_down 5 + + bounding_box([0,y_position], :width => 180, :height => 20) do + text "#{order_item.sale_id}", :size => 7,:align => :left + end + + bounding_box([160,y_position], :width => 20, :height => 20) do + text "#{order_item.sale_id}", :size => 7,:align => :right + end + + move_down 5 + + end + +end diff --git a/app/views/crm/customers/_form.html.erb b/app/views/crm/customers/_form.html.erb index 533710a9..758a52a2 100644 --- a/app/views/crm/customers/_form.html.erb +++ b/app/views/crm/customers/_form.html.erb @@ -8,7 +8,6 @@ <%= f.input :contact_no %> <%= f.input :email %> <%= f.input :date_of_birth %> - <%= f.input :membership_id, :collection => @membership %> <%= f.input :membership_type %> <%= f.input :membership_authentication_code %> @@ -17,3 +16,5 @@ <%= f.button :submit %> <% end %> + + \ No newline at end of file diff --git a/app/views/crm/customers/index.html.erb b/app/views/crm/customers/index.html.erb index d866d47d..86f267b0 100644 --- a/app/views/crm/customers/index.html.erb +++ b/app/views/crm/customers/index.html.erb @@ -1,20 +1,20 @@

-
+
@@ -22,6 +22,7 @@ + Select Name Company Contact no @@ -32,10 +33,16 @@ <% @crm_customers.each do |crm_customer| %> + + <%= crm_customer.name %> <%= crm_customer.company %> <%= crm_customer.contact_no %> <%= crm_customer.email %> + + <%= link_to 'Destroy', crm_customer_path(crm_customer), method: :delete, data: { confirm: 'Are you sure?' } %> + + <% end %> @@ -46,55 +53,61 @@
-
- <%= simple_form_for crm_customers_path, :html => { :class => 'form-horizontal' } do |f| %> - +
+ <%= simple_form_for @crm_customer,:url => crm_customers_path, :method => :post do |f| %> + + + <%= f.hidden_field :id, :class => "form-control col-md-6 " %> +
- <%= f.input :name, :class => "form-control col-md-6" %> -
-
- <%= f.input :company, :class => "form-control col-md-6" %> -
-
- <%= f.input :contact_no, :class => "form-control col-md-6" %> -
-
- <%= f.input :email, :class => "form-control col-md-6" %> -
+ <%= f.input :name, :class => "form-control col-md-6 name" %> +
- - <%= f.text_field :date_of_birth,:class=>"form-control datepicker",:readonly =>true, :value => @date_of_birth%> + <%= f.input :company, :class => "form-control col-md-6 company" %> +
+
+ <%= f.input :contact_no, :class => "form-control col-md-6 contact_no" %> + +
+ +
+ <%= f.input :email, :class => "form-control col-md-6 email" %> +
+ +
+ + <%= f.text_field :date_of_birth,:class=>"form-control datepicker date_of_birth",:readonly =>true, :value => @date_of_birth%>
- <%= f.select :membership_id, options_for_select(@membership.collect { |member| - [member["id"].name.titleize, member["id"].id] }, 1), {}, { id: 'countries_select' } %> - - <% @membership.each do |member| %> + <% @member_group.each do |member| %> <%end %> - +
- +
- <%= f.input :membership_type, :class => "form-control col-md-6" %> + <%= f.input :membership_type, :class => "form-control col-md-6 membership_type" %>
- <%= f.input :membership_authentication_code, :class => "form-control col-md-6" %> + <%= f.input :membership_authentication_code, :class => "form-control col-md-6 membership_authentication_code" %>
- <%= f.button :submit, "Submit", :class => 'btn btn-primary' , :id => 'submit_account' %> + <%= f.button :submit, "Submit",:class => 'btn btn-primary ', :id => 'submit_customer' %> + <%= f.button :submit, "Update",:class => 'btn btn-primary ', :disabled =>'', :id => 'update_customer' %>
<%end%>
- + + + + + + diff --git a/app/views/crm/customers/show.html.erb b/app/views/crm/customers/show.html.erb index 30341a00..da88e887 100644 --- a/app/views/crm/customers/show.html.erb +++ b/app/views/crm/customers/show.html.erb @@ -25,10 +25,6 @@ <%= @crm_customer.date_of_birth %>

-

- Membership: - <%= @crm_customer.membership %> -

Membership type: diff --git a/app/views/crm/customers/show.json.jbuilder b/app/views/crm/customers/show.json.jbuilder index 24d20eca..bd9680de 100644 --- a/app/views/crm/customers/show.json.jbuilder +++ b/app/views/crm/customers/show.json.jbuilder @@ -1 +1,2 @@ -json.partial! "crm_customers/crm_customer", crm_customer: @crm_customer +json.extract! @crm_customer, :id, :name, :company, :contact_no, :email, :date_of_birth, :membership_id, :membership_type, :membership_authentication_code, :created_at, :updated_at +json.url crm_customer_url(@crm_customer, format: :json) diff --git a/app/views/crm/home/_booking.html.erb b/app/views/crm/home/_booking.html.erb index d4f2a756..18b0a83e 100644 --- a/app/views/crm/home/_booking.html.erb +++ b/app/views/crm/home/_booking.html.erb @@ -4,9 +4,9 @@ <% @i = 0 %> <% @booking.each do |booking| %> - <% if booking.booking_status == "assign" %> + <% if booking.booking_status == "new" %>

-
+

<%= @i += 1 %> . <%= booking.dining_facility.name %> - <%= booking.id %> @@ -36,14 +36,21 @@ diff --git a/app/views/layouts/CRM.html.erb b/app/views/layouts/CRM.html.erb index 4bd98526..41de0ca2 100644 --- a/app/views/layouts/CRM.html.erb +++ b/app/views/layouts/CRM.html.erb @@ -17,7 +17,7 @@ <%= render 'layouts/header_crm' %>
<% flash.each do |type, message| %> -
+
<%= message %>
diff --git a/app/views/origami/home/index.html.erb b/app/views/origami/home/index.html.erb index ba11124a..85de2ef3 100644 --- a/app/views/origami/home/index.html.erb +++ b/app/views/origami/home/index.html.erb @@ -206,15 +206,14 @@

-
- +

- + @@ -223,3 +222,146 @@
+ + + diff --git a/config/routes.rb b/config/routes.rb index 6bd296a0..ef287f3e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -95,12 +95,12 @@ Rails.application.routes.draw do #--------- Customer Relationship Management ------------# namespace :crm do root "home#index" #queue number - #customers + get 'customers/:sale_id/assign_sale_id', to: "customers#get_sale_id", :as => "assign_sale"#get sale id with customer for crm resources :customers - #membership - #bookings - post "update_booking" , to: "bookings#update_booking", as: "update_booking" - #queue + post "update_booking" , to: "bookings#update_booking", as: "update_booking"#assign and cancel + post "update_sale" , to: "home#update_sale_by_customer"#update customer id in sale table + get '/print/:id', to: "home#print_order"#print order for crm + end #--------- Order Queue Station ------------#