Hi everyone,I am beginning work on an add-on for 1.4 regarding tracking rental equipment, etc. I wanted to toss my ideas in here for feedback.MODELLINGI think the best way to model this would be to track rentals against fixed assets. I.e. you rent out a fixed asset, and this should allow you to do more fine-grained profit/loss reporting on individual rentals than otherwise possible.So my thinking is that you would have:Fixed assets -> multiple "rental slots" (i.e. "units" available for rental). For example, a building might be available to be rented for x events, but a piece of construction equipment might be available to be rented only once at a time.
Rental slot -> Service. Each rental slot would be associated any number of services. This could be changed over time to include more services, but for now I only expect to support a 1:1 mapping in the front-endRental slot -> Usage Contract. Each rental slot can be associated with any number of usage contracts, but only one at a time.
Usage contract - Service. The contract would contain all the information needed to fill out a line in the invoice and ar tables. A contract would be assumed to match to one line in orderitems or invoices.
WORKFLOW1. Adding Rental Slots:a. Rentals/Manage Slotsb. Enter asset tag, continuec. Add slots as needed (number, label, services) and saved. Slots can be retired here as well (basically an end date would be added).2. Renting Unit.a. Rentals/Rentb. Search for customer, enter asset tag, start and end datesc. Select available slotd. Enter information and save
3. Return of rentala. Rentals/Searchb. Enter asset tag, date, and/or customer information. Searchc. Enter date of return, check "Returned" and save.d. If desired you can also click "bill," "generate order" or "renew" (in which case a new usage contract will be created).
INTERFACESSQL and Perl Interfaces:1. Wrapped in Asset/Rental.pm class:asset__list_rental_slots(in_id)asset__list_rental_slots_by_tag(in_tag)2. Wrapped in Asset/Rental/Slot.pmrental_slot__list_services(in_id)rental_slot__add(...)rental_slot__search(...)rental_slot__retire(...)3. Wrapped in Asset/Rental/Contract.pmrental_contract__add(...)rental_contract__renew(...)rental_contract__generate_order(...)rental_contract__bill(...)DEPENDENCIESPostgreSQL 9.2 (needed for range types and exclude constraints)PGObject::Simple::Role 1.1 (not out yet, will probably be out tomorrow)PGObject::Simple 1.6PGObject::Util::DBMethod 1.0