added create purchase and receipts

This commit is contained in:
Harry Bomrah 2017-03-29 15:09:14 +08:00
parent 708831e333
commit f7737ef653
15 changed files with 331 additions and 13 deletions

View File

@ -66,6 +66,43 @@ class Admin::ClientManagementsController < OrbitAdminController
end
def make_purchase
contract = RequestContract.find(params[:id]) rescue nil
if !contract.nil?
purchase = ContractPurchase.new
purchase.request_contract = contract
purchase.total_amount = contract.total_amount
purchase.save
end
redirect_to see_contract_admin_client_management_path(contract.id)
end
def receipts
@purchase = ContractPurchase.find(params[:id]) rescue nil
@contract = @purchase.request_contract
@total_received_amount = @purchase.total_amount_recieved
@total_adjustable_amount = @purchase.total_adjusted_amount
end
def add_receipt
@receipt = PurchaseReceipt.new
@purchase = ContractPurchase.find(params[:id]) rescue nil
end
def create_receipt
receipt = PurchaseReceipt.create(receipt_params)
redirect_to receipts_admin_client_management_path(receipt.contract_purchase.id)
end
def edit_receipt
@receipt = PurchaseReceipt.find(params[:id])
@purchase = @receipt.contract_purchase rescue nil
end
def update_receipt
receipt = PurchaseReceipt.find(params[:id])
receipt.update_attributes(receipt_params)
receipt.save
redirect_to receipts_admin_client_management_path(receipt.contract_purchase.id)
end
def add_sites
@ -89,6 +126,10 @@ class Admin::ClientManagementsController < OrbitAdminController
private
def receipt_params
params.require(:purchase_receipt).permit!
end
def contract_params
params.require(:request_contract).permit!
end

View File

@ -0,0 +1,21 @@
class ContractPurchase
include Mongoid::Document
include Mongoid::Timestamps
field :total_amount, type: Integer, :default => 0
belongs_to :request_contract
has_many :purchase_receipts
def total_amount_recieved
self.purchase_receipts.sum(:amount_received)
end
def total_adjusted_amount
self.purchase_receipts.sum(:adjustable_amount)
end
def cleared?
self.total_amount == (self.total_amount_recieved + self.total_adjusted_amount)
end
end

View File

@ -0,0 +1,24 @@
class PurchaseReceipt
include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :receipt_file, AssetUploader
mount_uploader :received_receipt_file, AssetUploader
field :amount, type: Integer, :default => 0
field :amount_received, type: Integer, :default => 0
field :adjustable_amount, type: Integer, :default => 0
field :adjustable_amount_detail
field :amount_received_on, type: DateTime
field :receipt_number
belongs_to :contract_purchase
def amount_pending
self.amount - (self.amount_received + self.adjustable_amount)
end
def is_pending?
self.amount_pending > 0
end
end

View File

@ -11,15 +11,18 @@ class RequestContract
field :template_cost, type: Integer, :default => 0
field :customized_template_cost, type: Integer, :default => 0
field :rwd_cost, type: Integer, :default => 0
field :other
field :other_cost, type: Integer, :default => 0
field :confirmed, type: Boolean, :default => false
mount_uploader :contract_file, AssetUploader
mount_uploader :signed_contract_file, AssetUploader
has_one :site_request
has_one :contract_purchase
def total_amount
self.new_site_cost + self.hosting_with_rulingdigital_cost + self.service_cost + self.option_module_cost + self.customized_module_cost + self.template_cost + self.customized_template_cost + self.rwd_cost
self.new_site_cost + self.hosting_with_rulingdigital_cost + self.service_cost + self.option_module_cost + self.customized_module_cost + self.template_cost + self.customized_template_cost + self.rwd_cost + self.other_cost
end
def is_confirmed?

View File

@ -0,0 +1,55 @@
<div class="line-content">
<span class="header-line"><%= f.label :receipt_number, "Receipt Number:" %></span>
<span class="content-line"><%= f.text_field :receipt_number %></span>
</div>
<div class="line-content">
<span class="header-line"><%= f.label :amount, "Amount:" %></span>
<span class="content-line"><%= f.number_field :amount, :min => "0", :max => @purchase.total_amount %></span>
</div>
<% if !@receipt.receipt_file.url.nil? %>
<div class="line-content">
<span class="header-line">Receipt File:</span>
<span class="content-line"><a href="<%= @receipt.receipt_file.url %>">Download File</a></span>
</div>
<% end %>
<div class="line-content">
<span class="header-line"><%= f.label :receipt_file, "Receipt File:" %></span>
<span class="content-line"><%= f.file_field :receipt_file %></span>
</div>
<% if !@receipt.new_record? %>
<div class="line-content">
<span class="header-line"><%= f.label :amount_received, "Amount Received:" %></span>
<span class="content-line"><%= f.number_field :amount_received, :min => "0", :max => @receipt.amount %></span>
</div>
<div class="line-content">
<span class="header-line"><%= f.label :adjustable_amount, "Adjustable Amount:" %></span>
<span class="content-line"><%= f.number_field :adjustable_amount, :min => "0" %></span>
</div>
<div class="line-content">
<span class="header-line"><%= f.label :adjustable_amount_detail, "Adjustable Amount Detail:" %></span>
<span class="content-line"><%= f.text_field :adjustable_amount_detail %></span>
</div>
<div class="line-content">
<span class="header-line"><%= f.label :amount_received_on, "Amount Received On:" %></span>
<span class="content-line"><%= f.datetime_picker :amount_received_on, :no_label => true, :new_record => @receipt.new_record? %></span>
</div>
<% if !@receipt.received_receipt_file.url.nil? %>
<div class="line-content">
<span class="header-line">Signed Receipt File:</span>
<span class="content-line"><a href="<%= @receipt.received_receipt_file.url %>">Download File</a></span>
</div>
<% end %>
<div class="line-content">
<span class="header-line"><%= f.label :received_receipt_file, "Signed Receipt File:" %></span>
<span class="content-line"><%= f.file_field :received_receipt_file %></span>
</div>
<% end %>
<% if @receipt.new_record? %>
<%= f.hidden_field :contract_purchase_id, :value => @purchase.id.to_s %>
<% end %>
<%= f.submit "Submit", :class => "btn btn-primary" %>

View File

@ -12,13 +12,13 @@
<% else %>
<div class="line-content">
<span class="header-line"><%= f.label :new_site_cost, "New Site Cost :"%></span>
<span class="content-line"><%= f.number_field :new_site_cost, :min => "0" %></span>
<span class="content-line"><%= f.number_field :new_site_cost, :min => "0" %></span>
</div>
<% if @site_request.host_with_rulingdigital %>
<div class="line-content">
<div class="line-content">
<span class="header-line"><%= f.label :hosting_with_rulingdigital_cost, "Host with RulingDigital:" %></span>
<span class="content-line"><%= f.number_field :hosting_with_rulingdigital_cost, :min => "0" %></span>
</div>
<span class="content-line"><%= f.number_field :hosting_with_rulingdigital_cost, :min => "0" %></span>
</div>
<% end %>
<% end %>
<% if @site_request.type == "existing" && @site_request.maintenance %>
@ -89,6 +89,15 @@
</span>
</div>
<% end %>
<div class="line-content">
<span class="header-line">
<%= f.label :other, "Other Requirements:" %>
<%= f.text_area :other %>
</span>
<span class="content-line">
<%= f.number_field :other_cost, :min => "0" %>
</span>
</div>
<% if !@contract.contract_file.url.nil? %>
<div class="line-content">
<span class="header-line">Contract File :</span>

View File

@ -0,0 +1,15 @@
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "client_management/backend" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<% end %>
<div class="info-detail">
<div class="info-spec">
<%= form_for @receipt, :url => {:action => :create_receipt}, :html => {:class => "form-horizontal contract-form"} do |f| %>
<h3 class="sub-title">Add Receipt</h3>
<%= render :partial => "purchase_form", :locals => {:f => f} %>
<% end %>
</div>
</div>

View File

@ -0,0 +1,15 @@
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "client_management/backend" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<% end %>
<div class="info-detail">
<div class="info-spec">
<%= form_for @receipt, :url => {:action => :update_receipt}, :html => {:class => "form-horizontal contract-form"} do |f| %>
<h3 class="sub-title">Add Receipt</h3>
<%= render :partial => "purchase_form", :locals => {:f => f} %>
<% end %>
</div>
</div>

View File

@ -1,5 +1,3 @@
<table class="table main-list">
<thead>
<tr class="sort-header">

View File

@ -0,0 +1,81 @@
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "client_management/backend" %>
<% end %>
<div class="page-contract page-client">
<div class="info-contract">
<h3 class="sub-title">
<% if @purchase.total_amount == (@total_received_amount + @total_adjustable_amount) %>
<span class="label label-success pull-right">Received</span>
<% else %>
<span class="label label-important pull-right">Pending</span>
<% end %>
Purchase Info
</h3>
<div class="line-content">
<span class="header-line">Contract Id :</span>
<span class="content-line"><%= @contract.uid %></span>
</div>
<div class="line-content">
<span class="header-line">Contract Date :</span>
<span class="content-line"><%= @contract.created_at.strftime("%Y, %B %d") %></span>
</div>
<div class="line-content">
<span class="header-line">Total Amount :</span>
<span class="content-line"><%= @purchase.total_amount %> NTD.</span>
</div>
<div class="line-content">
<span class="header-line">Amount Received :</span>
<span class="content-line" style="color: green;"><%= @total_received_amount %> NTD.</span>
</div>
<div class="line-content">
<span class="header-line">Amount Adjusted :</span>
<span class="content-line" style="color: indigo;"><%= @total_adjustable_amount %> NTD.</span>
</div>
<div class="line-content">
<span class="header-line">Amount Pending :</span>
<span class="content-line" style="color: red;"><%= @purchase.total_amount - (@total_received_amount + @total_adjustable_amount) %> NTD.</span>
</div>
</div>
</div>
<table class="table main-list">
<thead>
<tr class="sort-header">
<% ["client_management.receipt_number", "client_management.amount", "client_management.amount_received", "client_management.amount_pending", "client_management.receipt_status", :actions].each_with_index do |f,i| %>
<%= thead(f) %>
<% end %>
</tr>
</thead>
<tbody>
<% if !@purchase.purchase_receipts.blank? %>
<% @purchase.purchase_receipts.each do |pr| %>
<tr>
<td><%= pr.receipt_number %></td>
<td><%= pr.amount %></td>
<td style="color:green;"><%= pr.amount_received %></td>
<td style="color:red;"><%= pr.amount_pending %></td>
<td>
<% if pr.is_pending? %>
<span class="label label-important">Pending</span>
<% else %>
<span class="label label-success">Cleared</span>
<% end %>
</td>
<td><a href="<%= edit_receipt_admin_client_management_path(pr.id) %>" class="btn btn-warning">Edit</a></td>
</tr>
<% end %>
<% else %>
<tr>
<td colspan="6" style="text-align: center;">No receipts issued.</td>
</tr>
<% end %>
</tbody>
</table>
<div class="info-contract-buttons">
<div class="line-content button">
<% if @purchase.total_amount > (@total_received_amount + @total_adjustable_amount) %>
<a class="btn btn-info" href="<%= add_receipt_admin_client_management_path(@purchase.id) %>">Add Receipt</a>
<% end %>
<a class="btn" href="<%= see_contract_admin_client_management_path(@contract.id) %>">Back to Contract</a>
</div>
</div>

View File

@ -19,6 +19,18 @@
<%= (@contract.is_confirmed? ? "<span class='label label-success'>Yes</span>" : "<span class='label label-important'>No</span>").html_safe %>
</span>
</div>
<% if !@contract.contract_purchase.nil? %>
<div class="line-content">
<span class="header-line">Payment Status :</span>
<span class="content-line">
<% if @contract.contract_purchase.cleared? %>
<span class="label label-success">Cleared</span>
<% else %>
<span class="label label-important">Pending</span>
<% end %>
</span>
</div>
<% end %>
</div>
<div class="info-contract-request">
<h3 class="sub-title">Request</h3>
@ -93,6 +105,16 @@
<% total_amount = total_amount + amount %>
<% end %>
<% end %>
<% if !@contract.other.nil? || @contract.other_cost > 0 %>
<div class="line-content qt">
<span class="header-line">
Other Requirements : <br>
<%= nl2br(@contract.other) %>
</span>
<span class="content-line"><%= @contract.other_cost %></span>
</div>
<% total_amount = total_amount + @contract.other_cost %>
<% end %>
<div class="line-content qt hr">
<span class="header-line">Total :</span>
<span class="content-line"><%= total_amount.to_s %></span>
@ -117,12 +139,22 @@
<a href="<%= edit_contract_admin_client_management_path(@contract.id) %>" class="btn btn-warning">Edit Contract</a>
<a href="<%= confirm_contract_admin_client_management_path(@contract.id, :confirm => "true") %>" class="btn btn-success">Confirm Contract</a>
<% else %>
<a href="<%= make_purchase_admin_client_management_path(@contract.id) %>" class="btn btn-warning">Make Purchase</a>
<a href="<%= confirm_contract_admin_client_management_path(@contract.id, :confirm => "false") %>" class="btn btn-danger">Un-Confirm Contract</a>
<% if @contract.contract_purchase.nil? %>
<a href="<%= make_purchase_admin_client_management_path(@contract.id) %>" class="btn btn-warning" id="make-purchase-btn">Make Purchase</a>
<a href="<%= confirm_contract_admin_client_management_path(@contract.id, :confirm => "false") %>" class="btn btn-danger">Un-Confirm Contract</a>
<% else %>
<a href="<%= receipts_admin_client_management_path(@contract.contract_purchase.id) %>" class="btn btn-warning">Receipts</a>
<% end %>
<% end %>
<a href="#" class="btn btn-info">Export Contract</a>
<a href="<%= admin_client_managements_completed_requests_path(:page => params[:page]) %>" class="btn">Back</a>
</div>
</div>
</div>
<script type="text/javascript">
$("#make-purchase-btn").on("click",function(){
if(!confirm("Once you create a purchase, you cannot un-confirm or edit this contract. Continue to create a purchase for this contract?")){
return false;
}
})
</script>

View File

@ -100,7 +100,16 @@
<% end %>
<% total_amount = total_amount + amount %>
<% end %>
<% if !@contract.other.nil? || @contract.other_cost > 0 %>
<div class="line-contract qt">
<span class="header-detail">
Other Requirements : <br>
<%= nl2br(@contract.other) %>
</span>
<span class="content-detail"><%= @contract.other_cost %></span>
</div>
<% total_amount = total_amount + @contract.other_cost %>
<% end %>
<div class="line-contract qt hr">
<span class="header-detail">Total :</span>
<span class="content-detail"><%= total_amount %></span>

View File

@ -46,4 +46,9 @@ en:
site: Site
created_on: Created On
loading_history: Loading History
loading_contracts: Loading Contracts
loading_contracts: Loading Contracts
receipt_number: Receipt Number
amount: Total Amount
amount_received: Amount Received
amount_pending: Amount Pending
receipt_status: Receipt Status

View File

@ -46,4 +46,9 @@ zh_tw:
site: Site
created_on: Created On
loading_history: Loading History
loading_contracts: Loading Contracts
loading_contracts: Loading Contracts
receipt_number: Receipt Number
amount: Total Amount
amount_received: Amount Received
amount_pending: Amount Pending
receipt_status: Receipt Status

View File

@ -17,6 +17,11 @@ Rails.application.routes.draw do
get "make_purchase"
patch "add_sites"
get "complete_request"
get "receipts"
get "add_receipt"
get "edit_receipt"
post "create_receipt"
patch "update_receipt"
end
end
end