Private Plus taxi - Pricing, there should be a discount for the first taker as they are taking the no-share risk.
|
|
|
-
|
Pending
|
| |
|
|
|
Transfer - The number of Child and Babies should be capped at (Total Pax -1)
- ie If the total passengers is 5, you can't have 3 children + 2 babies. Assumption is that there is always 1 adult
- In the booking Notes we should include ages of children. or should we make this a new field? (ChildAges, BabyAges)? As free text.
|
|
|
|
Complete
|
| |
|
|
|
Ops Warnings - Build out a list of Transfers (not bookings) where certain aspects are unclear on the booking
- Accommodation unknown
- Flight unknown
- Follow-up flag marked
- Missing client emails or phone numbers
- Phone number check
- Email link to client for confirmation
|
|
|
|
Pending
|
| |
|
|
|
Flight scrape - Saves the kayak link into the Details Link - whereas this should be used for the GVA.CH scrape
- Duplicates seem to still being produced (eg if you run the scrape a second time)
- Doesn't seem to detect or save the airline code.
- Plus airlines have created a bunch of blank airlines (linked to flights - ie can't delete)
- Does scraping make more sense, as the airline is shown in the drop-down? https://www.justfly.com/
|
|
|
-
|
Complete
|
| |
|
|
|
Accommodation Street - Add a GPS location for each Accommodation Street and Destination
|
|
|
|
Blocked
|
| |
|
|
|
Shared Transfers Conceptual overview: - The Shared Service is a bus service from LeChable to Verbier (about 10mins drive) that can be shared by multiple passengers allowing people to complete their journey without hiring an expensive taxi
- It is a bus with up to 13 seats.
- LeChable is where the train arrives, at the bottom of the mountain. Verbier is the mountain village where the skiers stay.
- Uphill (arrivals, at start of holiday): LeChable→ Verbier
- Downhill (departures, at end of holiday): Verbier → LeChable
- There is a Shuttle (ie a bus available) for every train that starts/ends at LeChable that goes to/from GVA. Typical tourist from, say London….
- Arrival:
- Flight: London→ GVA
- Train: GVA→ LeChable
- Shuttle bus: LeChable→Verbier (uphill)
- Departure:
- Shuttle bus: Verbier→LeChable (downhill)
- Train: LeChable → GVA
- Flight: GVA→ London
- Therefore
- The uphill shuttle (LC→V) is derived from the fight arrivals and then matched train GVA→LC (working forward from the flight arrival time)
- The downhill shuttle (V→LC) is derived from the fight departures and then matched train LC→GVA (working backwards from the flight departure time)
- Each passenger is assigned to their best shuttle according to their flight details. See flight_trip index - which assigns them to the best train time.
- Let's first assume infinite capacity for the Shuttle and then consider how to limit the seats.
Assigning Transfers to a Shuttle Bus - A “Shared” Transfer (in a booking) needs to be assigned to a shuttle
- This is important as there are limited seats and the shuttle driver needs to know who they are picking up and where they are taking them to
- Also, I want to be able to see the list of shuttles and how many seats are booked (and free = 13 - # booked), as during the day as flights are late/early people may need to be bumped to earlier/later shuttles. This should only applies to the Arrivals (Uphill) shuttles as people will take their chosen Shuttle on the Departures (downhill) in time to catch their planes (ie we are ‘upstream’ of any flight delays). But we should be able to bump people up down the shuttles schedule easily/quickly and indeed enable the user to do that themselves (we should send them an email/whatsapp when we think they are on their train and confirm etc).
Pricing - There is also the pricing of Shared to consider
|
|
|
|
Pending
|
| |
|
|
|
Customer Emails Fragment - In the first section of the email, where you give the reference number (e.g. “Booking reference: VBC-1234”), create a link from the reference number, so when the client replies to the email we can launch the booking from the email
- It won't work for clients or be a security risk: For users (ie clients) without Admin/Staff access the link shouldn't work, and it should just take them to the homepage
- For office/admin, it should open the booking
- Create a new fragment for Baby/Child seats. If booking has a Baby or a Child then add the fragment to the booking. Unlike the other fragments the need for it is not a function of Type (Shared/Private) or Destinations, but rather the existence of a baby/child seat
Customer Booking Confirmation - At top include status - Confirmed/Enquiry/Cancelled
- Should include EVERYTHING in the booking that the customer gives us (not driver or actual pick up times)
- Flight details (Airline, Flight Number, and times (arrival times and dep airport for arrivals, opposite for departures)
- Chalet name, address and our link too (which should have the map once we had logged all the locations)
- Add in the Fragments any Destination specific PickUp or DropOffInstructions (Private Only - Not Shared)
- And finally add all relevant Fragments at end of Confirmation (eg Company Footer etc)
Customer Emails Template - New email template required. It will be used for Shared passengers (arrivals only -ie Uphill).
- The purpose of the email is to check that they are on the expected train, and if not to get the information as to what train they are actually on.
- Roughly, the email should say "We are expecting you on the [11:17] train from GVA to LeChable.. Please click below to confirm you made that train, or if you did not make that train, please confirm which train
- And present a list of possible other train times. That button should then reassign the client to the correct train (and pick up shuttle).
- There is a case where there is no space (or not enough space) available on the adjusted bus - and if so we need to think about the solution for that. In a sense that is not our problem as they missed their original shuttle
- Furthermore we should create a public page showing the number of seats available on the buses. (I worry that this gives competitive info away, but let's build it for now
|
|
|
-
|
Pending
|
| |
|
|
|
Shuttle: Edit Screen - Remove at the bottom the SBBTrain dropdown list and the Uphill/Downhill field. DONE
- List of Transfers includes ALL trips (PT and Shared), admittedly restricted to that day. But doesn't show name of Passenger, or Address. DONE??
- When you edit a shuttle and press Save, it should go back to the Shuttle page from that shuttle (ie 26-8-2025 in this case). DONE??
|
|
|
-
|
Pending
|
| |
|
|
|
Pricing - In Settings create a formula for the derivation of a price derived from
- Entity: HighVolume Days
- Early start time/ Late finish time/premium
- Weekend
- Shared price P1, P2, P3, P4, P5, P6, P7, P8
|
|
|
-
|
Complete
|
| |
|
|
|
Transfers - The Cancel button should be a checkbox, that can be unchecked to allow the transfer to be uncancelled
- Add a ‘Copy’ button that copies all the details of a given transfer, and does a Save-Re-Open too.
- This is because we are often asked to do similar trips (eg pick up the family at 8am to take to school Mon, Tues, Weds)
- Without opening the Extras section, we should be able to see the content, if populated, in the Transfer main box, using icons and title/hover
- For Passenger Name
- For the Driver, show the Departed and Arrived Times via icons and the mins late/early (see template/transfer/parts/trip_times_body.html.twig)
- By the accommodation, if picked from the dropdown list, have a link to the accommodation/show record and also a pop-up box(es) with all the content summarised
- Key icon for door-code
- Warning icon if Difficult Access
- 3 Notes fields (Driver Icon, User Icon, Office icon)
- Map marker
Booking - If there are more than 1 transfer, they transfers should be ordered by Date-Time, and ordered Transfer#1, Transfer #2, Transfer #3 etc
- Cancelled transfers should appear in the list (in order) but without a Transfer number
- Why does the Zero Commission and Follow-Up Flag display differently?
- Fields for notes doesn't expand when typing
- Last edited time/user required
Email confirmations and history - Under the Customer Details (below mobile) have an icon/link to customer confirmations, It should include the count sent and a link that shows all confirmations for this booking
- Similarly for WhatsApp messages
|
|
|
-
|
Complete
|
| |
|
|
|
Transfers - Add 3 new fields – 1) “Price Adjustment” (float) and 2) “isSharedAllowed” (boolean) and “sharedTransfers” (relation linked to Transfer Entity – ManyToMany).
- Price Adjustment: Each transfer will have a price, which will be composed of the “standard price” plus the possibility of a manual ‘adjustment’ (which most of the time is zero). The adjustment might be positive or negative and for example might be because the customer wants something special (eg snacks/drinks in the car, or a stopover en route) etc. The “standard price” will be calculated from the destination combination (eg VRB to GVA), the number of passengers and potentially the time of day, and we will designed an entity to capture that. And the Price Adjustment is a manual input. The standard price is computed dynamically – but I want to save it in case the formula changes as we can’t change a price already given (hence a field is required. Make sense?
- IsSharedAllowed. The concept I want to introduce here is that I want to offer people the ability to share a taxi. Typically the vehicles will take 7 people, so if you are a family of 4, you have 3 spare seats. I will only allow a share if the others are on the same flight/train (if inbound – as sometimes flights are late and don’t want any additional waiting) or within [10] mins for a flight/train departure. So if a client says yes to “isSharedAllowed” we will try to combine and split the costs.
- To do that we might need to link transfers together using the sharedTransfers field which will contain which transfers are being combined (typically 2 clients (ie 2 transfers) but could be more, eg 4 passengers +2 passengers +1 passenger) And then we can assign all [3] transfers to the same vehicle/driver….
- For the train pickup service that is the same concept – we will have a bus (say 13 seats) that can take various combinations of passengers to fill it (could be 13 single travellers). That service will take people from LeChable train to their chalets in Verbier. Does that make sense?
|
|
|
-
|
Complete
|
| |
|
|
|
SBB - Fix SBB scrape to include all the trains for the day (currently just taking 4-5 trains (one screen's worth), whereas I would expect there to be 30-40 trains per day (for GVA to Martigny as an example)
- I think SBB changed the design of their page?
|
|
|
-
|
Complete
|
| |
|
|
|
Bookings index - In each transfer (T1..T4), show as much info as possible
- Flights. Blue for Arrival, Green for Departure. Hover for flight details including scheduled and actual times. Show a warning sign if later than x
- Completed trips background colour green
- Accommodation via a popup (name, address. afiiliate, diff access)
- Times shown in icon with error sign if missing or late
Bookings - Show updated flight details in each booking, including flight times when departed/arrived
Flight trips - I am developing a PHP symfony PS project that looks at flight times. I have 2 sources for the scheduled flight times (departure and arrival) data and i want to use both to cross-check. My fields are respectively 1) scheduledDepartureTime and scheduledDepartureTimeGvach and 2) scheduledArrivalTime and scheduledArrivalTimeGvach
- In order to save real estate on the page I want to consolidate this data to a single figure, but have colours identify any discrepancies. My thought is that the display should be (using departures es the example)
- If only the scheduledDeparture time is present (and the scheduledDepartureTimeGvach is null), then display the scheduledDeparture, in grey
- If both scheduledDeparture and scheduledDepartureTimeGvach are availablen and the the same then display either one (scheduledDepartureTimeGvach) in black
- If both are available but are different by more than 10mins, the show scheduledDepartureTimeGvach in black with red !, with the ability to show the scheduledDepartureTime via a tooltip/hover
|
|
|
|
Complete
|
| |
|
|
|
New booking - from email - Ability to ‘suck in’ an email into a Booking.
- The contents of the Email (include To: From, Date, cc, Subject and the main body) should be brought into a single field which is appended at the bottom of the Booking screen (full width of screen and deep).
- The email from field should populate the Booking.Email field.
- Think of it this way. Say we get the following email from john.smith@gmail.com “Subject: Reservation request for Smith family… Body: Hello Alpinexpress, I would like to book 2 transfers. the first on 1 March 2026, picking up at Geneva airport. We are on EZ 1234 from gatwick. we need to go to Chalet Makini in Verbier. We are 3 people. And we are returning a week later on the flight EZ23456 at 11.30am. thank you, John Smith +44 758877444444”
- We should be able to see the full email (not just the body, but also the email address of sender, date/time and subject) and then we can make sure we have uploaded the email accurately and kept a record of that in the booking.
- In truth it is really for auditing and to help the booker convert an email to a set of transfers
- Systematically, it needs to pull in the From, CC, Subject and Body fields from the email, and format nicely into a single field. Then it should fill name the client email with the senders email. That's it. Does that make sense?
- We have some of this functionality already - just not bringing it into a new booking.
- The process of adding a new booking should move the email to DONE directory
- In Company Details we have fields that define where to look in the email for new bookings and where to place them once uploaded. And the email login and password - do you remember that?
|
|
|
-
|
Pending
|
| |
|
|
|
Email Template - if the field AffiliateBooking is set to “Direct to Consumer”, then:
- Set specificAffiliate to null
- Set aggregateComfirmation to "Single Booking"
|
|
|
|
Complete
|
| |
|
|
|
Driver's page - The driver's schedule should detail THEIR trips for the day and allow them to move forward/back to future days.
- Background colours to represent past, tomorrow, today, future
- Links to helpful notes.
- Launch the “Meet & Greet” page for airport/train pickups with the client details/affiliate logo
- Buttons to register events
- Non-transfer
- Driver wake-up / Awake
- Left home
- Transfer specific
- At pickup (including GPS location)
- ‘Found client’
- Leaving now
- Arrived
- WhatsApps/emails to clients
- Essential that this page is optimised for mobile. Should also be the login-direction for users that are Drivers
|
|
|
-
|
Pending
|
| |
|
|
|
Calendar page - Develop a calendar page with the same look/feel as alpinexpress.com
|
|
|
|
Pending
|
| |
|
|
|
Email received into the mailbox - Ability to import in an email into a Booking.
- Populates the “EmailImport” field with the content
- Popluates Client-email from the sentFrom field of the email
- Will need to save in the website the email login and password and the directory (i.e. "_Taxi Bookings To Be Uploaded”) to look into.
- When the import is done, it moves the email to a new directory (i.e. "_Taxi Bookings Uploaded”)
|
|
|
|
Pending
|
| |
|
|
|
- Multi-lingual functionality:
- Include in the CompanyDetails entity a field called ‘multilingual’ (booelan)
- Create new entity called ‘Languages’ containing, language (English, French, German, Spanish) , flag icon file, and abbreviation
- Selection of flag switches language of text
- Page count
- Add field in the Products entity for pageCount and pageCountAdmin
- When a page is loaded add to the pageCount (and if an Admin user add to pageCountAdmin only
|
|
|
-
|
Complete
|
| |
|
|
|
Clients - Can't make entity
- Add new fields:
- Add link to their trips
- 12month PV
- List of bookings, with first date and PV
|
|
|
|
Complete
|
| |
|
|
|
Management: XLS exports: - Transfers
- Bookings
- Driver transfers
- By Affiliate
- By Private/Private+/Shared
- Accommodations
- Revenue reporting
- Include reports by CreatedBy/CreatedOn
- Work out how to handle view the revenue comparison across seasons
- Control start date from an input in Systems Settings
- Perhaps have a single button that opens multiple versions
- Create a service that count/revenue of all private/shared transfers by Client Name (in Client list)
|
|
|
-
|
Pending
|
| |
|
|
|
Taxi site - Track the history of the flights to build up a picture as to the on-going schedule
- Email Hermes to see if they will send us the scheduled flights
|
|
|
-
|
Complete
|
| |
|
|
|
Background/rational - Taxi companies and individual taxi drivers all share the same software and I will be able to see across the various competing taxi drivers and re-allocate trips or new trips to whoever is best placed to offer them.
- In truth this is to match drivers who are going back empty with a customer who needs taking
- Do you think this makes sense that there are [20-50] taxidrivers sharing the same database -or should i clone it?
- Offer each taxi driver their ‘own’ website, so they can give their clients that site and book trips there themselves (as an incentive to use the system). Assume there are 50 ‘individual’ drivers.
- Can I control 50 x CMS inputs centrally (ie each CMS page would need to be linked to a taxi driver)
- Can I point their own URL to my code (eg. www.johnstaxi.com) ?
- So in each Partner company I would include their URL link if they are adopting my system
- Intro fee for referrals
- New drivers sign up and need to send bank details, driving license and car details
- For last min bookings, the driver's location is tracked in their response
- For all bookings the driver's time at location is tracked to prove they were on time and to whatsapp the customer
|
|
|
|
Pending
|
| |
|
|
|
Resort Contacts - In resort contact entity, add a field called “defaultAccommodation” , This is a relation field, referencing the Accommodation entity. And restricted to the list of the accommodations for the resort contact's relevant affiliate
- Create a view (launched from the Affiliates index - I have created the button created already - see “Host/Chalet” under Assignments) that should create a view a given affiliate, the list of the affiliate's accommodations and the Resort contacts linked to each accommodation.
- This may need to be shuffled around over time., so also show the Resort Contacts that are ‘orphans’ (ie no associated Accommodation)
- Notes an accommodation may have more than one Resort Contact assigned to it
- Make this easily editable - question, can we drag a resort contact onto an accommodation?
- It may be we need to make a time dimension to this, but let's cross that bridge later
|
|
|
-
|
Pending
|
| |
|
|
|
Managing the shuttles For Arrivals. - Look at scheduled flight arrival time
- Find next train to LeChable that is at least 45mins post scheduled flight arrival
For Departures - Look at scheduled flight departure time
- Find the first train to GVA from LeChable that arrives at least 2 hours before the scheduled flight departure time
|
|
|
|
Complete
|
| |
|
|
|
Feedback on Transfer Macro - Date should show the DoW (eg Sun 16 May 2025)
- Destinations
- Should be sorted by “SortOder” and then alphabetically on "City"- with a break before ‘20’ (or different colour) (this is because the first 5 or 6 are the common ones, and the others are rare)
- Add buttons change order, but keep 20 as 20
|
|
|
-
|
Complete
|
| |
|
|
|
Flight scraper Populate Kayak data - Add a button (under Actions) that ROLE_ADMIN can run to populate flights (Kayak) for all active airports serving GVA, for a period of dates.
- Use same date schedule as in the Settings
Populate GVA.CH data - On morning of T+1, run the GVA.CH scrape for ‘tomorrow’, on all flights
- This is a one-off check, mainly to confirm that the scheduled times from Kayak match the times from gva.ch. ie ScheduledDepartureTimeGvach === ScheduledArrivalTimeGvach
- Chron: Run at 8am, on T+1 (ie on Monday 8am, run Tuesday's GVA.CH Overview and Details flight scraper)
- Throughout T+0, the ‘detailed' refresh should run on “selected” individual flights, where the criteria for selection is:
- Arrivals:
- actualArrivalTime is null and
- scheduledArrivalTimeGvach is after ‘now’ - 1hour
- Departures
- actualDepartureTime is null and
- status is not cancelled
- scheduledDeparturelTimeGvach is after ‘now’ - 1hour
Code-share - Code share is no longer a relational field (linked to FlightTrips).
- The Codeshare entity has a flightNumber and the record stores the associated other flights.
- This enables mutliple flightTrips with the same flightNumber to be linked to the CodeShare
- So the determination has to be a lookup on a matching flight number
- The objective is to combine multiple entries for the same flight and return the code-share data in the flight details in the transfer bookings (so a user can search for their flight by any of the flight numbers)
- Check the scrape functionality on the "Operated by" to identify “child” flights (ie the ones that are going to be deleted)
- Establish a view of all flights where there are more than one flight departing at the same time to the same location.
- Build up a list of code-shares - question, the gva.ch notes scrape concatenates the flight numbers. Should we maintain that array or separate into individual code-share identifiers - which will allow us to identify ones to delete?)
- Write a service that identifies the duplicates and delete
|
|
|
-
|
Pending
|
| |
|
|
|
New Booking. - When you save a New Booking, it selects ‘1’ for the ZeroCommission and followUpFlag fields, even if unchecked. This is the form (same for both):
->add('followUpFlag', CheckboxType::class, [ 'required' => false, 'empty_data' => false, 'label' => 'Follow Up', ]) - The dropdowns are slow and repeatedly trigger. Most notable is for the Client Name/email/tel and the flight details
|
|
|
-
|
Complete
|
| |
|
|
|
Flight selector in New Booking - Find a date where there are flights available.
- Select “LGW” (for London Gatwick LGW)…. Initially this will show the LGW flights but then shows others
|
|
|
|
Complete
|
| |
|
|
|
New booking - For taxi drop-offs at train stations, add the ‘10’ mins required to buy their ticket to the travel time
- eg Train time : 12;00 ; drive time = 32mins, then leave Verbier time is 12.00 - 32mins -10mins = 11:18
- For all drive times add 5mins and multiply by 1.1 (dynamically controlled in settings).
- Airport bookings
- Is showing the Geneva flights for Zurich Airport or Sion Airport. It needs to match on airport too. Let's add some Zurich and Sion flights to test
|
|
|
-
|
Complete
|
| |
|
|
|
“Shared” Private Transfers - Create a view of all Private transfers where the IsShared = true, sorted by Departure Destination and Arrival Destination and a flag if there is a match
- Match is when…
- Date, and To/From destination (city) is the same
- For pickups at the Airport or Train, that all customers on the same flight/train
- For dropoff at the Airport/Train, that the train/flight time are within [10] minutes of each other (where the 10 is controllable in Settings - but hard code for now)
- That the total pax combined is <8
- We should think about if we can automate the matching and we should publish the possible matches on our public website
|
|
|
|
Pending
|
| |
|
|
|
Taxi partners There are different levels of Partners - “Independent drivers” who only have 1 car and work for themselves
- Can login and accept available trips
- Larger companies with multiple cars and multiple drivers
Trips to Outsource view - Create a "Available trips”
- Understand the starting point of each driver and attempt to offer pairs of trips that start/end at their chosen venue
- But show all trips in case they have a natural offset
- Press button to accept (how do we refresh first?
|
|
|
-
|
Pending
|
| |
|
|
|
Destinations - Add the following fields:
- Default address (used for airports and train stations)
- Default longitude and latitude
- Notes
Accommodation Street - Add a field “defaultLongitude” and “defaultLatitude”.
- This is used to guide the map function when none of the buildings on that street has a GPS location…. That will allow you to allocate buildings to the street numbers
|
|
|
|
Complete
|
| |
|
|
|
New booking Client search - The client dropdown list of ‘matching’ clients only displays the client name and their email address. The phone number is not displayed
- However, you can search by tel number, even if not displayed
- If you select a client in error, perhaps there could be a quick way to reset?
Chalet address - If a selected accommodation is picked, it should not show the Other Address
- And if you do select Other, it seems to maintain the link to a prior address
Date selection - Online (users) should not be able to select a date in the past. Nor too far ahead (eg 6months)
- In the backend, we should allow historic dates but a warning flag to show if the travel date is in the past
Billing - Payment link not required if Outstanding = 0
- Outstanding calculation is not correct. Doesn't include the surcharges to the Trip prices, nor capture the Paid amount.
|
|
|
|
Pending
|
| |
|
|
|
Client comms - Clients can have a secure webpage (similar to the autologinm) to shows each booking/transfer with the ability to edit some fields
- Security code that times out.
- Client acceptance - Give a code to clients to accept the transfer.
- Whatsapp message to clients the night before. Link to summary of transfer (not user protected)
|
|
|
-
|
Pending
|
| |
|
|
|
Feedback on Transfer Macro - The time box should be a format for time (24hrs) and width should match the dates
- Date should show the DoW (eg Sun 16 May 2025) TODO
- Destination
- Should be sorted by “SortOder” and then alphabetically on "City"- with a break before ‘20’ TODO
- Handling Destination is a "Train Station"
- If you change the Destination from a City to a train/airport (eg from Verbier to Martigny Train) then the From Address field should switch to Train time/Flight
- When Destination is a City (eg Verbier), the Accommodation dropdown needs to contain all the information (see attached screenshot). 2 lines required for each address:
- Symbol to indicate the “Type”
- ‘House’ for a Chalet
- ‘Knife and fork’ for a Restaurant
- ‘Office building’ for a Hotel
- Then show the Chalet Name, Apartment details, and then the Affiliate (in brackets)
- Then line below should have the street and house number
- Looking at the database entry for the Transfer:
- PassengerName and PassengerEmail and PassengerMobile should not be inherited from the Booking.
- This is an over-ride should the transfer not be in the name of the Booking. So unless populated manully, it should be null
- Trip date should be not nullable. Time should not be nullable but have a TBD over-ride or (TBD checkbox)
- Should we rename TripXX to TransferXX in all the fields?
- The addressStart and addressEnd still seems to be a string field rather than a relation field related to the Accommodation entity
- We need this to be linked because the driver will be given various info points from the Accommodation entity (eg Door Code, GPS location, Driver notes, Client notes, Associated Resort Contact). But there neeeds to be a manual over-ride “Other” available
- Layout of Pax Child/baby. Try to get on 1 line
- The Hide/Show extra fields
- The Passenger Name/Email/Mobile should be here. (These are the “over-ride ones in case the names is not the same as the Passenger details for the ”Booking" as a whole
- Delete Button should be hidden
- There should be a “Cancel trip flag” - which is similar to delete but retains the info for document record keeping purposes
- Notes needs to be a bigger field
- The timestamps can be indicated in pop-ups without expanding the section. The user will only expand if they want to edit - which is rare as the times are generated by the system.
Feedback on the Booking section (on the left) - When you save the booking, you should show the ID of the “Booking”. This is the customer reference number
- Client email and client mobile should be nullable
- Client details should be saved in the Clients entity if unique (ie that database grows)
- Status should be: Confirmed/Inquiry/Cancelled (no need for cancel booking field)
- Booking history: This should save the logged-user and time of creation
- Payment link expiry: First trip date time less 24 hours
- Still has the word “Transfers” on the bottom left
|
|
|
-
|
Complete
|
| |
|
|
|
New booking - Flights should be sorted as follows:
- GVA pickup (ie Flight Arrivals): By scheduled flight arrival time
- GVA drop-offs (ie Flight Departures). By scheduled flight departure time
- Note, by "scheduled" I mean the gvach if it exists and the plain scheduled one if not
- Departure times from trips to/from an airport not computed yet. Should reference the flight arrival or departure times with the formulas agreed.
|
|
|
-
|
Complete
|
| |
|
|
|
Affiliates - if this can be done in less than 1 hours…. as it will only take 2 hours to do it manually…
- Cycle through each of the afffiliates and extract all of the data (including the icon) and either save to a CSV or import directly into the Affiliates entity
- Do not need to collect the following data:
- Image file if difficult - I can collate manually (it is a 10min job to do all of them)
- SMS recipients (this is probably stale info by now)
Accommodation Resort contacts - Import the Resort Contacts.
- Need a new entity for them,, User with ROLE_RESORT_CLIENT
- Add a new entity ResortContact and create new record alongside new User
Clients - Extract all client info (188 pages) from this view.
- http://alpexstage.caponica.com/controlroom/customer/list
|
|
|
|
Complete
|
| |
|
|
|
Transfers Destination is a City - If the Destintaion IS a city (for either the start or end of the transfer), we need to show the dropdown list of accommodations to know where to pickup or drop off. Include the possibility of "Other"
- Save the accommodation id if picked from the dropdown (ie not ‘other’)
- If Other, save the input in a new field
- We will need 2 fields as we may have new locations in both the pickup and dropoff . Create two new fields
- addressStartOverRide
- addressEndOverRide
- Note: if the Destination is NOT a city (eg airport or train station), then do not show the address field at all (as there is effectively only 1 address)
Destination is a Train Station - If the Destination is a Train station, ask for train time and perhaps the origin/destination location. So the 2 fields are
- trainTime (time)
- trainOriginOrDestination (string)
- Depending on whether Transfer picks up at Martigny or drop offs, we can work out the direction of the journey and check the times. But as far as capturing data- these are the 2 fields
Destination is an Airport (eg GVA) - We need to know the flight details (time, airline, city of origin or end) for both for (1) pickups from at airport (ie where the transfer starts at GVA) and (2) drop-offs at the airport (ie where the transfer ends at GVA)
- However it is the case that only one of the Start or End is an airport - (ignoring the case where we are picking someone up at one airport and driving them to a second airport to take another flight - that never happens)
- So while we need to capture the details of the flight (airline, flight number, destination/origin city, time) if not found in the flight database. we can work out if it is a departure or arrival from whether the Transfer is picking up or dropping off at the airport. So in the Transfer Entity you can use the same fields for Over-rides on the flights
- flightOverRideAirline
- flightOverRideFlightNumber
- flightOverRideFlightTime
- flightOverRideFlightCity
|
|
|
-
|
Complete
|
| |
|
|
|
New Bookings (default settings) - Automatically add 1 transfer, with certain default assumptions.
- Create records in the SystemSettings entity to define the default settings.
- DestinationStart (eg “GVA”)
- DestinationEnd (eg “VRB”)
- Date: Following [Saturday]
- Passenger #: 1
- Baby:0 Child: 0
- Add 3 buttons on each transfer
- Delete transfer (in hidden fields, next to cancel)
- Copy transfer (in hidden fields). This makes an exact copy of the transfer details other than the assigned driver/vehicle and times
- Imagine being asked to create a series of transfers like the same pickup from chalet X to go to ski-lifts every day of the week at say 7am. Easiest way to do that is to create it once, then copy changing the day by +1 day
- Importantly, do not copy the driver/vehicle details as these are not assigned and history is unique (ie when the driver arrrived)
- Return trip - this reverses the To/From. Make the date 1 week later. Same number of passengers. Not hidden - bottom right (could be an icon)
- Create fields called lastSaved and savedBy
- (I have created them already) , that stores the time of last saved.
- Show time and initials in top right. of screen
- These seem to still appear at the bottom of the booking page on the left
- CreatedBy and CreatedOn fields are not being saved at the moment
- Moved to bottom of page, in light grey
|
|
|
|
Complete
|
| |
|
|
|
Transfer - 3 buttons at the top:
- ‘Save’ - This updates the database but returns the user to the same screen (ie opens the Edit if new or stays on the Edit if in Edit mode)
- ‘Discard’ - Closes the screen and doesn't save. Prompt a "Are you sure?
- ‘Save & Close’ - Saves the record and returns to the Bookings Index
- Cancel transfer
- This is essentially a new field. All the details are saved, but the transfer will disappear from (or zero costs) in any bills or from the driver's manifest
- City- Address
- The chalet name disappears after 2-3 seconds.
- The search should include the Affiliate name, so I can search for “Bramble”
- Cancel button should be in Extras
|
|
|
-
|
Complete
|
| |
|
|
|
New Booking - When switching direction, retain the address (and date). Delete the flights (if applicable)
- If Shared, add a link to the SBB train times (on the correct date and direction)
|
|
|
|
Complete
|
| |
|
|
|
Transfer_macro - When you have a flight, display the flight details so easy on the eye - presumably this can be der0vied from the flight id:
- Flight #/airline
- To/From
- Either the Scheduled Departure (for depatures) or Arrival (for Arrivals) time
- Updated time (ie delays etc)
- In the Transfer_macro, when spooling through the flights, only show the flights where the Date of the flight equals the date of the trip and the ‘direction’ is correct, namely:
- Airport pickups: (ie meeting clients at the airport and taking to the resort- i.e. destinationStart = Airport) - then we are meeting a flight arrival
- If transfer.destinationStart = 'GVA", then look for flightTrips where flightTrip.arrivalAirport = destinationStart
- Airport dropoffs: (ie depositing clients at the airport and starting from the resort- i.e. destinationEnd = Airport) - then we are meeting a flight departure
- If transfer.destinationEnd = 'GVA", then look for flightTrips where flightTrip.departureAirport = destinationEnd
- Compute the pickup time derived from flight or train times
- For pickups it is the flight/train arrival time plus the baggage time (eg 20mins for flights, 2mins for trains)
- For drop-offs (going to the airport), you have to work backwards from take flight time…. less commute time (see routes entity) and the check-in time allowance ,
- System Settings contain the airport and train station delays
|
|
|
|
Complete
|
| |
|
|
|
Public pages (non-protected) - Add links from the HomePage to the following public information - to drive more traffic to the website (will this adversely affect our performance)
- Train times (DONE)
- Flight board (DONE)
- Business Contacts (eg restaurants, shops, hotels) (DONE)
- Chalet map (DONE)
- Shuttle available seats (WIP)
- List of Private+ trips (ie those trips with free seats available)
- Enure they are optimised for mobile and desktop views
|
|
|
|
Pending
|
| |
|
|
|
Accommodation: Index - Compute the number of transfers, and the value of the transfers, in the “Reporting Period”
- Create a service called “FinancialReportingService” that has two functions that compute these statistics (placeholder for now)
- TransferCountByAccommodation
- TransferValueByAccommodation
- In the Systems Settings entity add a ReportingStartDate and ReportingEndDate fields that is used in this service.
- This service will also do
- TransferCountByUser
- TransferValueByUser
Accommodation: Street map - Sizing of map looks wrong. Take an example with 2 chalets in Rue Barmete….
- There should be a maximum zoom setting
- Filters on Accommodation Index:
- City (i.e. destination)
- By “type” in a given Destination (e.g. hotel, restaurant, shop etc in Verbier)
- Map - by Affiliate (ie show all <<Bramble Ski>> properties
- Link from the Affiliates page. Or from the Resort contacts page
|
|
|
|
Pending
|
| |
|
|
|
Accommodation - Ability for the user to add a new address
- When selecting an affiliate, have a map page that shows all the chalets for [Bramble]
- Create a sorting table for the various scenarios (mobile/desktop, Admin/User, Filters selected)
|
|
|
-
|
Pending
|
| |
|
|
|
Flight Index - Where the train times are shown in the view, hover over to show the 2 preceding and 5 following train departure times.
- When a flight arrival is delayed, show the new expected train time and the previous one in a warning box
|
|
|
-
|
Complete
|
| |
|
|
|
Confirmation pages - How to handle %Source% %Transfer% and %footer% in the email confirms
- Including details of the tel number (country code, PhoneAnalyser - confirm if the number is “verified”)
- Generate error-chasing emails where corrections can be made without a login
- Perhaps flag bookings where this has been triggered (with a sunset clause as a security measure or to avoid last minute alterations).
- Add/correct phone numbers
- Add/correct babies
- Add/correct flights
|
|
|
-
|
Pending
|
| |
|
|
|