[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Towards a rental tracking module

Hi Chris,

The comments made by John and Erik ring true for me.

I spent quite a few years supporting a Resort while in Shark Bay,
and previously have worked with a small equipment hire company (gensets, ladders, plate compactors)
The resort was using an absolutely awful system called Motellier,
while the Equipment Hire used a whiteboard for bookings and individual note books for each piece of equipment (to track maintenance etc)
I think rental assets can, of themselves be handled as goods (or services),
with a simple additional flag field indicating that they are rentable.
I think this is the correct approach, as the equipment is "purchased" as stock, may have an inventory count,
then often once its rental life expires it is sold as "damaged" stock at an appropriate discount.
In many cases it may even be sold as a new or near new item.
The serial number field that already exists for inventory can be used to identify individual rental items within the system, but as indicated below there should be an
"Asset ID" field with an "Asset ID" to "Serial Number" relationship.
"Asset ID" field is what should be used within the UI.

Another advantage of using the existing inventory system is the potential of using assemblies instead of multiple Rental Agreements.
eg: When we hire a function room we commonly also hire either 20 tables and 100 chairs, or 200 chairs with no tables

The "Rental" flag can be used as a primary filter when displaying stock lists within the rental system.
A new rental asset table would contain all of the required additional information

* Asset ID (Text >=50 char)
Date of Acquisition
* Date of Disposal
* Date Last Rented
* Date Last Returned
* Date Last Serviced (eg: Cleaned for a room, Oil change for a generator)
* Date of Lifetime Expiry (eg: a Generator can be expected to last in the rental environment for 2 years before replacement)
* Available Now (Bool)
* Available by Quarter Hour (Bool)
* Available by Half Hour (Bool)
* Available by Hour (Bool) * Available by Half Day (Bool)
* Available by Day (Bool)
* Available by Week (Bool)
* Available by Weekend (Bool)
* Available by Month (Bool)
* Available by Year (Bool)
* Service Notes (entered as dated, read only blobs)
* Service Photos (both images in DB, and URL's in DB)
* Current Hours (either auto generated hours hired, or Operator entered hours [eg: engine hours])
* Current Kilometers (Operator entered)
* all of the other fields that have been mentioned by Chris, John, Eric
* many things we have not yet thought of

The "available by" fields could be individual Boolean's or backend storage for a multiselect dropdown (checkbox) list
If the Item will not be available for a period of time, a simple interface to take it out of service should, in the background create a booking against one of a list of special customers (Equipment Service, Equipment Internal Use, Equipment Damage) for the expected duration.
This Out Of Service booking should auto renew for the same period if not closed manually.

Each Rental would probably need a record in a table that at a minimum requires these fields.

* Asset ID
* Agreement ID
* Booking Date
* Start Date
* End Date
* Return Date
* Last Invoiced Date (to allow tracking of what has been invoiced for long term rentals. The details will of course be in each invoice issued)
* Hourly Rate
* Auto Renew
* Customer ID
* Location (where is the equipment being used? this may be essential for recovery etc)
* Proof of Identity (may be several fields, or just a text blob)
* Proof of Identity Images (Drivers License, Passport, customer photo)
* Hours at start of Hire
* Hours at end of Hire
* Kilometers at start of Hire
* Kilometers at end of Hire
* Condition at start of Hire (Score 1=excellent 5=poor 6=Unserviceable 7..20=user defined)

* Condition at end of Hire   (Score 1=excellent 5=poor 6=Unserviceable 7..20=user defined)
* Insurance Rate ID (Think vehicle hire)

All bookings should be able to be flagged to auto-renew for the same period as the original booking.
If a booking is not closed by return of the goods within 1 day of it's end, it should enable auto-renew, including the 1 day wait.

There are many more issues to deal with, but a lot of them would be best handled by the booking interface which is a whole other story.

s could be

On 26/02/14 06:11, Erik Huelsmann wrote:
Hi Chris,

On Tue, Feb 25, 2014 at 11:47 AM, Chris Travers <..hidden..> wrote:
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.


I 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.

I'm inclined to go with John here: decouple fixed assets and "rental means". Then, investments in fixed assets can be added to the list of rental means upon investment, if one needs to. However, there may be cases where a rental object doesn't become available through purchase/investment.

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-end

Rental slot -> Usage Contract.  Each rental slot can be associated with any number of usage contracts, but only one at a time.

One of the first things that came to mind - and is also noted by John - is a "regeneration period" where an asset is unavailable after a rented period. This seems like a nice addition to the model.

John also mentions a need to improve down payments handling - and probably associated returns. My idea would be that down payments would be handled by a different module. One that can be attached to orders, projects and rentals. This would be perfect to do administration of retainer-based project work, webshops which require payment to fullfil orders (and clear resulting invoices against the payment-to-order). And of course, it would also work wonders for the hotel description John is talking about.

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.

Ok. Let me follow your example of the hotel room which is being rented. Lets say I rent a hotel room for a week and additionally, rent a bike for three days within the total rental period of the hotel room. Basically, the bike can be considered a "temporary add-on" to the room. Would those be two usage contracts? And would those two usage contracts lead to one invoice? Or two?

I have another example - I'm not sure if this is in scope or not, but let me just bring it out here - what if I want to buy an option onto the room; like: an extra bed. The hotel has enough of those, so doesn't use rental slots to rent them out, but rather supplies this as an option to the room. Would this lead to a second line on the invoice? or two invoices? (still: do we want to support the case?)


1.  Adding Rental Slots:
   a.  Rentals/Manage Slots
   b.  Enter asset tag, continue
   c.  Add slots as needed (number, label, services) and save
   d.  Slots can be retired here as well (basically an end date would be added).

2.  Renting Unit.
   a.  Rentals/Rent
   b.  Search for customer, enter asset tag, start and end dates
   c.  Select available slot
   d.  Enter information and save

I liked John's question on the multi-exclusive rooms here :-) While I think that question would be a bit hard to tackle, I'm thinking a rental can be bought with an option, however, there's a limited number of total options to be sold. I'm thinking of a car rental where I'd like to rent a baby seat. Now, the baby seat can be rented with any car, but even though there are 200 cars up for rental, there are only 30 baby seats in total. Do we want to take that into scope? Or maybe baby seats are the wrong example (they can still have an asset tag); what if you're renting VMs, like Istvan says; if the physical server has 100GB of storage, then each GB can't have an asset tag, but still, you can't rent out more than 100GB in total.

3.  Return of rental
  a.  Rentals/Search
  b.  Enter asset tag, date, and/or customer information.  Search
  c.  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).

The basic workflow sounds about right. Trying to search for the boundaries here, looking for what we can reasonably implement without going too much into one specific industry or customer.

SQL and Perl Interfaces:

1.  Wrapped in Asset/Rental.pm class:

2.  Wrapped in Asset/Rental/Slot.pm

3.  Wrapped in Asset/Rental/Contract.pm


PostgreSQL 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.6
PGObject::Util::DBMethod 1.0

The dependencies sound fine to me. 



http://efficito.com -- Hosted accounting and ERP.
Robust and Flexible. No vendor lock-in.

Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.

Ledger-smb-devel mailing list