Ideas for how to achieve something pretty specific

I’ve been using SamaPOS v5 for our Dive Shop in Mexico for about 6 months now and everything is running pretty, but I am looking to include some new functionality…

My customers often come in groups (couples, families and groups of friends). It’s not essential I know everything about each of these customers, just the group leader is normally sufficient. However, it would be good to have a list of the names of the other people in the group so we can record their names and equipment sizes.

I would like to use this information in two ways…

  • Easily bring up a specific group leader and see the names and sizes of everyone in the group (and change this info if necessary).
  • When creating a ticket for the group leader, if I add a specific order I should be able to pick which one of his group members this dive on the ticket is for (for example kids sometimes have a different type of order to an adult, in which case I would pick the child’s name).

As with everything in SamaPOS, there are probably going to be a few ways this could be achieved, but before embarking on anything, I thought I would ask what you guys think the best approach would be?

Here are some options I thought of…

  1. Add custom fields to the main customer entity type, such as “Diver1 Name, Diver1 Size, Diver2 Name, Diver2 Size”
    We don’t normally have more than 10 divers in any group booking,so this reasonably fixed approach could be viable.
  2. Create a new entity type called “Diver” and have a custom field that contains the customerID of the leader, so these “Divers” can be linked to the leader. Each of these diver entities can each have their equipment stored as their own entity
  3. Do this with tasks somehow (I am not sure if or how this could work)
  4. Create a special ticket type to record these details. It could be settled for $0 but would allow the POS menu to be used to apply names and equipment sizes to the dive leader

With all of these options my main questions are which type of Scripts, Rules and Actions would I use to:

  • Load a list of divers who are in a specific leader’s group (and adjust their names and sizes)
  • When adding an order to a standard sales ticket, present the operator with a list of “Divers” to confirm which diver this order is for. The sales ticket would have been assigned to a leader already, but now we need to choose the specific diver.
  • When my staff are submitting their expenses (using a POS menu and expenses ticket type), they will need to be able to select the person that they were teaching on that specific day. Is there any way they could search for one of these Divers, either directly, on by first searching for the group leader and then selecting one of the divers assigned to that leader.

As always, any ideas are more than welcome!

I would have thought you would be better to have a group entity and link the customer entities to the group with a custom field on the customer entity.

I felt that made quite a bit of sense. Any idea how I could bring in a list of the customers when I add an order to ones of the group’s tickets? I was thinking possible through the Ask Question functionality - Would I be able to create buttons dynamically from a list of customers obtained by querying the group leader (already applied to the ticket).

Also, with this approach, how would you suggest the operator populates the information regarding equipment sizes (ideally one screen with all the customers of the group, rather than having to go in to each account person to person)

Not sure how your billing works…
Ask question buttons can be generated with script I belive so could maybe work something with that but not sure how you do you billing, if each customer has seperate accounts how do you do that now? Would be seperate tickets for each?
Maybe you could break down one of the ‘seat’/position setups and run a group ticket, new orders give an ask question show list of group members and tag the order, then a select ‘customer’ will select orders tagged to that customer and either split or pay just those, as said depends how yor billing works.

On the billing side, it’s pretty simple. The group leader pay everything. I don’t need to keep track financially of the other divers, but it would be good to have a note against each order on a ticket as to which diver should be assigned to each order.

So I can look in to scripting the question responses to be presented to the operator. How would you suggest I go about giving the operator a option entering the details for each of the divers equipment sizes (essentially custom field in the links customer accounts).

I would imagine you would want customer entities with fields for sizes etc.
Group entity which would be the way to access the group customer details.
Creating a group id sugest perhaps creating some group id as the primary field formatting entity display with id - name.
The customer entities would need a group id field which would be the id field of the group.
So your ticket would have the group entity selected, then using its group entity data for group id/primary field/name make a script to lookup group members and whatever data they have.
Wont be simple but should be posible.
Check first you can make the ask question buttons dynamically…
Im pretty sure it was done before, and if I remember corectly the scrept just returned the HEADER=VALUE,HEADER=VALUE,HEADER=VALUE, string similar to when you manual set fixed buttons.
You would then presumably need to account for more than one size type?
Then link the equipment to the size field corasponding to it.
If i were doing this I would have a custom product field for ‘Size Type’ which if your creative with your type name/label you could probably make the lookup dynamic in its search ie;
Entity Data of ‘Chest Size’ on customer. Dive Vest custom field for ‘Size Type’ = ‘Chest Size’.
Order added rule with constraint for product data ‘Size Type’ != ‘’ with ask question for select customer. Script with multiple input fields for ticket group entity id, and product data - size type so the script receives the group id and the type of size to return for customers in the group.
Script loops through customer entities looking for those with the correct group id and builds an array as it goes of customer name and corasponding size type field.
The script then renders a string in the ask quesion display format, probably using br/line break between each to give;
‘Customer Name’ - ‘Size’=‘Size’
Which would display bttons with name and size and sellecting would then pass the size through the the next rule (automation command executed) via the ask question automation command name.
If you were really careful with the values entered for customer entity data for each size type and your size type names on products and you could get predefined portions/tags (if used) you could even almost make it automatically change the portion/tag (if size were set as pre defined potions/tags if not pre tag will do)
Then in your automation executed rule you can action whatever you want.
If you needed to pass both name and size through in to the resulting automation to tag with name and size you would need to set both in the command value.
Alternativly thinking about it would could just search the group customers names and pass on the name and run a second script to get the entity data for size and ‘modulise’ the post selection automation using at that point the customers name as the lookup key.

Thanks @JTRTech - Some really good info here.

Normally when people are signing up we wouldn’t know their sizes already, so I think I would follow most of this, but with the change you mentioned at the end with regards to only storing the names, then looking these up separately when creating a report for the sizes needed on a particular day.

I’ll get cracking and let you know how I get on…