mirror of
https://github.com/fspc/bike-database.git
synced 2025-02-23 09:33:23 -05:00
lk | adds ability to print multiple receipts for freecyclery clients
This commit is contained in:
parent
bbc84247b4
commit
2ca3ae21a8
@ -1,4 +1,4 @@
|
|||||||
.freecyclery-receipt{
|
.print-receipts, .freecyclery-receipt{
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
border-bottom: 5px solid black;
|
border-bottom: 5px solid black;
|
||||||
}
|
}
|
||||||
.receipt{
|
.receipt{
|
||||||
|
page-break-inside: avoid;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
border: 5px solid black;
|
border: 5px solid black;
|
||||||
height: 400px;
|
height: 400px;
|
||||||
|
@ -31,6 +31,15 @@ class ClientsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def print_select
|
||||||
|
@clients = Client.includes(:bike).where.not(bike_id: nil).order(application_date: :desc).paginate(:page => params[:page], :per_page => 30)
|
||||||
|
end
|
||||||
|
|
||||||
|
def print_receipts
|
||||||
|
client_ids = print_params.map{|key, value| key if value == "1"}.compact
|
||||||
|
@clients = Client.find(client_ids)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def set_client
|
def set_client
|
||||||
@client = Client.find(params[:id])
|
@client = Client.find(params[:id])
|
||||||
@ -60,4 +69,8 @@ class ClientsController < ApplicationController
|
|||||||
:pickup_date,
|
:pickup_date,
|
||||||
:volunteer_at_pickup)
|
:volunteer_at_pickup)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def print_params
|
||||||
|
params.require(:print_clients)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -5,6 +5,7 @@ class Bike < ActiveRecord::Base
|
|||||||
validates :bike_type, presence: true
|
validates :bike_type, presence: true
|
||||||
validates :color, presence: true
|
validates :color, presence: true
|
||||||
validates :serial_number, presence: true
|
validates :serial_number, presence: true
|
||||||
|
has_one :client
|
||||||
|
|
||||||
def self.bike_types
|
def self.bike_types
|
||||||
[
|
[
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
class Client < ActiveRecord::Base
|
class Client < ActiveRecord::Base
|
||||||
# TODO: figure out why application_date validation is fubar
|
# TODO: figure out why application_date validation is fubar
|
||||||
# validates :application_date, presence: true
|
# validates :application_date, presence: true
|
||||||
has_one :bike
|
belongs_to :bike
|
||||||
belongs_to :agency
|
belongs_to :agency
|
||||||
|
|
||||||
def self.waiting_list
|
def self.waiting_list
|
||||||
@ -20,8 +20,4 @@ class Client < ActiveRecord::Base
|
|||||||
Client.all.select{|client| client.application_voided || client.pickup_date}
|
Client.all.select{|client| client.application_voided || client.pickup_date}
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike
|
|
||||||
Bike.find(self.bike_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
74
app/views/clients/_receipt.html.haml
Normal file
74
app/views/clients/_receipt.html.haml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
.col-xs-6
|
||||||
|
.receipt
|
||||||
|
%h2
|
||||||
|
%strong= client.bike.name
|
||||||
|
%br
|
||||||
|
.horizontal-line
|
||||||
|
.client-information
|
||||||
|
= client.name
|
||||||
|
%br
|
||||||
|
= client.agency.agency_name if client.agency
|
||||||
|
.horizontal-line
|
||||||
|
%br
|
||||||
|
Includes:
|
||||||
|
%br
|
||||||
|
= 'Helmet' if client.helmet
|
||||||
|
%br
|
||||||
|
= 'Lock' if client.lock
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
Date Received
|
||||||
|
%br
|
||||||
|
_______________
|
||||||
|
%br
|
||||||
|
Client Signature
|
||||||
|
%br
|
||||||
|
________________
|
||||||
|
%br
|
||||||
|
Recyclery Volunteer Initials
|
||||||
|
%br
|
||||||
|
___
|
||||||
|
%br
|
||||||
|
CLIENT COPY
|
||||||
|
|
||||||
|
.col-xs-6
|
||||||
|
.receipt
|
||||||
|
%h2
|
||||||
|
%strong= client.bike.name
|
||||||
|
%br
|
||||||
|
.horizontal-line
|
||||||
|
.client-information
|
||||||
|
= client.name
|
||||||
|
%br
|
||||||
|
= client.agency.agency_name if client.agency
|
||||||
|
.horizontal-line
|
||||||
|
.row
|
||||||
|
.col-xs-6
|
||||||
|
%br
|
||||||
|
= 'Will make 25$ payment for lock and helmet' if client.will_pay
|
||||||
|
%br
|
||||||
|
Includes:
|
||||||
|
%br
|
||||||
|
= 'Helmet' if client.helmet
|
||||||
|
%br
|
||||||
|
= 'Lock' if client.lock
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
Date Received
|
||||||
|
%br
|
||||||
|
_______________
|
||||||
|
%br
|
||||||
|
Client Signature
|
||||||
|
%br
|
||||||
|
________________
|
||||||
|
.col-xs-6
|
||||||
|
.client-info-header CLIENT INFO
|
||||||
|
.client-email= "Agency Email: " + client.agency.email
|
||||||
|
.client-phone= "Agency Phone #: " + client.agency.phone_number
|
||||||
|
.client-photo-consent [ ] I grant consent to the Recyclery to use and publish photographs of me.
|
||||||
|
%br
|
||||||
|
Recyclery Volunteer Initials
|
||||||
|
%br
|
||||||
|
___
|
||||||
|
%br
|
||||||
|
RECYCLERY COPY
|
4
app/views/clients/print_receipts.html.haml
Normal file
4
app/views/clients/print_receipts.html.haml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.container.print-receipts
|
||||||
|
- @clients.each do |client|
|
||||||
|
.row
|
||||||
|
= render partial: "receipt", locals: {client: client}
|
18
app/views/clients/print_select.html.haml
Normal file
18
app/views/clients/print_select.html.haml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
.container
|
||||||
|
%h1 Select the clients whose receipts you would like to print
|
||||||
|
|
||||||
|
=form_tag("/clients/print_receipts", method: "get") do
|
||||||
|
%table.table.table-striped.table-bordered.table-hover
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th Client
|
||||||
|
%th Bike
|
||||||
|
%th Select
|
||||||
|
-@clients.each do |client|
|
||||||
|
%tr
|
||||||
|
%td= client.name
|
||||||
|
%td= client.bike.name
|
||||||
|
%td= check_box("print_clients", client.id)
|
||||||
|
=will_paginate @clients
|
||||||
|
%br
|
||||||
|
=submit_tag 'Generate Receipts', class: "btn btn-default"
|
@ -15,6 +15,8 @@
|
|||||||
%br
|
%br
|
||||||
= link_to "Freecyclery Agencies", agencies_path
|
= link_to "Freecyclery Agencies", agencies_path
|
||||||
%br
|
%br
|
||||||
|
= link_to "Print Client Receipts", print_select_clients_path
|
||||||
|
%br
|
||||||
= link_to "Freecyclery Closed Applications", closed_applications_path
|
= link_to "Freecyclery Closed Applications", closed_applications_path
|
||||||
%br
|
%br
|
||||||
= link_to "Available Bikes", available_bikes_path
|
= link_to "Available Bikes", available_bikes_path
|
||||||
|
@ -18,6 +18,9 @@ Bikedb::Application.routes.draw do
|
|||||||
resources :agencies
|
resources :agencies
|
||||||
resources :clients do
|
resources :clients do
|
||||||
get 'receipt' => 'freecyclery#receipt'
|
get 'receipt' => 'freecyclery#receipt'
|
||||||
|
get 'print_select' => 'clients#print_select', on: :collection
|
||||||
|
get 'print_receipts' => 'clients#print_receipts', on: :collection
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
get 'closed_applications' => 'freecyclery#closed_applications'
|
get 'closed_applications' => 'freecyclery#closed_applications'
|
||||||
|
58
db/schema.rb
58
db/schema.rb
@ -17,26 +17,26 @@ ActiveRecord::Schema.define(version: 20151230021120) do
|
|||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
create_table "agencies", force: :cascade do |t|
|
create_table "agencies", force: :cascade do |t|
|
||||||
t.string "agency_name"
|
t.string "agency_name", limit: 255
|
||||||
t.string "contact_name"
|
t.string "contact_name", limit: 255
|
||||||
t.string "street_address"
|
t.string "street_address", limit: 255
|
||||||
t.string "city"
|
t.string "city", limit: 255
|
||||||
t.string "state"
|
t.string "state", limit: 255
|
||||||
t.string "postal_code"
|
t.string "postal_code", limit: 255
|
||||||
t.string "phone_number"
|
t.string "phone_number", limit: 255
|
||||||
t.string "email"
|
t.string "email", limit: 255
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "bikes", force: :cascade do |t|
|
create_table "bikes", force: :cascade do |t|
|
||||||
t.string "entry_date"
|
t.string "entry_date", limit: 255
|
||||||
t.string "brand"
|
t.string "brand", limit: 255
|
||||||
t.string "model"
|
t.string "model", limit: 255
|
||||||
t.string "bike_type"
|
t.string "bike_type", limit: 255
|
||||||
t.string "color"
|
t.string "color", limit: 255
|
||||||
t.string "serial_number"
|
t.string "serial_number", limit: 255
|
||||||
t.text "work_done"
|
t.text "work_done"
|
||||||
t.text "new_parts"
|
t.text "new_parts"
|
||||||
t.string "price"
|
t.string "price", limit: 255
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.float "seat_tube_size"
|
t.float "seat_tube_size"
|
||||||
@ -49,17 +49,17 @@ ActiveRecord::Schema.define(version: 20151230021120) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
create_table "clients", force: :cascade do |t|
|
create_table "clients", force: :cascade do |t|
|
||||||
t.string "first_name"
|
t.string "first_name", limit: 255
|
||||||
t.string "last_name"
|
t.string "last_name", limit: 255
|
||||||
t.date "application_date_bkp"
|
t.date "application_date_bkp"
|
||||||
t.string "gender"
|
t.string "gender", limit: 255
|
||||||
t.integer "age"
|
t.integer "age"
|
||||||
t.boolean "helmet"
|
t.boolean "helmet"
|
||||||
t.boolean "lock"
|
t.boolean "lock"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.integer "bike_id"
|
t.integer "bike_id"
|
||||||
t.string "bike_type_requested"
|
t.string "bike_type_requested", limit: 255
|
||||||
t.boolean "will_pay"
|
t.boolean "will_pay"
|
||||||
t.integer "agency_id"
|
t.integer "agency_id"
|
||||||
t.text "notes"
|
t.text "notes"
|
||||||
@ -67,7 +67,7 @@ ActiveRecord::Schema.define(version: 20151230021120) do
|
|||||||
t.integer "number_of_calls"
|
t.integer "number_of_calls"
|
||||||
t.boolean "application_voided"
|
t.boolean "application_voided"
|
||||||
t.date "pickup_date_bkp"
|
t.date "pickup_date_bkp"
|
||||||
t.string "volunteer_at_pickup"
|
t.string "volunteer_at_pickup", limit: 255
|
||||||
t.float "weight"
|
t.float "weight"
|
||||||
t.float "height"
|
t.float "height"
|
||||||
t.datetime "application_date"
|
t.datetime "application_date"
|
||||||
@ -78,16 +78,16 @@ ActiveRecord::Schema.define(version: 20151230021120) do
|
|||||||
add_index "clients", ["bike_id"], name: "index_clients_on_bike_id", using: :btree
|
add_index "clients", ["bike_id"], name: "index_clients_on_bike_id", using: :btree
|
||||||
|
|
||||||
create_table "users", force: :cascade do |t|
|
create_table "users", force: :cascade do |t|
|
||||||
t.string "email", default: "", null: false
|
t.string "email", limit: 255, default: "", null: false
|
||||||
t.string "encrypted_password", default: "", null: false
|
t.string "encrypted_password", limit: 255, default: "", null: false
|
||||||
t.string "reset_password_token"
|
t.string "reset_password_token", limit: 255
|
||||||
t.datetime "reset_password_sent_at"
|
t.datetime "reset_password_sent_at"
|
||||||
t.datetime "remember_created_at"
|
t.datetime "remember_created_at"
|
||||||
t.integer "sign_in_count", default: 0, null: false
|
t.integer "sign_in_count", default: 0, null: false
|
||||||
t.datetime "current_sign_in_at"
|
t.datetime "current_sign_in_at"
|
||||||
t.datetime "last_sign_in_at"
|
t.datetime "last_sign_in_at"
|
||||||
t.string "current_sign_in_ip"
|
t.string "current_sign_in_ip", limit: 255
|
||||||
t.string "last_sign_in_ip"
|
t.string "last_sign_in_ip", limit: 255
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
@ -96,9 +96,9 @@ ActiveRecord::Schema.define(version: 20151230021120) do
|
|||||||
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
|
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
|
||||||
|
|
||||||
create_table "volunteers", force: :cascade do |t|
|
create_table "volunteers", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name", limit: 255
|
||||||
t.string "email"
|
t.string "email", limit: 255
|
||||||
t.string "phone"
|
t.string "phone", limit: 255
|
||||||
t.date "orientation_date"
|
t.date "orientation_date"
|
||||||
t.integer "other_volunteer_hours"
|
t.integer "other_volunteer_hours"
|
||||||
t.text "referral"
|
t.text "referral"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user