Would it be possible to get a status update on the 7.x-3.x branch added to the project page? Just a note on what kind of changes are happening and any guesses on timeline.

Thanks!

Comments

darrick’s picture

I've been working quite a bit lately on the 3.x branch. But I don't think it's far enough long yet to update the project page so I'll post an update here.

Timeline: 3.x branch stable by release of Drupal 8. Goal is to have users upgrade from 2.x to 3.x in Drupal 7 and not to port 2.x to Drupal 8.

Changes:

Moving fields from being hard coded in the MERCI reservation content type to the Fields API. (i.e. The reservations status (confirmed, checked out, checked in, etc.) and the choices (being moved to a entityreference field.))

Getting rid of the MERCI reservation content type. Working on allowing any entity type to be used as reservation field so long as a date field and entityreference reservation item field is defined for it.

Reworking how buckets are done. Currently for each bucket item you have to define a content type (i.e. Shure SM57 Microphone) then use that type to create all your SM57 inventory items. For each new bucket you need a new content type. A huge pain. New code is defining an entity type with a entityreference field to hold all the items in a bucket.

Adding code to define a entity type to be used as a kit (collection of items) to be reserved.

Expanding on above. You would create on entity type to hold the inventory (i.e. resources or items). Type could be a node or your own defined type. You can then put some of these items into a kit or a bucket. Kit or buckets can be the node type or any other entity type. When a new reservation is created the logic for "is this item available" is different depending upon if the item is a resource, bucket or kit and also if the state is checked out or not. Also working on adding a API so other modules can have a say if the item is available.

Changing the way permissions are done. In the main module if the user can create the reservation entity type they can reserve anything. Sub modules can then be written to limit permissions based on item, bucket or kit. One idea I had was to use permissions based on organic groups. I.e. if the user is a member of group "Field" they would only be able to reserve items which are posted within the field group. Another option is to tag the items and then only allow a user or role to reserve items with specific tags. For my needs I'd like to be able to allow roles to reserve a set of items but also be able to override that on a user basis. I have yet to write any of this code yet.

Currently I'm working on a entityreference field widget. I was using the multple_select widget but with buckets you later need to assign an item during checkout. Also, there's the issue of modifying cost settings, accessories, etc. As there are a few options a user may need to set on a per item basis. But I would also like to make this work similar to the entityreference_views widget. As it would be nice to be able to add images, descriptions and be able to drill down or search for what items to reserve.

Using the office_hours module to handle hours of operation. So a site admin can create a reservation type to be used to reserve items from location A or location B and so on. Creating exportable presets for this. So you could have inventory at location A or B.

Overall trying to make things as flexible and modular as possible. That way if someone has a better way of doing something they can do it. Off the top of my head these modules are:

- permissions: who can reserve what.
- inventory item: what is a inventory item.
- bucket item: handles buckets.
- kit item: handles kits.
- hours of operations: limit reservations based on hours open.
- merci checkout: handle checkout/in and other reservation status of items.
- Item status: Available, Unavailable, No Longer in Inventory.
- other time restrictions (length of reservations, extend over days closed, etc.)

Priorities on my end are to fix the permissions issues (it's too cumbersome and pollutes the permissions page), handle kits, streamline the huge number of content types you currently have to create and allow to manage multiple reservations. I'm not too concerned with being able to reserve time with users or allow reservation, item, bucket and kit types to be anything other then nodes.

News4u’s picture

I am developing a booking system of items to be reserved based on day / Night in a day I.E a customer can reserve One bucket item twice in a day and so the reservation is not based on time in a day but slot of day & Night
I am listing the reservable items as Bucket.
So that Limiting reservation is then based on time slots of the day , Day / Night
Or any other paratemer than can be fined and attached to the ITEM available for reservation

So its more or less adding more functionality to the Date attributes to collect to Reservation field everywhere it is used

Thank you

News4u’s picture

Or is it posible to integreate Date/ calender module with the Taxonomy i created for the Day/Night Options ?

pinkonomy’s picture

What is the status of 7.x-3.x branch?Where can we find it?
Also,will it be possible to have the user entity to have date/times?
thanks

darrick’s picture

I recently completed a project for Evergreen State College to provide a rapid checkin/checkout and inventory management for their lab stores to replace their webcheckout system. I'm currently working on upgrading our system to use this new base. After which I should I'll update the 3.x branch to something which works. What is currently on that branch is a mess. And what I have for the Evergreen project is too customized for them. Once I upgrade our system I'll be able to pull out the base code.

Being able to reserve any entity is the goal. So you will be able to reserve time with a user.

Roughly the model is ...

- Reservation are now an entity. At it's base you it holds the time of reservation, the status and the entity reference. You can other fields (i.e. notes).
- There is a custom widget for the reservation entity. So you can create a content-type with multiple entityreferences to the reservation entity and thus reserve multiple items at the same time. You can create multiple forms to create reservations. I.e. one to reserve equipment and the other to reserve staff time. Or just one form to do both. You can also add the widget to existing forms like the commerce-order form.
- There is a module to manage hours of operation. You can have multiple locations.
- Two separate permission modules: one for commerce-accounts and another for users. You can use either/or.
- From there is mainly customizing views, types, rules depending upon the site requirements.

Evergreen was focused on staff driven checkout/return using a barcode scanner so not much work has been done yet on user driven reservations. Other features delivered were late notices, receipts reminders and invoicing for late fees and damages.

pinkonomy’s picture

Thanks a lost darrick.

rdworianyn’s picture

I see that there has been quite a few commits to the 7.3x branch in August, are we close to a beta release on this branch?

I would like to get working on porting this to Drupal 8, but figured I should wait until the most recent branch is completed.

darrick’s picture

Well, I'm getting close to a alpha release. Once I get feedback from that it will go to beta. I had to take a break the last month and focus on other projects. I'll update here with an overview once the alpha is out. As currently there is still a bit of customization to do to have a working configuration for testing.

As for D8. I have no plans to upgrade v2 but if someone wants to take that on I will support them.

rdworianyn’s picture

Thanks for the update, I will gladly donate time to this project for development/testing for Drupal 8 or 7.3.

Let me know when/if I can help.

darrick’s picture

Thanks. Looking at the current code. The merci_entityref_behavior and merci_hours modules are in the best state.

For merci_entityref_behavior ...

=== HOWTO USE ==========================

Add a date field and entityreference field to a entity bundle.

Configure the entityreference to use the Merci behavior. Select the date field to use for the behavior.

Date field may hold multiple values and use date_repeat.

Entity reference field may hold multiple values.

Merci Behavior will set errors if there is a conflict or if too many items are selected.

merci_hours is based off of https://www.drupal.org/project/work_calendar with the addition of restrictions based on hours of operation and not just days open.

Any feedback on those two modules will help. I'm sure they have some unnecessary dependencies and lack some documentation. User interface may be clunky too.