To Do: All

/
Priority Project #
1 CyrpusVillasDirect #: 37
1.01

Calendar synchronisation with Airbnb

  • Objective; To avoid double-bookings between the two platforms
  • Both systems support iCal calendar synchronisation. In practice this means the two calendars exchange availability information automatically:
    • The website will publish a calendar feed showing dates that are already booked or blocked. Airbnb can read this and automatically mark those dates as unavailable on Airbnb.
    • Airbnb also provides its own calendar feed. 
    • The website will read that feed regularly and automatically block those dates on the website if an Airbnb booking is made.
  • I have made that link in the TheaVistaPissouri project to make bookings made on our site available to AirBnB, but not the reverse – can you research?

ToDo:

  • In the ‘pull’ from AirBnB can you display the name of the booking?
Complete
1.01

Villa import from Airbnb

  • Can we extract the GPS location?
Pending
1.02

Villa slug into other entities

  • Photos
  • CmsCopyItems

Think about

  • Weather: How to handle more than one weather location
  • Business Contacts: Should these be unique by villa? Seems a shame not to share.  Thoughts

 

Complete
1.02

Villa description

  • Need to translate the “About this villa” text into every language.  
    • Should we use the Translation entity or multiple entities in the Villa entity? I think the Translation entity. Agree?
Pending
1.03

Individual websites

  • This is the key challenge.
  • Let's assume to begin with that each villa holds their ‘unique’ villa website on the atts-systems.com domain…
  • Then what I would ideally like to happen is that as soon as we create a villa entry for a new villla  (eg Villa RogerFederer,   website:  www.villarogerfederer@atts-systms.com) then it is immediately available as a unique site (rather than a directory under villacyprusdirect). Is that possible?
  • Let's assume each villa wants their own URL (which is not part of atts-system  eg VillaRogerFederer.com), I am sure we have to buy the URL and redirect in the DNS our own sub-directory to that external, non ATS, site)?
    • Is that how you would do it?

 Controlling the CMS on each individual website

  • We can;t use the CmsCopy entity in CyprusVillaDirect to control the CMS on say “TheaVistaPissouri.com” because the CMSCopy has no unique villa ID
  • And we can't add villa_id to the CmsCopy entity (and CmsPhoto entity) as that will be over-written by ATS copy bat file (and we need the CmsCopy for the CyprusVillaDirect site…. 
  • So what do we do. I think we need to create a villa-specific CmsCopy and CmsPhoto entities. 
    • Do you agree?  If you agree let's call them:  CmsCopyVilla  and CmsPhotoVilla
Complete
1.03

New Booking (when not logged in, ie as consumer user, not admin or user)

  • Apply the phone Analyser to the Guest phone field
  • Hide the Language field, but store it (records what language they looked at the website in)
    • Make the confirmation in English and their preferred language
    • bcc sjwn71@gmail.com in all confirmations (as we test)
Pending
1.04

Emails

  • Check that the emails are working (cc'ing the 3 recipients defined in the  villa )
  • Save the emails in database and show link in booking
Pending
1.04

Main CyprusVillasDirectHomePage

  • This should show ALL villas
  • See https://www.villaplus.com/  
    • See how you can search by dates, # bedrooms, and then click on a villa. 
    • The info section gives a good example of the extra fields we need to add in the Villa entity (I will do that)
Complete
1.05

Seasonal Rates

  • There are 2 new fields in Seasonal Rates -  “weeklyBookingsOnly” flag and “weekStartDay”
  • These are used if a villa only allows bookings by the week- eg Saturday→Saturday.   
    • This is common in ski resorts so that they don't have 1 of 2 days empty as the visitors don't fit exactly
  • So if this Boolean is checked, then customers can only book in 1 week slots (eg Saturday to Saturday).  In that case the price per night is really price per week (so multiply by 7),  And the weekday (eg Saturday) is controlled here too. 
  • Also we need to change the Booking calendar to only accept week-long bookings
Complete
1.05

Owner

  • Test logging in as non-Admin, but as an owner and see what you can do.
  • Owners (non-Admin) should be able to edit their villa(s) including the text, rates and see bookings for their villa only.
Pending
1.06

HomePage (VillaIndex)

  • Make the HomePageIndex the homepage (settings?)
  • Make the “View villa URL”,  Show (eye) and Edit (Pen) buttons only available to ROLE_ADMIN.  
  • Clicking on the picture of villa should launch the villa's show page (not their OWN website) which includes the Availability

 

Search functionality

  • Initially the Homepage should show all villas
  • Once the Search function (dates, #bedrooms) is selected, it should only show villas that are available in the full date range and meets the bedroom and region criteria
  • Can we add a dropdown list of Amenities that the villa needs to have (eg must have swimming pool)

 

Villa-Show

  • Move the Availability to top right
  • Remove the Villa Location box.
    • Make the map-market at the top of the page launch the map/directions page,  
    • Looks like you have replaced the map-marker icon with the villa favicon - no…. it should be the map-marker and pressing it should open the location/directions page

Availability grid

  • Info icon appears on days when you can't book (hide it)  
  • When I have Sep highlighted it looks like you can't book 1-4 Oct... which you can
  • Weekly only doesn't look good on mobile   
  • When the villa is weekly booking only, I think we need to change the display and just show the weeks.  And not show the weekly price in every day.  Perhaps only show the price on the [Saturday] and change the text to $700/week
    • Clicking on Book should show only bookings for 1 or 2 weeks from the prescribed start date
  • Remove the  word "Book" - it is implied 
Complete
1.06

Villa Photos

  • Photos not filling the page very well and being top/tailed on homepage
Pending
1.07

Multi-lingual

  • How do i handle the option that different villas want different languages?
Pending
1.07

Show villa

  • Remove “Select an available date on the calendar to book this villa directly.  Direct booking. About 15% cheaper than Airbnb”
  • Change text to: “Save versus AirBnB by booking direct. Compare price: ” then include the AirBnB link under the AirBnB icon  
  • For ROLE_ADMIN include an icon (next to the map-marker?) with a link to their unique site
Complete
1.08

Stripe

  • Set up Stripe to take payments
Pending
1.08

Homepage

  • At the bottom of index_homepage.html.twig: Include a map of the island with each villa location shown.  
    • Restrict the map markers to those that meet the search criteria
    • Hovering over the map maker shows the name of the villa, and number of bedrooms in brackets and price (lowest daily/weekly rate in the date range)
    • Clicking on the map marker launches the show-villa page
Complete
1.09

"Owner" entity

  • Objective is to define which User (or Users) have admin rights to each villa
  • This entity has two fields:  Villa and User
    • Both are relational fields and the User one is multi
    • Villa field cannot be null
    • Sort each dropdown by fullName (User) and name (villa) respectively. 
    • In the index show some of the key villa_details as a lookup into the Villa entity
      • Address
      • Contact First/Last name
      •  Wesbite URL (which launches in new window)
  • Admin rights enables those permitted users to:
    • Administer the “Villa” settings
    • Set Seasonal Rates
    • See and reply to bookings
  • Have link to it on the Standard Dashboard, say near the seasonal rates
Pending
1.09

On mobile

  • Date fields are not aligned nicely
Complete
1.10

Voucher scheme

  • Establish a discount code system for returner
Pending
1.10

New Booking

  • In booking/new,  the user (non ROLE_ADMIN) should not be able to edit:   
    • Status
    • isAirBnB booking
    • Checkin & Checkout Dates (should be set from the button and depends on availability)
      • OK to made these editable so long as it knows the availability schedule
  • Handling availability in the booking dropdown: We need to handle cases where the available booking basis changes between Daily and Weekly during the period shown.  
    • For example: 1–3 January is available on a daily basis.
      • From 4 January onwards, availability is weekly only:
        • 4–10 January
        • 11–17 January
        • 18–24 January, etc.
      • In this case, the permitted departure dates for an arrival on 1 January should be:
        • 2 Jan, 3 Jan, 4 Jan, 10 Jan, 17 Jan, 24 Jan, etc.
        • It should not allow departure dates such as 5–9 January or 11–16 January, because once the booking crosses into the weekly-only period, the departure date must align with the end of one of the available weekly blocks.
        • The dropdown therefore needs to build valid departure dates by considering changes in the availability/rate basis across the booking period, rather than assuming the entire stay is either daily or weekly.
Complete
1.11

Seasonal rates. 

  • Include a Villa field in each seasonal rate (DONE)
  • Index view:
    • Not available to non-logged in users
    • Non-Admin Users (ie ROLE_USERS) see only their villas (as defined in Owner entity)
    • ROLE_ADMIN users see all
  • The view should be by single villa (you never want to see all villas on one page) - so you select the villa you want to see
  • The error messages (checking continuity) are by villa (Make sense?)
  • And finally it might be great to show a graph of prices by dates.  Again ROLE_ADMIN see all graphs, ROLE_USER see their own only. 
Complete
1.11

Version of Calendar

  • Create a table view of the Calendar so Users, Admin and Owners can see multiple villas in one view
  • See attached xls to illustrate what it should look like
  • Filter buttons for Month and City of Villa
Pending
1.12

Export and imports 

  • Build export and import for Bookings (SN to do)
Complete
1.12

1. Market Intelligence — highest development priority

Your current scraper collects valuable raw observations: 30 different stay durations for each arrival date, repeated across villas.

But owners won't want to look at 30 columns of numbers. They want to know whether they're charging the right price, how their competitors are performing and what they should change.

Daily price reconstruction

P0- Convert total stay prices into understandable daily rates: Minimum stay and discount detection

P0 - Identify 3-, 7-, 14- and 28-night restrictions or discounts Competitor comparison dashboard

P0 -  Compare similar villas over the same dates. Scheduled scraping

P0 - Automatically build historical price data. Availability change tracking

P1 -Identify newly blocked or reopened dates.Pricing recommendations

P1 -Highlight where an owner appears expensive or cheap.Historical pricing charts

P1 - Show how prices change as arrival dates approach. Automated owner reports

P2 - Send weekly insights by email

 

A. Daily pricing reconstruction

This is probably the most intellectually interesting part of the project.

Your existing T+1 to T+30 observations are total stay prices, not daily prices. The task is to infer underlying nightly rates and distinguish them from length-of-stay discounts.

  • Ordinary nightly rates, potentially varying by day.
  • Minimum stay requirements.
  • Weekly and monthly discounts.
  • Additional cleaning and service fees.
  • Inconsistent or incomplete observations.
  • Prices that cannot be reliably decomposed.

My suggestion: Create a derived DailyRate dataset while preserving the original PriceHistory observations. Assign a confidence level to estimated nightly rates rather than assuming every price can be explained perfectly.

B. Competitor comparison

I would let an owner select their villa and see comparable properties within the same resort.

Importantly, compare like with like. A beachfront four-bedroom villa with a heated pool isn't directly comparable to an inland three-bedroom property.

C. Availability and estimated occupancy

Because you'll collect snapshots over time, you can observe when previously available dates become unavailable.

That gives you a potentially valuable occupancy indicator.

However, unavailable does not necessarily mean booked. The owner may have blocked dates for personal use, maintenance or bookings through another channel.

I would distinguish between:

  • Confirmed bookings on your own platform.
  • Dates unavailable on Airbnb.
  • Estimated booking activity inferred from changes.
  • Uncertain or missing observations.

Market these as estimated occupancy and booking signals, not verified competitor revenue.

2. Direct Booking Platform — what still needs doing

I would concentrate on six areas. You already have pieces of several of these, so the objective is to close the gaps rather than rebuild them.

A. Villa onboarding and website generation

P0 - Make it possible for a new owner to go from an Airbnb listing to a usable direct-booking website with minimal manual work.

Import or enter descriptions, photographs, facilities, bedrooms, occupancy, check-in rules, location and seasonal prices. Add a publication-readiness checklist and website preview.

 

B. Booking and availability reliability

P0 - Ensure the pricing engine handles seasonal boundaries, Saturday-to-Saturday restrictions, gap nights, cleaning fees, deposits, discounts and cancellation rules.

Test overlapping bookings, delayed calendar synchronisation, simultaneous booking requests and failed payments. Provide a booking confirmation and modification workflow.

 

C. Owner portal

P0 -  Owners should be able to update their own photographs, descriptions, rates and blocked dates, view upcoming bookings, and see enquiries and customer details.

Keep permissions restricted to their own properties, with straightforward navigation rather than a large administrative CMS.

 

D. Direct booking conversion

P0-  Add a clear booking quote, mobile-friendly date selection, visible total pricing, WhatsApp enquiry, guest reviews where legitimately available, and a simple reservation process.

Crucially, show the customer the benefit of booking directly rather than through an OTA.

 

E. Repeat-customer marketing and CRM

P1 - You already have Return Clients and discount functionality. Extend this to guest history, discount codes, repeat-booking links, targeted offers and scheduled campaigns.

Include consent/marketing preference records, unsubscribe functionality and access controls.

 

F. Owner financial reporting

P1 - Show booking income, occupancy, average daily rate, revenue per available night and estimated commission savings.

This creates a tangible financial explanation of why owners should continue using CyprusVillasDirect.

One particularly important point is calendar synchronisation. Airbnb currently states that imported calendars refresh automatically every three hours, rather than instantaneously. Your system therefore needs to handle the double-booking risk inherent in iCal synchronisation, especially if you offer instant booking.

 

3. Commercial features — potentially more important than further coding

You need a repeatable way of acquiring and retaining villa owners.

I would build a simple owner acquisition funnel:

Identify villa owners -  Target villas in Pissouri, Aphrodite Hills, Coral Bay and Polis -  Show an individual market report -  How their villa compares with similar local properties -  Offer a direct-booking website -  Demonstrate commission savings and repeat-customer benefits - Convert to paying customer

Booking commission, intelligence subscription or combined package

I'd add an internal sales CRM to track the owner, villa, location, contact status, demonstration, activation and first booking. Keep it very simple.

Potential revenue models

Direct booking

5% of bookings generated

Market Intelligence Basic - €19/month

Market Intelligence Pro -  €49/month

Combined package - 5% booking commission + €29/month

 Your previous assumption was that 100 villas might be achievable and that perhaps 20% of their bookings could migrate away from Airbnb.

The commercial question I'd test first is whether owners will pay for Market Intelligence without first receiving additional bookings. That would make it a much more attractive standalone business.

4. Infrastructure and product risks

There are several areas I'd address before investing heavily in scale.

Airbnb data access. Airbnb's current European terms prohibit unauthorised automated scraping. Your batch scraper therefore has a genuine contractual and business-continuity risk.1

Before making the entire Market Intelligence product dependent on it, evaluate licensed short-term-rental datasets or authorised integration arrangements. Providers such as AirROI advertise market and calendar data products, but coverage, reliability and commercial usage rights need validation.

 

Data integrity. Save observation timestamps, query parameters, currency, guest count, fee treatment, failures and the source of each price. Otherwise, historical price comparisons can easily be misleading.

Scalability. Move bulk acquisition into queued jobs with retries, checkpoints, request limits and monitoring. Keep historical snapshots instead of overwriting earlier observations.

Privacy and payment security. Protect guest contact records, handle consent correctly, use a payment service provider rather than storing payment-card details, and implement role-based access and audit trails. For marketing, existing-customer relationships do not automatically permit unrestricted promotional emailing.

 

5. My recommended development sequence

Given your limited development resources, this is the order I would follow.

Development priorities

Check items off as you implement them

0/12 complete

 

Phase 1 — Make the existing data useful

Daily price reconstruction

Normalise total stay quotes and identify discounts

Competitor comparison screen

Show prices for comparable villas and dates

Scrape scheduling and monitoring

Automate reliable, permitted data acquisition

Initial owner report

Produce a useful, understandable pricing report

Phase 2 — Complete the booking proposition

Villa onboarding

Import or enter a villa and publish it quickly

Booking reliability

Test pricing, payments, synchronisation and double bookings

Owner self-service

Allow owners to maintain their listings and availability

Mobile booking flow

Make guest enquiry and booking straightforward

Phase 3 — Commercialise

Owner acquisition CRM

Track prospective owners and conversion

Pricing and subscriptions

Test paid Market Intelligence plans

Guest marketing

Repeat-customer campaigns and discounts

Owner analytics

Measure bookings, revenue and commission savings

Copy checklist

6. What I would deliberately not build yet

I would postpone native mobile apps, elaborate AI chatbots, sophisticated dynamic-pricing automation, full accounting integrations, multi-country expansion and extensive property-management functionality.

You don't yet need to compete with established property-management systems feature-for-feature.

Your advantage could be a much narrower proposition: a villa owner gets a website for direct bookings, can market to their previous guests, and receives better local competitor intelligence.

I would aim for an initial pilot of 10 real villa owners in Pissouri or Aphrodite Hills. Measure how many activate their websites, whether anyone receives direct bookings, and — most importantly — whether owners find the competitor reports useful enough to pay for.

That will tell you far more about the project's prospects than adding another dozen technical features.

My strongest priority would be the Market Intelligence comparison screen. You already have much of the difficult data-collection work underway; turning those observations into an immediately useful report is the shortest path to determining whether the intelligence product has commercial value.

Pending
1.13

Confirmation email

  • Villa address is incorrect - needs to be villa specific
  • Contact tel number is incorrect  - needs to be villa specific
Complete
1.14

Client-show-villa

  • Photos don't size/re-size properly and cut off heads etc
Complete
1.15

HomePage

  • Add region search to the search box 
Complete
1.16

Amenities

  • If the Amenity description is not in the Translations list, show a warning sign
Complete
1.17

CyprusVillasDirect — Market Intelligence

1. Background

We want to build a Market Intelligence feature for CyprusVillasDirect that collects pricing and availability information for holiday villas listed on Airbnb.

For example, we could collect data for villas in Pissouri and market this information to other villa owners in Pissouri, helping them understand whether they are overpricing or underpricing their properties relative to competitors.

The commercial objective is to develop a historical database that tells us:

  • What each villa is charging for different arrival dates and lengths of stay.
  • Which dates appear available or unavailable.
  • What minimum-stay restrictions appear to apply.
  • Whether discounts are being offered.
  • How prices and availability change over time.
  • How competitively each villa is priced relative to other villas.

Over time, this should allow us to estimate occupancy, identify pricing trends and compare the performance of competing properties.

Today's task is to build the collection and storage functionality, not the analytics or reporting.

2. Existing application

Villa entity

Already exists and contains:

  • villaName
  • airbnbUrl

PriceHistory entity

Already created with:

  • Villa — ManyToOne relationship
  • StartDate — proposed arrival date
  • T1Price through T30Price — total prices for stays of 1–30 nights
  • createdAt — timestamp recording when the information was collected

There is also an existing CRUD interface, including an index showing all 30 prices and a manual form.

Each collection should create a new record rather than overwrite an existing record, allowing us to track historical price changes.

No new entities or changes to existing entities are required.

3. Data collection methodology

For each villa, investigate every possible arrival date over the next six months (initially 180 days).

For each arrival date, obtain prices for stays of between 1 and 30 nights.

For example:

Villa: TheaVista
Arrival date: 1 July 2027

  • 1 night: Checkout 2 July 2027 — Price £xxx
  • 2 nights: Checkout 3 July 2027 — Price £xxx
  • 3 nights: Checkout 4 July 2027 — Price £xxx
  • And so on, up to:
  • 30 nights: Checkout 31 July 2027 — Price £xxx

The checkout date is always calculated as:  checkoutDate = startDate + numberOfNights

The proposed coverage per villa is: 180 arrival dates × 30 stay lengths = 5,400 quotes.

Some requests will not return a price because dates are unavailable, minimum-stay rules prevent booking, or another restriction applies.

Where no valid price is returned, store NULL, not zero.

A missing price does not necessarily mean the villa is occupied.

If we collect prices today and again tomorrow, both observations must be retained for historical comparison.

All prices should be collected in a consistent currency (GBP initially) and represent the total quoted price for the requested stay.

4. Implementation

Create a Symfony service named:

VillaMarketIntelligenceService

The service should accept:

  • Villa ID
  • Arrival date

The service will:

  • Load the Villa entity.
  • Check that airbnbUrl exists and an authorised pricing data source is available.
  • For the specified arrival date, request prices for stays of 1–30 nights, or obtain equivalent information in bulk if the source supports it.
  • Parse and validate the returned information.
  • Create a new PriceHistory record with the Villa, StartDate and collection timestamp.
  • Save the prices in T1Price through T30Price.
  • Record errors in the application logs without aborting the complete collection.

Batch collection

Also provide a method that accepts:

  • Villa ID
  • Start date
  • Number of arrival dates to investigate (default 180)

This should call the single-arrival-date method for each date.

For 180 arrival dates, the process should create 180 PriceHistory records per villa, each containing up to 30 prices.

Use a permitted data source, respect its rate limits and avoid unnecessary requests where equivalent bulk pricing information is available.

5. Testing

Initially, test the functionality on one villa and one arrival date.

Verify that:

  • The correct Airbnb listing is identified.
  • The 30 checkout dates are calculated correctly.
  • Valid returned prices are saved against the correct T1Price–T30Price fields.
  • Missing prices are saved as NULL.
  • The existing collection timestamp is populated.
  • Running the same collection twice creates two separate historical records.
  • An individual quote failure does not stop the other quotes being collected.

Once this works, test collecting several arrival dates for the same villa.

6. Scope for today

Build:

  • VillaMarketIntelligenceService.
  • Pricing collection for 1–30 nights.
  • Storage of collected prices in the existing PriceHistory entity.
  • Historical snapshots without overwriting previous collections.
  • Batch collection across multiple arrival dates.
  • Basic error handling and testing.

Do not build today:

  • Any new entities or entity changes.
  • Competitor comparison reports.
  • Occupancy calculations.
  • Pricing recommendations.
  • Charts or dashboards.
  • Automatic scheduled collections.

The priority is to establish a reliable database of historical prices using the existing PriceHistory entity. We can develop the analytics once the underlying data collection is working.

Complete
1.18

Objective: Automatically discover and import villas from an Airbnb search results page into our existing Villa database (eg villas in Pissouri or Coral Bay).  

Example: https://www.airbnb.co.uk/s/Coral-Bay--Pegeia/homes?place_id=ChIJEe9tmjwI5xQRb4uBfixUqUc&refinement_paths%5B%5D=%2Fhomes&location_bb=Qgt6hkIBiHtCC2PYQgFrnQ%3D%3D&acp_id=t-g-ChIJEe9tmjwI5xQRb4uBfixUqUc&date_picker_type=calendar&search_type=autocomplete_click 

Search URL Input

  • Create a page where an administrator can paste an Airbnb search URL (e.g. a search for villas in Pissouri, Cyprus).
  • Add a "Discover Villas" button to initiate the process.

Scrape Airbnb Search Results

  • Open the supplied URL and extract all villas returned by the search.
  • Handle pagination/infinite scrolling to capture all available results, not just the first page.
  • For each villa, capture:
    • Airbnb listing URL (permanent URL without search dates or tracking parameters).
    • Airbnb listing ID.
    • Property title/name.
    • Maximum number of guests (sleeps X).
    • Number of bedrooms, beds and bathrooms (where available).
    • Location/area.
    • Main property image URL (if available).

Create Villa Records

  • Check whether each Airbnb listing (eg the villa's unique ID) already exists in our Villa database, using the Airbnb listing ID or canonical URL to identify duplicates.
  • If it exists, skip it (do not overwrite existing data).
  • If it does not exist, create a new Villa entity and populate the available fields, including airBnBUrl.
  • Reuse the existing Villa entity and fields wherever possible. Do not create another entity.

 

Results Summary

  • Display the number of villas discovered.
  • Number of new Villa records created.
  • Number already in the database (skipped).
  • Number of failures, with error details.

 

Other Considerations

  • The process should work for any Airbnb search URL, allowing us to discover villas in Pissouri, Aphrodite Hills, Coral Bay, Polis, etc.
  • Avoid duplicate records when the same villa appears in multiple searches.
  • Handle missing property information without failing the entire import.

Purpose: Build up our database of competing villas automatically so that our existing Market Intelligence / Price History functionality can subsequently track their prices, availability and pricing trends.

Complete
1.19

Batch Scrape

  • Create a service that has 3 inputs
    • VillaID (eg Columbia) - selected from Villas with a AirBnBUrl
    • First Start Date (e.g. 22-Oct26)
    • Number of Dates to run  (e.g. 10)
  • This will create 10 records in the database, changing the StartDate (22-Oct, 23-Oct, …. 2 Nov)
  • Run the scraper we had before 
  • …. So this will get 10 x 300 prices, saved in 10 records. 
Complete
1.20

ICS export  (AirbnbIcalSyncCommand)

  • Is this working for each villa?   Test with TheaVista?
Complete
1.21

Adding Region to the Discovery process

  • In the Discover Villas form, add a Resort dropdown (linked to the existing Resort entity). 
    • When new Villa records are created through the discovery process, automatically populate their Resort field using the selected Region.
  • This will ensure that all villas discovered in a particular search are assigned to the correct resort without requiring manual updates.
Complete
1.22

Villa Status — Replace “testingMode” field

Rename the existing testingMode field in the Villa entity to villaStatus.

The field should have three possible values:

  • Live — Villa is published on the public booking website and available for customers to browse and book.
  • Draft — Villa is being prepared for publication. It can be edited by authorised users but is not visible to customers.
  • Market Intelligence — Villa is maintained solely for competitor monitoring, Airbnb price discovery and market analysis. It is not available for booking through our platform.

Implementation requirements

  • Reuse the existing Testing Mode field if practical, renaming it to status.
  • Update the Villa form to use a dropdown with the three options above.
  • Only villas with status Live should appear on the public villa listings, search results and booking selection pages.
  • Both Draft and Market Intelligence villas must be excluded from all public booking pages.
  • All three statuses should remain visible in the admin Villa index, with a status filter and colour-coded labels:
    • Live — Green
    • Draft — Amber
    • Market Intelligence — Blue
  • New villas created through the normal admin interface should default to Draft.
  • Villas automatically imported through Airbnb Villa Discovery should default to Market Intelligence.The Market Intelligence and Price History tools should be able to access villas of any status, provided they have a valid Airbnb URL.
  • Allow administrators to change a villa's status at any time, including promoting a Market Intelligence villa to Draft or Live.
  • Migrate existing Testing Mode values appropriately, ensuring no villas are inadvertently published or hidden.

Important: Villa Status determines whether a villa is displayed publicly. It should not restrict its inclusion in market intelligence reporting or price discovery.

Complete
1.23

Villa screen

  • When clicking on the Previous/Next month, the screen jumps down so you can't read the full page
Complete
1.24

Multi-language handling

  • Handling of dates in availability calendar when changing to GR
  • Refreshing the page reverts to English, if not logged in.  A problem in ATS not CDV specfically
Complete
1.25

Batch Scrape — Add "Scrape All Villas" Button

The existing Batch Scrape functionality is complete and working. I would like to extend it to support scraping multiple villas in a single operation.

1. Existing functionality (no changes)

Keep the current Batch Scrape option, which accepts:

  • Villa ID (selected from villas with an Airbnb URL)
  • First Start Date (e.g. 22-Oct-2026)
  • Number of Dates (e.g. 10)

This runs the existing scraper and creates one PriceHistory record per start date for the selected villa.

2. New functionality — Scrape All Villas

Add a second button labelled "Scrape All Villas".

This should use the same First Start Date and Number of Dates inputs, but automatically run the existing Batch Scrape process for every villa that meets both conditions:

  • Villa Status is Live or Market Intelligence.
  • Villa has a valid Airbnb URL.

Villas marked Draft should be excluded.

3. Processing

  • Reuse the existing Batch Scrape service rather than duplicating the scraping logic.
  • Process each qualifying villa using the same date range.
  • Save the resulting PriceHistory records against the correct Villa.
  • One villa failing should not prevent the remaining villas from being processed.
  • Display a summary showing the number of villas processed, PriceHistory records created and any failures.

4. Example

If there are 100 qualifying villas and the Number of Dates is set to 10:

  • 100 villas × 10 start dates = 1,000 PriceHistory records.
  • Each record contains the existing T+1 to T+30 price observations.
  • Total: up to 30,000 price observations.

5. Additional considerations

As this could involve thousands of Airbnb requests, the process should ideally run in the background using a Symfony Messenger queue or equivalent, rather than within a single HTTP request?

The interface should display progress and prevent accidentally launching the same batch multiple times.

Complete
2 ATS Template #: 210
2.01

Bat file

  • Include in the bat file that will copy the Language-Icon files
Blocked
2.01

Contact form

  • Fails to create a Website contact anymore
Complete
2.01

Bat file to update all projects at once

  • Assumes that each project is saved in c:\dev
Pending
2.02

Roles entity

  • Create a ranking of roles. See if you can mimic the hierarchy. 
    • ie Create a list of other roles that are granted by association
Blocked
2.02

Contact form

  • No longer saving a record in Website Contacts
Complete
2.02

Header

  • Include image in header. Like Olivios
Pending
2.03

CMS Photo

  • Default the rotate to zero
  • When editing, if it was a Product it reverts to Static upon opening
  • If photo.photo is blank, it should be ignored in the controller (displaying product.html.twig)
Complete
2.03

Backup plan

  • Can the live server copy the database to c:\dev every [x] hours.  Controlled in the settings
Blocked
2.03

Cms copy

  • Ability to be able to add a CmsCopy and insert it as desired - effectively a re-number button 
Pending
2.04

OfficeAddress

  • Why doesn't it occupy full page, especially on mobile?
Complete
2.04

Payment link

Set up a link to Stripe or similar.  Be able to copy to other projects

  • Payment entity linked to the User
  • Account at Stripe (use nurse_stephen@hotmail.com)
Blocked
2.04

User

  • Button when no email/mobile to ask for via WhatsApp or email respectfully. 
  • Show last login and or no address or gps. 
Pending
2.05

SQL download

  • Learn how to import into local
Complete
2.05

Homepage on iPhone screen

  • When one adds the URL link to a site on your iPhone, it would be great if the icon on the homepages had some sort of icon
  • Ability to resend the homescreen
  • Waze button from map directions (check if works from GPS or Address)
Pending
2.06

HomePage

  • Allow multi-selections in the Contact Us form
  • Add Product-include in Contact form field

 

Complete
2.06

Product/Sub Product

  • A way to control the URL for Interests
Pending
2.07

Useful files

  • E-mail functionality doesn't work
  • Edit issue
Complete
2.07

CMS

  • Ability to click to the point on the page 
  • SEO optimisation

Business Contacts

  • Check count

Translation export

  • Finish export of Translation text for upload into ChatGPT and import into Translations

Stripe integration

Pending
2.08

User

  • Reset passwords etc
Complete
2.08

Contact form responses

  • Link permanently the record  in Translation with the record in Company Details (ie avoid them getting out of sync)
Pending
2.09

Photos

  • Header Link should go to the Show By Location if sole location
Complete
2.09

WeatherService still active and causing a deprecation

  • [2025-02-07T12:25:03.392918+00:00] deprecation.INFO: Deprecated: Creation of dynamic property App\Services\WeatherService::$companyDetailsRepository is deprecated {"exception":"[object] (ErrorException(code: 0): Deprecated: Creation of dynamic property App\\Services\\WeatherService::$companyDetailsRepository is deprecated at /var/www/html/atstemplate2/src/Services/WeatherService.php:111)"} []
  • ubuntu@vps-90142977:/var/www/html/atstemplate2$ tail -n 100 var/log/dev.log
Pending
2.10

Live server set up

  • Automate the process to give read/write access to the public/administration
    • sudo chmod -R 775 /var/www/html/stephennurse/public/administration/Attachments/
    • sudo chown -R www-data:www-data /var/www/html/stephennurse/public/administration/Attachments/
  • Write a batch file that will copy the Map-Icon and Language-Icon files,  to all the projects (or have them uploaded in the git process)
Pending
2.10

CMS

  • Home Page.  if the flag for Photos only is not checked and there is no CMS page Static-Home, then show an error message
Complete
2.11

Users

  • Link the list of fields viewable to the CompanyDetails settings
    • Home Address
    • Business Address
    • Personal Details
    • Job Details
Complete
2.12

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
2.13

Create a Help entity

  • Ability to show video of implementing each function
Complete
2.14

CMS Copy

  • Headlings and Titles in CMS_Copy should be be hidden unless Ranking ==1
  • Default Ranking =1 for first one and 2 thereafter
Complete
2.15

Product List

  • Button to make Active/Inactive from the Index
  • Buttons to Change the Ranking and Renumber
Complete
2.16

Translations

  • Create import/export buttons for the translations
  • Replace records with same English
Complete
2.17

Business Contacts

  • Index:  Need to sort by the ranking of the Business Types
  • In Business Contact form
    • Java-script to hide the First/Last Name if the BusinessOrPerson= “Business”.   if Person selected, show both
    • Add GPS location button that picks current location.   Activate from the view too. 
  • When deleting a business contact, cascade to the Referrals log
Complete
2.18

CMS Photos

  • Movie files in Interests/Products or Home page don't seem to size correctly
Complete
2.19

Facebook Reviews

  • List of users : FindByRole function should have up to 3 roles 
  • Include a setting for limit review history (eg 3 months), and show/hide the reviews according to that limit
  • Import Reviews needs to find the User and the Facebook Group from the entity
Complete
2.20

Registration

  • Settings.   Have a flag for enable registrations
  • Email templates:
    • Registration - Thank you registering and has a verification link to confirm
    • Referral 
  • Display QR code on home page
Complete
2.21

ATS Template

  • 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
2.22

Map Icons

  • Button to delete icons and hide/show the form field as appropriate
Complete
2.23

User

  • Work out a way to share some common features of the User entity but allowing for adaptions for each different project
  • ChatGPT:  I am building about 10 different websites that all work on Symfony/PHP.  They will all share the same foundations or basic architecture (basic USER handling, a CMS, and other standard features) and any changes in one are updated across all by copying the Entity, Controller, Form, Repository and Templates.  The each site will have some specific code unique to each site.   The problem I have is that the USER entity needs to be slightly different for each site, so I can't copy those across.  How can I maintain consistency and the uniqueness.  My thought was to split the user entity in two and embed the second (different) USER2 contents within the USER form.  Any suggestions
Complete
2.24

Company Details 

  • Boolean flag to show/hide Contact Details in the Headers
  • Other flags to hide/show other functionality from the Dashboard 
    • Weather, Facebook groups, Business contacts, Instructions, Competitors.  
Complete
2.25

Company Details

  • Need to make email and Default password mandatory, if using the contact form. 
Complete
2.26

Referrals log

  • Date Time function
Complete
2.27

Company Details

  • Index view - The i icon for Directions doesn't slice or raw
  • Weather -  Fails with GMT as time zone
  • Map link field - increase height
Complete
2.28

Photos

  • In the CountService, for the CountPrivateLocations, don't just count those Private locations, but those where the user has access to
Complete
2.29

HomePage (Photos only)

  • Closer together
Complete
2.30

ATS Company Details Show

  • Fix slider
  • hide facebook months and registration email if deselected 
Complete
2.31

Services.yaml

  • The only directory that doesn't work is the favicons_directory and mapicons_directory
    • However it works in the CompanyDetailsController, it only fails to work in twig (company-details-index,  QR-homepage, base.html)   
    • In each of those twigs, they don't accept other directories from the service.yaml   and favicon_directory works in other twigs
Complete
2.32

Email server

  • Emails failing in many projects
Complete
2.33

Home page (photos only)

  • Looks terrible on Ipad Pro 
    • Looks ok on iPad Mini
Complete
2.34
  • Add useful contacts – copy from Stephen-nurse or Immigration
  • Include a map that shows the location of each restaurant/hotel etc
  • Restaurant entity to include opening times (for on and off peak season)
  • Menu entity
    • Linked to restaurants
  • Add all to the copy batch file
Complete
2.35

User

  • Add photo, which should be part of personal details
  • Improve views
Complete
2.36

Business Contacts

  • Counter fix.  Don't display Business Types if Counter =0
Complete
2.37

Products

  • CkEditor in Products
Complete
2.38

Languages

  • Add a link on the Active/Inactive to turn off/off instantly
  • Add a ranking number to control the order of the flags in the dropdown
  • Import feature to upload all the countries.  Delete all

 

Complete
2.39

Photo Locations

  • New Photo Location creates an error
Complete
2.40

Mobile view needs to be improved

  • Dashboard
  • Company Details
    • Change from a table to a single record to display across whole page (Show)
      • Show function doesn't work as is
  • CMS_Copy - restrict content 
  • CMS_Photo - restrict content 
Complete
2.41

User

  • Reset password doesn't work
Complete
2.42

Website contacts

  • How do I see what Product they are interested in?
Complete
2.43

Security

  • Email verification for New users
Complete
2.44

Interests/Products

  • In the hyperlink in the Products/Interests entity - in the index correct for https or www to launch even if lazily entered.   Same for business contacts
Complete
2.45

CMS Copy

  • Can't save Edits
  • Increase height of the content box
  • Define different page layout formats and have the CMS copy be applied to that format
Complete
2.46

Login Direction

  • Doesn't seem to do anything anymore
Complete
2.47

Logout time

  • How do I control the time til the systems logs you out?
Complete
2.48

User Log

  • Edit function error
Complete
2.49

Backdoor

Doesn't work: Password Encoder error

Complete
2.50

Products

  • Notes field should be better positioned (on the right, col-8) and be editable with CKEditor.
  • As you hover over the Links for the Products in the menu it should show you the Notes
Complete
2.51

Website contacts

  • Ordering of products according to ranking
  • Similarly in email
Complete
2.52

Weather

  • Index - Link to the live google weather page doesn't find the location specfied
  • Create a daily chron job
Complete
2.53

Edit the bat file to add the new project specific inflation 

Complete
2.54

Product list (header)

  • If there is only one product in the ProductList, then it should become the Header
  • Same for SubProducts

HomePage Contact Form

  • Still shows the DateTime sent.
  • Phone number should be optional

Workflow

  • Auto registration

 

Complete
2.55

Facebook Groups and Products

  • Not sorting
Complete
2.56

Header & Footer

  • Product list should be sorted by Ranking number 
Complete
2.57

Instructions

  • Import Media file
  • Display media file
  • And launch
Complete
2.58

QR page

  • Look and feel on full and small screen
Complete
2.59

Project specific roles maintain in settings

  • Create an entity to define the roles available in the project 
  • Also in the User form, be able to control which fields are active as a function of the role
Complete
2.60

Users

  • Edit User fails because
    • Password is not visible
    • If the user has 2 or more than 3 names in the fullName 
Complete
2.61

Business contacts

  • New contact: Sort categories alphabetically
  • FIle and photo field show in edit mode when not empty.  Copy JS in Edit for CompanyDetails
  • Index: Desktop class doesn’t work
  • Count contacts where maplocation is not empty service

 

Git fails

  • Copy to Whistles and Bells
Complete
2.62

Company Details

  • Include Contact Details or not in the headers
Complete
2.63

Server clean-up

  • Button to clean up the attachments for all directories
  • Button to import the mapicon files 
Complete
2.64

CMS Copy

  • When switching between Static Page and Product, deleting the field for Static page/Product respectively
  • New CMS: Product list to be ordered by ranking
Complete
2.65

Maps

To calculate the optimal zoom level for a Google Map that just fits all of your venues without scrolling, you need to determine the bounding box that encompasses all the venue locations. Based on the bounding box, you can compute the zoom level that ensures all the venues are visible. Here’s how you can approach this:

Steps to Calculate Optimal Zoom Level

Find the bounding box:
For all your venues, compute the min and max latitudes and min and max longitudes:

  • minLat = minimum latitude of all venues
  • maxLat = maximum latitude of all venues
  • minLng = minimum longitude of all venues
  • maxLng = maximum longitude of all venues

Calculate the geographical range:

  • The latitude range is:
    latRange = maxLat - minLat
  • The longitude range is:
    lngRange = maxLng - minLng

Calculate the center of the map:
The center of the map is simply the average of the latitudes and longitudes:

  • centerLat = (maxLat + minLat) / 2
  • centerLng = (maxLng + minLng) / 2

Calculate the diagonal distance: The diagonal distance between the top-left and bottom-right corners of the bounding box is critical for determining the zoom level. You can use the Haversine formula or a simplified approximation to compute the distance.

The Haversine formula is:

  1. a = sin²(Δφ/2) + cos(φ1) ⋅ cos(φ2) ⋅ sin²(Δλ/2) c = 2 ⋅ atan2(√a, √(1−a)) d = R ⋅ c

Where:

  • Δφ = difference in latitude (in radians)
  • Δλ = difference in longitude (in radians)
  • φ1, φ2 = latitude values in radians
  • R = radius of the Earth (mean radius = 6,371 km)
  • d = the distance between the two points (diagonal distance)

Estimate zoom level:
Based on the diagonal distance, Google Maps provides a rough way to estimate the zoom level, which is typically from 0 (world) to 21 (street level). A common approach is to map the diagonal distance to zoom levels using a logarithmic scale, but this depends on the map's current bounds and the projection used. Generally, a simplified formula is:

  1. zoomLevel = maxZoom - log(d / maxDistance) * scaleFactor
    • maxZoom = the maximum zoom level allowed (usually 21)
    • maxDistance = the maximum diagonal distance you want to show (e.g., distance across your entire map's viewable range)
    • scaleFactor adjusts for the desired map fit

Using Google Maps API to Simplify:

You can simplify this calculation by using the Google Maps API, which has a method to fit markers within a viewport using fitBounds():

// Assuming you have an array of venue locations in {lat, lng} format: const locations = [  {lat: 40.748817, lng: -73.985428},  {lat: 40.748217, lng: -73.985128},  // Add other venues here ]; // Create a bounds object const bounds = new google.maps.LatLngBounds(); // Extend bounds to include each venue locations.forEach(location => {  bounds.extend(new google.maps.LatLng(location.lat, location.lng)); }); // Create a map with the bounds set const map = new google.maps.Map(document.getElementById("map"), {  center: bounds.getCenter(),  // Center map at the average of the venues  zoom: 15  // You can let Google automatically choose the zoom or set a default }); // Fit map to the bounds map.fitBounds(bounds);

This method will automatically adjust the zoom level and center based on your venues, ensuring all the locations are visible without scrolling. You don't need to manually calculate the zoom level if you're using this approach.

Complete
2.66

HomePage (Photos) and Interests Page

  • If the hyperlink is blank it should do anything when clicked.
Complete
2.67

CMS Photo

  • When editing, if the file is loaded, don't show the input box
  • Make the unique identifier just three letters
  • Increase the size of the photo in the Edit field much larger
  • Make the Hyperlink adaptable to include rhe https// and www 
  • Improve the title on the Edit page
Complete
2.68

Bugs in live systems vs ATSTemplate

  • MapIcon, Business Types and Business Contacts imports don't work on stephen-nurse.com
  • Winter Cash Cup: Upgrade from ATS didn't work
Complete
2.69

Users

  • VCF export not built
  • Show each user's log count, counting the number of times the number has logged in. 
    • Hover to show the date/time of the last [5] view
Complete
2.70

Company Details

  • Doesn't save the Driving Instructions. Can't save edits
  • Wrap google map link
Complete
2.71

Website contacts

  • Add a delete all button
  • Include the phoneChceker into the index view
Complete
2.72

Project specific landing page post login for different access rights

Complete
2.73

Have in the Settings a flag for if site is still in testing mode.

  • If in Testing mode, then:
    • Login screen contains the test login buttons
Complete
2.74

Photo gallery

  • Don't open the photo-locations page unless an Admin and there are at least [15] different locations
  • Instead show the name (and date and # photos) of each location in the dropdown.  Listed either alphabetically or by date (make that a control in the Settings)
  • Then have the private groups listed, in red
Complete
2.75

Photos

  • Individual photo doesn't resize well when viewed by a mobile
Complete
2.76

HomePage - All photos

  • The photos don't have the hyerlink or the title pop-up working

 

Complete
2.77

Header

  • Useful links show/hide doesn't seem to be in all projects
Complete
2.78

Multi-lingual

  • Make the titles in Indexes language-specific
Complete
2.79

Competitors

  • Improve field names
Complete
2.80

User Import

  • No longer works as the SetRoles line needs to reference the Roles entity
Complete
2.81

ROLES

  • Doesn't seem to work

User

  • Photo field showing when populated.   
Complete
2.82

Photos

  • E-mail fails
  • Handling of favourites

 

Complete
2.83

User log

  • Build out a more comprehensive user tracking log.  Not just logins .  Google analytics
Complete
2.84

Business contacts

  • The File and Photo fields show when not empty.  Copy JS found in Company Details Edit form
Complete
2.85

Header

  • Photo Gallery and Photos appear twice in the Header if logged in as ADMIN
Complete
2.86

Useful Articles

  • Create a “Useful articles page” with some helpful topics.    
Complete
2.87

New functionality: Import from Outlook

  • I am building a system to manage client bookings and although i would prefer that clients book online directly, some do email me.  I would like to build the ability to import the content, subject line and sender and date from my email system (eg Outlook) email into a record in the database
  • My plans is that emails that need to be brought into the booking system would be moved to a specific directory (eg “Upload to system”) and these are the emails that the booking system would see and extract the data from.  The booking system would need access to the email 
  • I am using Symfony/PHP - how can i build this?
Complete
2.88

Delete from phphmyadmin:

  • aphroditetenniscup
  • chartwellcourt
  • irishpassport (dev name is irishpassports)
  • parknride
  • visitweimar
Complete
2.89

Multi-currency flags don't work

Complete
2.90

Instructions

  • Control in Company Details to include a link to instructions functionality.   
  • Show in dashboard if selected. 
  • Include in Header display selections

 

Contacts details (Company Details settings)

  • Flag to include business card or not 
    • Business card to include only the information permissioned 
  • Perhaps include email as  

 

Complete
2.91

Instructions page

  • Nesting problem
Complete
2.92

User

  • Default language - order by ranking
Complete
2.93

Workflow from Website Contact to User

  • The objective here is to automate the process of converting a Website Inquiry into a User
  • Form received from client (in Website contacts).  
  • To do
    • Allow multiple entries on the checklist
    • Add field in Products for “Include in Contact Form” and references in the Contact Us form
    • Add input in CompanyDetails as to whether to receive an alert with a new Inquiry
    • And ‘Email’ text in Product form
  • Office_Staff decides to accept a Website Inquiry or not (perhaps automate this). 
    • Converting to User creates a New User with the credentials provided in the Website Inquiry. 
    • Sends a generic email
  •  
Complete
2.94

Helpful guides

  • Seems to take Products as well as Helpful Guides.   Do I need the checkbox if picking Helpful Gudes?
Complete
2.95

Useful links to pages

  • Create a page (thinking of gwenny) that contains a list of topics. 
  • In Product, create a boolean “includeInHelpfulGuides” which brings the Products into the Guide
Complete
2.96

Business Contacts

  • Use the White-space:No wrap and in-line style settings to make sure the names line up and the map icon appears on the same line as address
Complete
2.97

User photo 

  • Delete doesnt work
Complete
2.98

Photos

  • Handling HEIC photos
Complete
Complete
3.00

CMS export.

  • Allow export of the actual copy to enable upload into ChatGPT etc
Complete
3.01

Business contacts

  • Buttons at the top to be sorted in ranking order not alphabetically (SN to do)
Complete
3.02

CMS Photo

  • If the English text (for the title) is not translated into all the available languages show a warning sign
Complete
3.03

User - Email to UserGroups

  • Email sending error
Complete
3.04

Business Contacts

  • Add Town/Region
  • Show distance from home venue
  • Add all emergency and health contacts
Complete
3.05

User Import

  • Make flexible so that it looks at the title of the column to determine the field to populate
Complete
3.06

User

  • Groups (eg London. Cyprus.  Tennis). And messages by group.  Send all or by one
Complete
3.07

CMS formatting

In Techarete the CMS edit does not increase the height of the edit box

Complete
3.08

Office directions

  • Ensure is multi-lingual
  • Waze icon
Complete
3.09

User import

  • Doesn't seem to work
Complete
3.10


Deprecated: Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter::__construct(): Implicitly marking parameter $registry as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/Request/ParamConverter/DoctrineParamConverter.php on line 46

Deprecated: Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter::__construct(): Implicitly marking parameter $expressionLanguage as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/Request/ParamConverter/DoctrineParamConverter.php on line 46

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::__construct(): Implicitly marking parameter $twig as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/TemplateListener.php on line 39

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::__construct(): Implicitly marking parameter $language as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/SecurityListener.php on line 43

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::__construct(): Implicitly marking parameter $trustResolver as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/SecurityListener.php on line 43

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::__construct(): Implicitly marking parameter $roleHierarchy as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/SecurityListener.php on line 43

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::__construct(): Implicitly marking parameter $tokenStorage as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/SecurityListener.php on line 43

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::__construct(): Implicitly marking parameter $authChecker as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/SecurityListener.php on line 43

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::__construct(): Implicitly marking parameter $logger as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/SecurityListener.php on line 43

Deprecated: Sensio\Bundle\FrameworkExtraBundle\EventListener\IsGrantedListener::__construct(): Implicitly marking parameter $authChecker as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/EventListener/IsGrantedListener.php on line 33

Deprecated: Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter::__construct(): Implicitly marking parameter $class as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/Configuration/ParamConverter.php on line 61

Deprecated: Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter::__construct(): Implicitly marking parameter $converter as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/linkedinexport/vendor/sensio/framework-extra-bundle/src/Configuration/ParamConverter.php on line 61

Complete
3.11

Page visits. 

  • Can we remove certain IP addresses (ie me) to avoid overwhelming the count
  • What about adding google analytics to show original of links
Complete
3.12

Login Direction

  • Table too wide

 

Complete
3.13

Photos

  • Don't change the filename upon upload
Complete
3.14

CMS Copy

  • Sort the CMSCopy by Product ranking
Complete
3.15

File Attachments

  • The delete file button doesn't work and the file input is viewable when populated
Complete
3.16

CMS Copy/Format

  • I have placeholder field in all the CMS_Copy records called CMS_Format.  It includes the different tricks to format the page (Accordian etc).   
  • Can you wire them up and make them work so we can have a different formatted page?
Complete
3.17

I want to improve the look and feel of our websites.  My plan would be to build a set of different CMS type inputs (initially in ATS) and then rollout to all all projects.

At the moment, I only have the ability to split the pages into “with photo” or “no photo”,  The photo is on the right and I can include a carousel if I add >1 photo.  But there are lots of other things that I can't do…

For example, have a look at this site for example:   https://www.stgeorges.ch/school-life/school-transport and specifically at this subpage:   https://stgeorges-enrichment.lovable.app/

Things we can;t do:

  • Grid of links under Enrichment Activities or
  • Carousel under the World Class Facilities. 

 

In ATS

I started thinkg about this in the past, but never finished it. 

I defined a set of ‘formats’ to apply to each CMS page.  The list is in the entity “CMSPageFormats”  which is what I was going to employ to generate the various features, using diffent twigs. 

At the moment, they all do the same.  So I think I will need to create blocks that I can use the standard page, then a carousel, then a xxx etc.   But each of these may need us to define info other than a single text box as currently designed (eg how many boxes, what is the text and link in each box)….        

Have a think about this and then let's discuss tomorrow

 

Complete
3.18

Homepage link

  • Include a icon for the jump to the homepage
Complete
3.19

Homepage

  • Skinny up the Contact us block.  Looks silly so wide.
Complete
3.20

Product

  • In the Product Index, check to see if there is an entry in the Translation entity for the Product.  If not, add a button to create it
  • How the Product translation in a tool-tip in the Index twig
Complete
3.21

Translation

  • Dynamic languages in translation entity 
Complete
3.22

Company Details

  • Boolean checkbox can't not be checked
Complete
3.23

Products Index

  • Main/Sub label should follow the label in the CompanyDetails 
Complete
3.24

CMS

  • Launching the photo into view mode doesn't work
Complete
3.25

Products

  • Re-numbering/re-ordering button
Complete
3.26

SQL export

  • Is the export SQL database functionality working – this will help us with testing if we can make the dev versions more similar to live to data purposes
Complete
3.27

Weather

  • Weather refresh is only every 3 hours
Complete
3.28

Company details

  • The show pages is not device responsive.  Unreadable in mobile
Complete
3.29

User

  • Languages spoken
Complete
3.30

Company Details

  • In the form, The “delete VCF photo” button deletes the QR code not the VCF photo.  
    • There is no controller for delete VCF phoot.  
    • Copy the QR code delete button  (line 240 in the controller) and link to the button in the twig 
  • The WeatherLastScraped field is not well shown in the CompanyDetails edit twig. 
Complete
3.31

User

  • Create fields for the GPSLocations for both HomeAddress and BusinessAddress
    • businessGpsLongitude
    • businessGpsLatitude
    • homeGpsLongitude
    • homeGpsLatitude
      • DONE
  • Include buttons to take current location and populate either Home or Business gpsLocations  TODO
  • Improve the user/show twig (compare to business card show) and include a map with both the addresses on them  DONE
  • Hide Business or Home buttons depending on settings in CompanyDetails DONE
  • In User index include the red map-marker icon if the gps longitude/latitude are present (like business contacts) DONE
  • Include in CompanyDetails, in the User Profile,  a flag to include GPS (one flag for Home, one for Business) DONE
Complete
3.32

Website contacts

  • Capture the products asked about. 
  • In the reply it should include a list of products asks for and their description 

Team bio

  • Button on user to show team members
Complete
3.33

Languages

  • Confirm you can delete an icon from within a record
  • Save file name in lowercase upon saving or editing
Complete
3.34

User log

  • Create a user log for pages visited even if not logged in
Complete
3.35

Services Consolidator

  • Let's write a quick summary of what each service does and where it is used.  
  • And then merge some more of the ATS services to make the list easier in a way that is logical:
  • Create a Help.doc saved in Services which contains the info we need about each one

 

  • Suggested consolidations:

 

ATS_UtilitiesService

  • AgeService
  • CheckIfUserService
  • EmailFetcher
  • ICAL
  • HeicImageService
  • LanguagesSerivce
  • LogService
  • PageVisitStatsService
  • RoleService
  • StringReplaceService
  • TranslastionService
  • WeatherService

 

ATS_CountService (all 10)

  • CountAllocatedWebsites (what does this do?)
  • CountBusinessContacReferrealsService
  • …..
  • CountUserLogsService

 

ATS_PhoneService:

  • FakesWhatsAppValidator[Service]
  • PhoneAnalyser
  • PhoneNumberValidator
  • WhatsAppValidator
Complete
3.36

CMS Photo

  • Add an input field in the entity that puts a title on the photo (or a flag to move it from a tooltip to a title)
Complete
3.37

Multi-lingual support

  • Registration e-mails
  • Products in Menu
  • Menu titles
Complete
3.38

Useful URLs

  • Security issues.  Non admin can't see any of the records. Inconsistent with being able to see the URL.
  • I think control it through the CompanyDetails menu and hide the login and passwords.  Not secure info
Complete
3.39

User

  • The display parameters in CompanyDetails no longer seem to trigger different displays in the User form
Complete
3.40

CSS

  • Seem to have lost some CSS (eg the formatting of CKeditor)
Complete
3.41

Delete ChartwellCourt and VisitWeimar

  • I have deleted the project on C,  and the git repositories
  • Please delete anything else?
Complete
3.42

Security/Login

  • I can login with a new user if their access is Admin or Super_Admin,   but not User (ROLE_USER)
Complete
3.43

Photos

  • If the photo file is missing, you can't delete the record
Complete
3.44

Clear all attachments

  • Button to clear public directory - assume that the directories will be made as files are saved for the first time?
Complete
3.45

 2 Jan 2026 update

1) Please pull latest changes (ATSTemplate)

Please git pull on ATSTemplate. I made minor changes overnight (not related to Services consolidation):

  • Fix 1 bug in CompanyDetails
  • Fix 1 bug in HomeController

2) Testing of Services consolidation

I tested the latest consolidation of Services in ATSTemplate and everything appeared to work.

I then propagated the changes using the BAT file (attached) into:

  • techarete
  • linkedinexport

I updated the BAT file to delete duplicate/legacy versions of some Services that have been renamed over time (mainly the “Import…” related ones). The aim is that simple projects (e.g., techarete, whistlesandbells) don’t accumulate superfluous files after running the script.

Post-update testing

  • techarete (closest to “pure ATS”, minimal bespoke code): worked fine after composer dump-autoload.
  • linkedinexport: initially failed until I restored these files (so they are still required somewhere in that project):
    • PhoneAnalyzer.php
    • CountPhoneLocationsService.php
    • CountUserLogsService.php

Request: Please help identify where linkedinexport still depends on these (direct usage, service wiring, or indirect dependency), and whether we should:

  • keep them in ATSUtilities, or
  • keep them project-local to linkedinexport, or
  • refactor linkedinexport to remove dependency.

3) Next Services to consolidate into ATSUtilities

Please add these currently unconsolidated Services into ATSUtilities (with the usual wiring/config updates as needed):

  • BusinessContactVCFExport
  • CompanyDetailsService
  • FindUser
  • PhotoAuthorsByLocationService
  • ProductService
  • TranslationWorkerService

4) Repo structure tidy-up ideas (seeking your recommendation)

I’m considering two structural changes:

  • Controllers: create src/Controller/ATS/ (or similar) and move ATS template controllers into it.
  • Templates: create templates/ATS/ and move ATS template templates into it.

Please advise whether either change causes issues in Symfony, and if so what’s the cleanest way to do it. My expectation:

Controllers move should be low-risk (assuming routing attributes / service discovery still work).

Templates move will require updating template references (render(), extends, include, etc.) and should be done systematically to avoid broken links.

My view on the sub-directory changes:

A) Controllers under a sub-directory: generally safe

Moving controllers from src/Controller to src/Controller/ATS is normally fine in Symfony provided you are using attribute routes (you are) and Composer autoloading covers src/.  Symfony will still discover the classes.

Common “gotchas”:

Namespace must match folder path (e.g., namespace App\Controller\ATS;), and any references/imports updated.

If you have any config that targets controller paths explicitly (rare, but possible), it may need updating. Examples:

  • services.yaml resource patterns for autowire/autoconfigure (often src/ so it’s fine)
  • security access control rules relying on controller class names (uncommon)

Route names and paths are unaffected as long as the attributes remain unchanged.

Net: this is mostly an organisational refactor; low functional risk.

B) Templates under a sub-directory: also safe, but requires systematic reference updates

Moving templates under templates/ATS/ won’t “break Symfony” per se, but you must update every template reference that uses the old path.

So, do you think this is a good idea, or will it take too long?

Complete
3.46

Team Bio inclusion

  • Think of a way to not just have ROLE_ADMIN in Team Bio
  • Flag in User, only visible to ROLE_ADMIN?
Complete
3.47

Chrome vs Firefox

  • The login script doesn't work in Chrome
Complete
3.48

vCard export (Team Bio)

  • Can't handle a birthday (string expected)
  • Check all fields in user and business contacts
Complete
3.49

SQL Upload into Live

  • How do I upload my local sql into the live server?  TennisFInder.sql
Complete
3.50

Bugs

  • CMS_photo view requires login, so errors for non users
  • The secret wizard (pending reach-outs) is viewable by all
Complete
3.51

Footer

  • Don't display Product title if count = 0
Complete
3.52

Autologin

  • Check auto-login is working.
  • Pause for bookmark
Complete
3.53

Database download

  • Test the download database required to copy the live database to dev
Complete
3.54

CSS 

  • Should these files be copied from the ATS Template?
Complete
3.55

Dynamic Header

  • Review the include/exclude logic
Complete
3.56

Competitor

  • Get Location buttons don't work in Index or Show
Complete
3.57

Services consolidation

  • Does it make sense to consolidate all the ImportServices into a single one?
  • And the Count Services into a single Service?
  • Does it make sense to rename the Services with a ATS prefix?
Complete
3.58

Weather

  • Don't refresh with a cron, but check the last time it was refreshed.   Store in settings.  and if longer than x then refresh automatically upon the index being called

 

Complete
3.59

Contact Box on HomePage

  • if there is only 1 active product, don't show the checkbox
  • Include in the CompanyDetails a checkbox to ask whether to include the tel number and or the Message question in the contact us box
Complete
3.60

Languages

  • Can't edit any record.
Complete
3.61

Company details

  • Change the vCard download to the posh one 
Complete
3.62

Page Visits

  • Check that this is working ok
  • Data at top of page should be hashed out
  • Ability to reset the Homepage
  • Colour code dates
    • Weekday, weekdates
Complete
3.63

Header

  • Include a checkbox that says include Photo in the Title when not logged in. 
Complete
3.64

Header

  • Photo header appears if there are no photos stored
Complete
3.65

Users

  • I introduced sorting for all the columns (ie post pagination functionality) for the Users index.   Curiously, some work but not all.  

 

Business contacts

  • Tried to insert the PhoneAnalyzer into Business Contacts, but it fails
Complete
3.66

Business contacts

  • Handle re-imports well
  • if a field is updated in import then import it, otherwise don't change
Complete
3.67

Helpful files 

  • View of Useful URLs on the mobile
  • Email fails with one file
  • Email fails when more than one file (different error)
Complete
3.68

User Indexes

  • Dynamic control of sorting in Index 
Complete
3.69

Business Contacts and Competitors

  • The export function should mirror the import and add back in the Company name accordingly
Complete
3.70

Business contacts

  • Map not working.  Creates an error 
    • Add a button for each Business Type.
  • Improve the Admin View - Show GPS Long/Lat to 4 dps
  • Index:  Sort by the ranking of the Business Types
  • In Business Contact form
    • GPS button doesn't work from within the record
  • In Business Contacts index, fix the count function.  Don't show empty Type to the Users (only to Admin)
Complete
3.71

Business contacts

  • In Business Contacts index, fix the count function.  Don't show empty Type to the Users (only to Admin)
  • Map
    • Buttons to restrict to one business type don't work.
Complete
3.72

CMS Copy and Photo overlap

  • Increase size of text box
  • Decide to split the screen as a function of the text ranking
  • Check what happens to Accordian in CMS Format Styles?
  • If non GB text is blank, return the GB text prefixed by (Awaiting translation…)
Complete
3.73

User registration

  • More elegant handling of a duplicate user
Complete
3.74

Contact Us

  • Don't show the Interested in… and list of Products if there is only 1 product on offer
Complete
3.75

CMS Photos

  • It is possible to select Video for a JPG
  • When switching between Product and Static Page it keeps the Static Page name and therefore impacts the Save
Complete
3.76

Languages

  • CompanyDetails page fails if no languages in database or no English
  • Doesn't seem to work in TennisClub.
Complete
3.77

Competitor Page

  • We collect the address and GPS locations of the competitors but don't use that anywhere.  
  • Perhaps create a map and a VCF download - similar to business contacts 
Complete
3.78

CMS

  • On each product.html page include a link for admin to the product. To change the name of the product
Complete
3.79

Multi-lingual

  • In Company Details control the default language, with one setting being to look at the browser language?
Complete
3.80

Business contacts map

  • Map not displaying
Complete
3.81

Products

  • Deleting a Product when the CMS is populated drives an error
Complete
3.82

Product

  • Formatting of New and Edit are different
  • From Index be able to launch the Page
  • Nowrap on arrows
  • Add a button to add 3 CMS and 3 Photos or +new from the index 
Complete
3.83

Multi-Lingual (Languages)

  • Flag import fails.  Possibly because file already exists?
Complete
3.84

Registration

  • Email fails
  • Need to test the full process
Complete
3.85

Map Icons

  • New/Edit:  Selection of icons to be sorted alphabetically
Complete
3.86

New functionality: Glossary

  • Add a new entity called Glossary or Help
  • Creates a page with some background that can be linked from another page.  But shouldn't be in the main drop-down menus
Complete
3.87

Mobile view - needs work.

  • CompanyDetails Show/Edit
  • Products
  • CMS- Edit/New is good
  • SubPage
  • CMSPhoto- index only
  • UsefulLinks - ok
  • Instructions -New
  • Weather -ok
  • Business contacts - New and Edit
  • Map Icons - edit
  • Facebook Groups - Index and Edit
  • Competitors - New

 

Complete
3.88

User

  • Create a field in CompanyDetails that permits or not “Auto login” from a given unique URL
    • Each User gets a unique URL, which will log them into the site with their name
    • Construct a controller that does that login for them
Complete
3.89

Login Directions

  • Functionality doesn't seem to work
Complete
3.90

Business contacts

  • Test that the file attachment and photo get deleted if you delete a contact
Complete
3.91

Users

  • Error message when adding a birthday “datefmt_create: invalid locale: U_ILLEGAL_ARGUMENT_ERROR”
  • Make the flags on the User/index saveable fields in the CompanyDetails page, so the standard can be saved for each application 
    • Add conditionality so that unnecessary flags are hidden in both the User View and in Company Details
Complete
3.92

WhatsApp number

  • Develop a service that checks if a number is a valid WhatsApp number or not

 

Complete
3.93

Doctrine update - Entities not working

  • Instructions
  • Weather
  • Facebook Groups
  • Competitor
  • Competitor Service
Complete
3.94

Check backdoor functionality

  • Doesn't work in ComfyCats (live)
Complete
3.95

Company Details 

  • Button to add Longitude and Latitude into the Company Details record
  • Can't save changes (since adding Photos)
Complete
3.96

Photo Gallery

  • Email button doesn't work
  • Favoured/unfavoured button don't work
Complete
3 AX Tools #: 64
3.01

Accommodation Street

  • Add a GPS location for each Accommodation Street and Destination
Blocked
3.01

Transfer

  • Clicking out an accommodation does not delete it
Complete
3.01

On AXTools-> Book Now

  • Once you type in a flight manually, it still shows the “Can’t find flight? Enter time manually”

Pending
3.02

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
Blocked
3.02

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
3.02

Partner website 

  • Similar to the aggregator functionality in CyprusVillasDirect I want to be able to offer individual taxi drivers their own website that feeds into the same booking engine  
    • Partner ATS URL field
    • Partner CMS and ancillary fields
Pending
3.03
  • 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
3.03

Updated Transfer Arrival time and Driver Snail trail

On the day of a transfer, the system should continuously update the driver's estimated arrival time (ETA) using their live GPS location and Google's traffic-aware routing.

Rather than relying on a fixed journey duration (e.g. Verbier → Geneva Airport = 2 hours), the system should use the driver's current position together with the destination to request a live ETA from Google Maps (or the Google Routes API). This automatically takes into account current traffic conditions, road closures and delays.

Example

  • Standard journey time: Verbier → Geneva Airport = approximately 2 hours.
  • On a busy Sunday evening, Google may predict a journey time of 3 hours due to congestion.
  • The system should display this live ETA rather than the scheduled duration.

ETA Refresh

  • Refresh the driver's location approximately every [10] minutes while the transfer is in progress.
  • After each location update:
    • Request a new Google traffic-adjusted ETA.
    • Update the expected arrival time shown throughout the system.
    • If the ETA changes materially (e.g. by more than 10–15 minutes), highlight the change so operations staff can react if necessary.

Journey Tracking ("Snail Trail")

From the Calendar, provide a Track Journey button for active transfers.

Selecting this should display:

  • The driver's current location.
  • The route driven so far ("snail trail").
  • The planned route to the destination.
  • Current traffic conditions.
  • Current Google-estimated arrival time.

The tracking should only display data for the current transfer, from the moment the journey started until it is completed. It should not show the driver's movements before the pickup or after the transfer finishes.

This provides operations staff with a live view of exactly where the vehicle is, how the journey is progressing, and whether any delays are likely to impact the scheduled arrival time.

Pending
3.04

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
Complete
3.04

Booking - checking phone numbers (backend system, Book Now is ok already)

  • Install the PhoneAnalyser (to check phone is good) in the New Booking and Booking Index
Pending
3.05

Transfers

  • Add 3 new fields – 1) “Price Adjustment” (float) and 2) “isSharedAllowed” (boolean) and “sharedTransfers” (relation linked to Transfer Entity – ManyToMany).
  1. 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?
  2. 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.
    1. 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….
  3. 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
3.05

Homepage

  • Design homepage with links etc
  • Description of: 
    • Private transfers from anywhere.   You will be given the name, tel number of your driver 1 day in advance
    • Introduce the concept of a Shared taxi.  For arrivals at an airport/train station you must be on the exact same flight/train (not juts expected times, as flight delays can introduce large delays) and travelling to the exact same resort – so there is mimimal extra delay.  The trip price will be split with afunction of passengers/drop off locations with a bias towards the person that offered to share. 
  • Pages for each resorts (Verbier, Veyzsonnaz, La Tsmoumaz, Nendaz)
    • Town Map (ie chalet location finder), Train times, useful Business contacts (Restaurants, shops, pharmacies, doctors, businesses like ski hire and rental, chalet compnaies etc),    what else should I add/
  • Transport links pages
    • Flight times (including latest info)
    • Train times
  • Business contacts shouldn’t have VCF as want to drive traffic to the site

 

Confirmations

  • Why does the map logo for a chalet with no GPS location go to Accommodation id 1001 etc
  • Test the Edit my Booking
Pending
3.06

Confirmation emails and clients amending bookings themselves

  • The idea is that it would be nice if clients could edit/correct some details in their booking directly.
  • In my old company clients had to call or email in to make ANY changes to their booking,  but it would be much more efficient if they could amend bookings themselves 
  • However, we can't let them make changes (without us ok'ing them) if they critically change the program for the driver after it is too late.
  • The key concept is that clients shouldn't be able to amend things that mess up the day (if they make last minute changes).  So they can't change the destination or number of passengers (beyond the capacity of the car), or times at the last minute
  • Issue is security - how do we give non-login access to edit a booking without exposing the database? Do we add a specific link to a page that is not login protected that allows changes, and only works for some fields with 24hours notice?  
    • At ANY time (even last minute) they should be able to:
      • Add/correct phone numbers or emails
      • Additional passengers names/details
      • Add address within the resort/cities
      • Reduce baby/child seats (not increase)
      • Change passenger numbers so long as it doesn't change the price (ie the vehicle)
      • Add flights number so long as it doesn't change the time  (probably not allow that change)
    • With more than [36] hours they should be able to change things that make a difference to the driver's program (eg destinations, dates, add trips)
Pending
3.06

Client confirmation button

  • I want to be able to launch the client confirmation button either in (1) new mode or (2) direct to send (with a popup confirming).   
    • This is because if i know I amnot going to edit the confirmation before sending what is the point in shwoing the screen
    • How to display:  Double-click to go stright to send?
  • In the top right corner of the booking, show the history of the confirmations sent similar to the booking index view
Complete
3.07

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
3.07

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
3.08

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
3.08

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
3.09

“Shared” Private Transfers

  • Pricing, there should be a discount for the first taker as they are taking the no-share risk. 
  • 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
3.09

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
3.10

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
3.10

Accommodation

  • Ability for the user to add a new address
Pending
3.11

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’ taxi drivers. 
    • Can I control 50 x CMS (CMS_Copy and CMS_Photo and Product) 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) but where all the bookings go to AXTools?
    • So in each Partner company I would include their URL link if they are adopting my system
    • I think it is ok for ‘their’ link to use the same URL if that is impossible
  • Intro fee for referrals
  • New drivers sign up and need to send bank details, driving license and car details
    • Automate the on-boarding email - in English and French
  • Driver's location is tracked in their response
    • Can we do this via the website or do we need an IOS/Android app?
  • For all bookings the driver's time at location is tracked to prove they were on time and to whatsapp the customer
Pending
3.11

Email Template

  • if the field AffiliateBooking is set to “Direct to Consumer”, then:
    • Set specificAffiliate to null
    • Set aggregateComfirmation to "Single Booking"
      • and hide these 2 fields
Complete
3.12

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
3.12

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
3.13

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
3.13

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
3.14

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
3.14

Client confirmations

  • Launching Client Confirmations from the Booking Index…. Non editable emails (thunderbolt icon) still launch in new window DONE
  • In emails, the %Total price% is not getting displayed DONE
  • Sender field is at the bottom of the page.  Let's put it at top, to the right of the Subject DONE

Email import

  • No pending emails - is that right? DONE?

New booking

  • Client lookup seems a lot faster, but not instant.  Fair? DONE
  • Transfer: Remove from Destination drop-down list any inactive destinations  NOT DONE
  • Prices are not rounding to the nearest CHF5  (eg 300, 305, 320, 405, 450……   not 302, 452, 519) DONE
  • Pricing parameters now include 14, 20, 23, 26, 32 passenger parameter…. DONE
Pending
3.15

Clients

  • Can't make entity
  • Add new fields:
    • Total PV
    • Summary data
  • Add link to their trips
    • 12month PV
    • List of bookings, with first date and PV
Complete
3.15

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
3.16

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
3.16

Private + bookings

  • We should create a page showing the Private+ bookings that can be seen externally. 
  • Recap: A Private+ booking is one that the original client (first) has opted to allow others to travel with them, to share the cost, so long as the times and destinations work.
  • The criteria are:
    • Drop-off to an airport - they have to be on flights that leave within [20 - controllable in settings] mins of each other and departing from the same Destination (eg Verbier)
    • Pickup at an airport -  they have to be on the exact same flight…. and obviously going to the same ‘Destination’ (eg Verbier, Chamonix etc)
      • FYI, the 20min rule doesn't apply for pickup at the airport as 1 flight might be early/later and the waiting period could easily extend from 20mins to hours. But for dropoffs that doesn't apply (as we don't know about delayed flights until too late to influence the taxi journey)
  • So, the page should reflect that:
    • Date
    • Seats taken
    • Seats left (assume 7 seats in the car)
    • Pickup (from(
      • If airport, then flight number
    • Drop-Off (to)
      • Don't show the address (eg Ch de la Tinte, 5), but show ‘Verbier’
    • Price for 1,2,3… people  
      • We will work on the formula for that.
Pending
3.17

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
3.17

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
3.18

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
3.18

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?
Complete
3.19

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
3.19

Customer confirmations

  • Launching the email from the Booking menu - where you have 2 choices, namely to edit or just send as standard.    
    • The edited version should open in a new tab (target =_blank) DONE
  • Looking at the formatting
    • The email fragments placed at the bottom of the page seem to be within the ‘grid’ so don't use the full page. DONE
    • I think at the top of the page you should show the To and CC fields and make them editable.   DONE
    • Can you widen the grid so that the text doesn't wrap? DONE
  • Tab titles - Bookings and Client Confirmation emails DONE
    • Currently they are all the same ("VBC-1234 (Stephen Nurse)"), so you can't tell if it is a booking page, or confirmation page.  
    • Suggest we update the tab title to enable us to distinguish and include some more key details (status and affiliate)
      • Booking: 
        • [B] at the start, to indicate booking.  Or can you have an icon (ticket icon)?
        • [PT] is all Privates, {ST} is all Shared, [PST] if a combination 
        • Can we add green tick/red cross/grey question-mark to indicate status
        • If affiliate, then affiliate code in bracket (eg BS, which is the code for Bramble Ski)?
          • <Ticket-icon> [PT] <green tick>: 13085: Stephen Nurse [BS] 
      • Emails: 
        • Perhaps an envelope icon to start to indicate an email
        • Affiliate code in bracket (eg BS, which is the code for Bramble Ski)?
          • <Envelope-icon> [PT] <green tick>: 13085: Stephen Nurse [BS] Shared Shuttle
    • The heading for Uphill text says “Drop-up address".  Should be “Drop-off”
  • Save vs Send
    • Can the email actually be sent so we can see how it looks in Outlook or on a phone.   STILL TO DO
    • Set send address to nurse_stephen@hotmail.com or your email while we are testing
  • Deleting a booking
    • Should delete all associated confirmations too (cascade).   We will disable this button in live

Booking

  • The status field  (confirmed, enquiry, cancelled) can never be null.   DONE
  • For the Shared Shuttle,  no need to display the text in red at the top (9 km, 20 mins  Suggested Time:xxx).  This is helpful for Private Transfers, but is known for the Shared  DONE

 

Imported emails

  • What's the difference between:
    • http://localhost:8000/emails_import/index
    • http://localhost:8000/booking/index_pending_emails
  • index_pending_emails view:
    • Display date as 12-Nov-25  DONE
    • Sort by date+time DONE
    • The text includes formatting code “1 private transfer from V-Verbier to GVA.&nbsp; To get flight to LGW at 3pm.&nbsp; 5 pax”       DONE
      • Show the first 2-3 lines,   Hover over to show the full text  DONE
    • Perhaps show the number of bookings with that email address as counter (to help indicate if a regular/important customer)  DONE

Confirmations

  • http://localhost:8000/client_confirmations/index
  • Include sorting buttons, similar to booking. 
    • Must be searchable by Booking ID and/or name and/or tel number
  • No wrap on all columns  DONE
  • Include a button on a confirmation that takes you to all emails on that booking specific booking DONE
  • Booking ID→ ID to save space DONE
  • Show content with a hover. DONE
  • By-  show initials and hover over for fullName. Save space.  Auto -  show computer icon   DONE

 

Complete
3.20

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
3.21

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
3.22

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
3.23

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
3.24

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
3.25

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”)
Complete
3.26

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
3.27

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
3.28

Populate flights

  • The challenge is to get the Flight data populated such that you have the schedule of flight past and present as far as possible.
  • For the updated times (ie delays/cancellations) you need to scrape the live site from the airport (eg gva.ch for Geneva airport,  https://www.hermesairports.com/flight-info/arrivals-and-departures-pfo for Pathos)
    • So practically there are two tasks, 
      1. Build the forward schedule (so clients can book a trip say 2 weeks in advance
      2. Check and update live times on the day of the flight. 
        1. And the objective is to then marry that data
        2. In absence of the list of flights, can we scrape kayak for all the destinations served by the airport to build a list of flights?
  • Chat GPT tells me the PFO site is easy to scrape as simple HTML, but the GVA site is harder
  • The basic idea is that we should get updated flight info from the live sites (gva.ch for Geneva and https://www.hermesairports.com for Pathos) but use aviationstack free account to get the schedule a rolling 3 months in advance   
  • On Tuesday, can you work on the scrapers for PFO and GVA?

 

Complete
3.29

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
3.30

Live site.

  • Setting up the login https://axtools.atts-systems.com/backdoor   causes an error. This is part of ATS, but I can't replicate on ATS
    • “An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'pause_for_bookmark' cannot be null”
Complete
3.31

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. 
Complete
3.32

New/Edit Booking

  • When the Destination is a City….
    • Standard: If the address is selected from the list of accommodations, can you put the chalet name in the original dialogue box, with a ‘x’ there to change, and the address etc in the line below. 
    • Other:  If the selected address is ‘Other’, it doesn't display the accommodation details when reopened in Edit mode.   It does save in the DB and can be accessed in the index.html.twig
  • Check database (StartAddress, StartAddressOverRide, EndAddress, EndAddressOverRide) and how they change if you change Destination.  Specifically, changing the Destination (eg Verbier change to [Chamonix]) should clear accommodation if selected from the dropdown list (as that would be in Verbier)

Transfer #1

  • The default transfer #1 on a new booking is a trip from GVA to Verbier on the next [Sunday]. 
    • However the transfer_macro does not offer the user a list of flights.  One has to switch to another destination and back to GVA to trigger the population of flights (need to confirm if still true)   Let's wait to test on Saturday when we can upload some flights to test

Transfer #2

  • When adding a new transfer(trip 2), the defaults should be:
    • Date: Date of trip #1+ 1 week
    • Destinations:  Same as trip #1 but in the opposite direction 
    • Accommodation:  Same as trip #1
Complete
3.33

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
3.34

Client confirmations

  • As well as saving the client confirmations, can the confirmation be sent out
    • While testing hard-code the To field to: nurse_stephen@hotmail.com
    • Should we use the Live/Testing field in CompanyDetails for this?

Email fragments

  • I have added another fragment for Shared_Waiting_List.   
    • That doesn't follow the other logic so the inclusion criteria should look at the Name of the template (eg Shared_Waiting_List) or something similar.  

 

Complete
3.35

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
3.36

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
3.37

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
3.38

Accommodation

  • Dropdown list in a new Transfer to show only relevant accommodations (ie those from that City
  • Include a chalet name (no GPS) for testing purposes 
    • If no chalet GPS show location of street?
Complete
3.39

Client phone numbers

  • Including details of the tel number (country code, PhoneAnalyser - confirm if the number is “verified”) 
Complete
3.40

Client site (public pages)

  • The “Book Now” page on the public site collect a basic booking (One-way or Return to the same routes -  ie only 1 or 2 journeys, same combinations).   
    • The backend can be used for more complex ones.
    • Unlike a backend booking, we should sequence the collection of data….  ie the client wants to know prices and options first, before typing in their details and payment details. 
  • This site does it brilliantly:  https://www.mountaindropoffs.com.  
    • Please try making a fake booking (don't save anything, just click out before payment - they are nice people) their site.  
    • It is amazing and super well thought out site. Best in the business. 
  • This is what you will see.  All on one page but with tabs to make it quick 
    • Step 1 is picking the dates and destinations
      • Number of pax
      • Destination list
        • Nice details: Return date can't be before Outbound date
        • Second journey defaults to the reverse of First journey
          • Dates remembered if you unclick Return and back again
    • Step 2 is flight data or address and then the service type/price
      • If airport: flight
      • if non airport:  Address
        • Then picking the Shared/Private/Private+ with price 
    • Step 3 is collecting contact details, names/emails/telephone/babies etc and luggage
      • Nice way to get international codes
      • Look at the extras (babies, luggage)
    • Step 4 payment
  • The design of this is 100% optimal (the owner is very experienced and logical) and we did exactly the same, but my old site has been changed so I can't show you that
Complete
3.41

Dashboard

  • Create a AXTools specific dashboard (ie not Standard/Advanced) as this is getting crowded
Complete
3.42

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
Complete
3.43

Calendar page

Complete
4 Payroll #: 11
4.01

Employee

  • Derive the Impot classification from Married/Single/Divorced and Children
Pending
4.01

Payment Made

  • Ability to add multiple in one pop up
Complete
4.02

Payments made

  • Summary table by month that shows:
    • Month
    • Total # of payments
    • Total $ amount
  • Duplicates produced on import
  • Checked versus bank flag
Complete
4.02

Review the Service that checks whether all fields are populated (before generating a form)

  • Check this service:   CheckEmployeeDataByDocumentTemplateService.checkDataComplete(employee.id, document_template.id)
    • It is used in “index_create_forms.html.twig”
  • It appears that this gives a ‘Incomplete’ even when both the Employee and Employer has all the fields populated
  • Make the service popup (tooltip) with the missing field(s) to be filled in.   Hide the generate button until ‘Complete’ criteria is met
Pending
4.03

Objective is to do AVS and other payment calculations.

Strip out of AX tools

Complete
4.03

Response from Website Inquiry Contact Form process (in Payroll Project)

  • As in ATS, the process of submitting an inquiring will create a new User.  Ensure that the role of that new user include ROLE_EMPLOYER
  • New Employers can choose the services they want to avail themselves of
    • Monthly payroll
    • Employment contract negotiations
    • Health insurance set-up
    • Employee permits (including managing capturing and checking the data from the employees)
    • Employee admin (housing, transport, training)
    • Ski hire for the season
      • Use the Product entity to control the text for each service (including pricing)
      • Check box for each Product that each Employer wants to take up
  • When a User logs in, if they are ROLE_EMPLOYER but do not have an associated Employer details set up, it will show a page designed to walk them through setting up an Employer. 
    • Employer page should include a question as to what services they would like to use. (See above)
  • If an Employer has been set up, it will direct them to their own dashboard page with their Employer(s) (likely 1 but can cater for others) with the links to their various pages with some sort of summary info.
  • If a a ROLE_EMPLOYEE or ROLE_USER, then design a dashboard page for an Employee
    • Access to their personal details
    • Store of permits
    • Payslips
    • General information and help
  • When uploading an Employee, be sure to track Default Language

 

Payroll – Other tasks 

  • Create a Pricing entity
    • Product (relational field)
    • # Employee and price (thoughts – single entry of multiple entries per product)?
  • Create a Communications Template entity
    • Name
    • Text in EN, FR, DE etc
  • When uploading a new Employee be sure to include their country so the User Default language can be set.
    • Edit the Employee upload function (New or Edit or Import) to check the employee language setting 
Pending
4.04

Form Fields

  • Index.  When the sorting feature is turned on, I can't alter the width of the category column
  • Add Import and Export function
Complete
4.05

 Employee import

  • Creation of a User for the employee upon import and or manual input
    • Make sure email doesn't exist already
    • And if email added 
    • Service to check if email is in the User list (see view in Employees, currently 1==1 is the check
Complete
4.06

Injection of Fields from a Record into PDF forms

  • The objective of the website is to automate the production of and the collection of data for various PDF forms. 
  • Your role is to understand the tech required to take an entry (the name of the employee) and “inject” it into a form. 
Complete
4.07

Forms

  • Share all the Official forms required for Payroll
Complete
4.08

Have a look at http://hr.alpinexpress.com/admin/dashboard

  • Login: VBC
  • Password: Sn0wman!
Complete
5 LinkSync #: 20
5.01

Scheduling the scrapes

  • Schedule the scrapes to run in batches (e.g. 20 at a time, once every 6 hours - i.e 80 a day -  to minimise the chance of LinkedIn security blocking the IP
    • I recognise that for  someone like me with 1.5k contacts, the process will take ~20 days, but that is ok. 
      • Perhaps email progress report (and a file with a subset of the users) after each run  with the updates so far  (once we have fully tested this)
  • I have created a linked-inexport@atts-systems.com email address (password Descartes99) for the email to be sent from
Complete
5.01

Analyse phone book

  • User uploads their phone book and LinkSync compares which are connections already and which are not.  Shows link to connect to the others in 1 go. 
Pending
5.02

Cookie view

  • Add in the dashboard the list of cookies (was user_password)?   
  • Perhaps show in the user list if the cookies are not added
  • Create a help email for users to add their cookie
Complete
5.02

SetUp file

  • Remove the warning messages for users

Single connections - Full Scrape

  • Add a button to update a single connections Full details or Contact Details

Languages

  •  Split languages with a comma into multiple languages

Make work for MacOs (not yet unless easy) 

Pending
5.03

Exports

  • For the PartnerFirm export add extra columns to the XLS export
    • Name of PartnerFirm Users who is connected to the LinkedInContact

Search-Results 

  • In the Ownership section, only show the owners if they are in the same partner firm, and then just initials 
Pending
5.03

Search

  • Ability to build a search that they can save  (eg Re-run JPM XVA guy)
Complete
5.04

Tracking profile changes

  • Think about how I can track a change to the profile and flag it is as a change

 

Handling a change of  LinkedInURL

  • Consider a way to address when someone changes their LinkedIn URL (one of the suggestions)
    • If URL link fails, send to a separate view for manual correction
    • Include a flag for failed LinkedInURL
    • Cron for updates/refreshing stale profil
    • Add a page to search for Users that have updated their profile
    • First Name and Last Name the same
    • Different URL
Pending
5.04

Search

  • Add a gender and languages spoken selector
Complete
5.05

CRM  (SN will do this)

  • Create a User/Firm level set of comments on a Connection.
Pending
5.05

Full Scrape:  Improvements

1. Add new languages  (DONE, right?)

  • You might have noticed that in he LinkedInConnections index  and in the SearchResults, I have consolidated the languages-spoken into a single column (as real estate is a premium), and I have also built “Languages spoken” into the search functionality
  • This means that I can handle any number of languages (without expanding columns and destroying the visual impact), so I no longer need to restrict languages outside the top 5 to ‘Other’.
  • Therefore when we scrape a profile, in the language section, can we add the new language into the Language entity, if it doesn’t exist already. 
    • I can manually add the 2-letter acronym and the flag manually later to maintain that, but capturing the new Language at scrape would be terrific.

2. Additional connections scrape  (DONE)

  • If you recall, I asked that when you were processing a full-profile scrape that we capture the ‘Basic’ scrape of the details of the suggested names, that are displayed on the right.      See below for an example.
  • This is a critical function in order for us to quickly build out our population set as fast as possible
  • On reflection, I think you are correct when you suggested we assign a ‘system-user’  as the owner of these ‘orphan’ connections, as ultimately we will want to perform the full scrape on this profile, and it will need a user to marry up against in them to trigger that.  Do you agree, or could the system-linkedin cooke just look for non-owned (orphaned) users. 
    • If we could do it without a system-owner it might make it easier to maintain the database ? Open to ideas
Complete
5.06

Profile suggestions

  • Build out a page that contains suggestions for a profile:: Connection Strength Score
    • Number and seniority distribution of connections
    • Cross-industry diversity
Complete
5.07

Languages

  • For every connection that doesn't have a languages section, we save a ‘null' results   
    • We shouldn't save the null case
    • https://linkedinexport.atts-systems.com/languages_spoken/index

Birthday

  • The birthday fields not being scraped (my profile has my birthday in it as an example)
    • Linkedin only gives day-month.    Save as dd-mmm-2000  (we will display only as dd-mmm)

Photo

  • Correct the mistake whereby a profile with no photo is allocated someone else's photo
Complete
5.08

Reports

  • Build Industry and Candidate Moves reports
Complete
5.09

Access control for the search functionality

  • Limit the access to the search facilities to those recruiters that have paid for the search functionality
  • For others, hide the name and link and export function (unless their connections) 
  • Pricing and licensing for recruiters. 

Recruiter engagement

  • Detail the recruiter value in pages online, but which are not available from the menu
Complete
5.10

Scrape

  • When a LinkedIn contact has something unusual in their name (eg the maiden name in brackets, or a same or PhD in brackets) then it fails to allocate the first name and last name successfully.  
    • Suggestion:  Take anything in between brackets and delete (including deleting the brackets)
      • See attachment for examples in my Connections list (6 out 1,222 ‘fail’)
  • Scraping of gender from linkedIn needs to be trimmed for it to be effective - returns “…….She/Her……”
    • Let's test it

Settings

  • The settings for MaxLinkedInContacts and LinkedInScrapeBatch don't seem to be effective.  We should use these fields to reduce the initial scrape to make testing quicker

Popup Message

  • The popup message appears each time your launch Index - “There are 1222 connections. The system pulls data in the batch of 20 per hour. It will take approximately 62 hours or 2 days and 14 hours to completely fetch all the data of 1222 connections. Our system will auto pull data in the interval of 1 hour. You can check status in every one hour. To continue please start the process.”

 

 

Complete
5.11

Recruiter firm 

  • Add a flag to determine if you would like to share connections across the firm fully or vertically only.  How to motivate non-admin users to participate -  
  • If vertically, need to identify the admin users at the firm
Complete
5.12

User - own profile

  • Ensure that the user's own profile is included in the scrape
  • Launch a page that gives them their own report.
Complete
5.13

Full Scrape:  Improvements

Trim the Employers 

  • When scraping, trim the name of the employer(s) to remove any leading/extra spaces (IS THIS DONE?)
    • The search function was struggling to handle cases where there were/were not additional ‘spaces’, so I figured that the best way to do that was to trim as far upstream as possible
Complete
5.14

LinkSync User view

  • Error due to PhoneAnalyzer
Complete
5.15

Homepage

Improve the front end given the new CmsCopyItems 

Complete
6 Immigration Services #: 8
6.01

Flight scrapper

  • Copy over from stephen-nurse.com
Complete
6.01

Immigration Services site

  • Include the ability to upload an email into a “New Client” form
  • Complete
    1. MEU1 form (partially complete) population
    2. MEU3 form 
    3. Bank of Cyprus form 
  • Check all the customer pages work on a mobile
    1. Need to upload scans via camera on phone
  • Not all the forms (passport, driving licenses etc) have the Controller built to upload files (and delete files)
Pending
6.02

Need to upgrade all the controllers/forms

Complete
6.02

User Dashboard

  • Create a transaction for each product. 
  • Create a user_dashboard 
Pending
6.03

Other

  • Review site in mobile mode. Currently the following screens do not look great:
    • When a user is logged in:
      • Show a transaction (eg http://localhost:8000/transaction/19/show)
        • And editing each Document (eg Passport, Birth Cert, Driving License etc)
  • Security
    • The My Availability page needs to be security protected (just the specific-user and staff)
  • PriceList page
    • This should cycle through the Services Offered and show the summary and price
  • Complete MEU1, MEU3 and Bank of Cyprus forms
    • Complete the code to show the questionnaire titles in either English or Greek (or both) in the MEU1 and MEU3 forms
    • Ensure that the forms ‘import’ the necessary information in the right place (eg from User, or Passport or Employment Contracts etc)
Pending
6.03

eMAIL

  • Include the email upload functionality (similar to AXTools)
Complete
6.04

Forms

  • Share the MEU3 form
  • Design how the responses to an input error is emails to the user upon verification 
Pending
6.05

Process of reviewing docs (e.g. Passport, Utility bill, Tenancy etc).

  • Client upload the respective document and fills in the details required.
    • Clients should only see the first column; not the column(s) for the Review process or the reasons for failure….. 
    • Clients should not be able to edit the review section
    • Status should be set to default
  • GRTS review the doc and show comments.
    • And send comments to client
  • Client then ‘corrects’ the error.
    • How do we track this?
    • Can we have a history entry that tracks the changes? A non-editable field that tracks the date of the change, who made it and what was made.  
    • If a revised scan is uploaded, do we keep the old one (rename it?), and link to it in the history field?
    • Client amending should reset to Pending.  
    • Errors before should still be visible to staff members
Pending
7 Criminal Record Checks #: 5
7.01

Enable Credit Card Payments

  • Integrate Stripe etc 
Pending
7.01

Signature 

  • Insert the signature image into the Authorisation Letter and the Application Form
Complete
7.02

Text for CRC

Application forms can be obtained through the Internet from the official Police website: www.police.gov.cy - Previous Conviction Registry

Every application must be accompanied by:

  1. An official receipt for the payment of the amount of €20.00.  The payment could be made:
  • in cash at any Divisional Police Headquarters or at any Embassy or Consulate of the Republic of Cyprus
  • remittance to the Central Bank of Cyprus in the name of the Chief of Cyprus Police
  • (SWIFT CODE CBCYCY2NACC, Government General Account, account no. CY1600 10000100000000006001010) -only in Euro
  1.  Identity Car, Passport, for Cypriot citizens
  2. Alien Book, Pink or Yellow and passport for Aliens
  3. Written authorisation in case that the application is submitted from a third person besides the applicant.

Note: The content of this application are subject to the provisions of the General Data Protection Regulation (EU) 2016/679 and of the Law 125(1)/2018

Complete
7.02

Timelines

  • Create a single page that show all the attachments
    • Can this open in a new instance of Firefox or other browser (needs to login)
Pending
7.03

Checked By

  • Edited field only to be visible to ROLE_ADMIN
  • Create a standard list of replies
Pending
9 Tennis Finder #: 39
9.01

Booking completion

  • Complete the ClubSpark scraping functionality
    • One-click booking
    • Cancellations 
Pending
9.01

Court and Player Availability

  • Courts and players view needs work
Complete
9.01

Meeting new players.  

  • E-mail functionality test
Blocked
9.02

Other

  • Courts and players view needs work
Blocked
9.02

When booking an Aceify 

  • When making a booking for an Aceify client, check the Aceify credit available 
    • Malcolm to check how to access a client’s balance, and if there is a unique URL  - via the client’s email or client’s ID
Pending
9.02

New venues

  • Define the defaults and make fields nullable to enable quick saving of new venues (partially done, but need to change the Edit function)
  • Import: MyCourts venues 
Complete
9.03

Payments

Pending
9.03

Other sites

Blocked
9.03

Tennis Venues

  • The import function does not respect the CheckedDetails and IsActive flags
  • Tennis Venue index doesn't sort in non logged in mode
  • Increase column height on Travel Directions and reduce the Maplink one

 

Complete
9.04

Meet new players 

  • E-mail functionality test
  • To make contact with a new player, the system should not show their email/phone number, but rather wait until the recipient has accepted the request  
    • Show list of reach-outs in my Connections list as Pending.
      • Mark contacts as Agreed(tick), Pending (?), or Rejected (cross). 
  • Ability to download a Outlook contact file
Pending
9.04

Venues 

  • Show all venues on a single map (multiple dots)
Complete
9.05

Venues

  • Add a new field - “Details checked”
    • Display as a tick for Admin users
  • Add button to reset tick and also a refresh all button that sets all the fields to TBA
  • For various inputs (toilet, parking, floodlights etc) add a “TBA” option to the choices
    • In view, if TBA, show as a grey question mark
  • Add a photo of the venue
Complete
9.05

Scraping courts 

  • MyCourts  (generic code that will then apply to all the MyCourts clubs)
  • Duke’s Meadow – requires a bespoke scrape
  • Aphrodite Hills
Pending
9.06

Email functionality

  • Work on the confirmation emails
    • Punter confirmation
    • Complex reservation
    • Aceify booking
Pending
9.06

Court reservation

  • In the popup to book a court,in the title confim the venue and time (to reassure the user that they clicked the right button) and include the court surface and floodlight data
  • Where the surface and floodlight specs are consistent for all courts  at a venue, display in the title.  When different by court, display at the court level.

 

Complete
9.07

Court view

  • Include the court utilisation stats (e.g. 3/5) – perhaps as a bubble?  Kill the £ sign and roundup the price (for Aceify only) 
  • On the expanded day view show the court surface and the floodlights
Complete
9.07

Tennisfinder 

  • Tennis Venue entity:
    • For the 129 MyCourts clubs, can you try to convert the Longitude and Latitude data that we captured into the “embedded html” needed for the maplink, so the map-marker icon works?  
    • Can you run the postcode distance calculator for one player across all the MyCourt clubs to see if they all ok compute
    • The Map All button (showing the position of all the Active Courts on a single page) doesn’t seem to include the MyCourts clubs  
  • MyCourt Scraper
    • Can you build a scraper to extract the Court (whether tennis, squash or badminton) Availability for the “MyCourts” clubs
    • Can you bring in the data as to whether it is available and the price if it is a given
  • Booking a Court (ClubSpark)
    • Can we test the client emails when you book a court
    • Can you look to see if you can complete the single-click book for the courts?
  • Complex reservation (multiple days where we book the first court that comes available)
    • Can we create a chron that runs through all the complex reservations and makes a booking (and cancels others) that meet the criteria. For example,
      • If the #1 preference is free it books that and cancels the others
        • Question:  Do  we wait for all the first choices to be available before ‘hitting’ a second choice?  Or do we go through each hour and hitting the best one?  (Do you see the problem?)
          • Perhaps we should make that a question :  “Would you like us to immediately book a non-first preference option if there are some courts at your first preference still to be released? Be aware if we then wait those second/third/fourth choice options might have gone?”
    • We also have to think about how we use the bidding process...  
      • For a single venue/hour…. Do we give them a choice of court, or any court?
      • And do we charge the full bid price, or the next best bid +£1? How will the client know? Do we show the current highest bid  to encourage a higher bid- Yes?  And do we tell the first bidder that they have been out-bid?
      • I think we just take the full amount and the client
Pending
9.08

Splitting the court cost bill

  • One person will have to first buy the court, but the functionality I want is for that person to then be able to split the bill across the other players
    • Create a “My Bookings” link - that shows the bookings where the logged-user is one of the players (either player1, player2, player3 or player 4).  
    • This view shows who has currently paid for the court (and the split after some reallocation) and includes a button that “Pays my share”,
    • That process involves the non-paying player(s) to send their share of the cost to the kitty of the person that paid the bill.  It will shows as a like a TopUp on the account of the recipient and a debit on the Account of the sender 
    • Email functionality to send a reminder to the non-payers
Pending
9.08

Tennis court availability

  • Include the links to the clubspark site from the Expanded day page
  • Include the titles (Today, Tomorrow, This Week, Next Week, Following Week) in the tab and the title
    • Colour code the buttons to illustrate the current selection
  • Shrink the row height to minimal level to allow more court availability to be seen on a single page
Complete
9.09

Hit with me

  • Players upload a video of their game
  • Gets rated by a coach (£2 charge)
  • Grid of pricing for player vs others for relative standards Punter playing brings the balls and the court. 
  • No show - cost of court and a fine of 5quid 
Pending
9.09

Tennis venues

  • Add a Court Surface entity, containing court surface and also floodlight, so we can identify by court the surface and floodlight status - may not be consistent across all courts at a venue.  
Complete
9.10

ClubSpark

  • Buy smart card per venue. Limit bookings to one per day and 5 per week per smart card to avoid scrutiny. 
Pending
9.10

Bug - Tennis Venues

  • When you edit a venue and delete the photos and then resave new photos, then the ‘old’ photos get shown
  • So the delete photo button should either delete the file, or the edit button should replace the file when re-editing  
Complete
9.11

Helpful links

  •  https://breakstolove.com/
Complete
9.11

Tennis coaches

  • Create an user-type of “Aceify Coach”
  • When selecting a user, also select their chosen coach
  • Show the coaches bookings on the court screen.  
  • Book court in name of coach, and cc the player
Pending
9.12

Management statistics

  • History of court usage
  • The states of the court are:
    • No data => 1
    • Available => 2
    • Booked => 3
    • Closed => 4
  • Lifecycle (assuming not closed): 1>2>3
  • What do you need to know
    • New fields:
      • A) timeFirstScrape - Done
      • B) timeCourtReleased - Done
      • C) timeCourtTaken (ie time on a scrape  when the court was Available before but is now Booked) - Done
    • Compute
      • SnapUpTime:  (C-Max(A,B))
      • LeadTime: (PlayTime-C)  - Done
Pending
9.12

ATS Template upload

Complete
9.13

Tennis Venues

  • Show the court surface/floodlights details in the booking popup
Complete
9.13

Overcome the IP blocking issue

  • Proposed solution is to scrape using a local copy of the site that posts the results to the live site
  • Question: How do we overcome the IP block that is applied to our site for the making of bookings?  is the IP address already blocked?  Note this will be far less frequent than the scrape, so we could use a dynamic IP address for that component of the site as the volumes will be far lower?
Pending
9.14

Complex  Reservations

  • Allow a user to specify one of multiple venues/tennis and a court ranking preference
  • 1 or 2 hours. 
    • Ok for just one hour?
    • Book as soon as any are available or wait for preferences to be released?
Complete
9.14

Complex reservations

  • Allow users to book repeat reservations targeting mutliple venues, where their choice will prioritise either the venue or the times or the time on court 
Pending
9.15

Bug fixes

  • Error message shows when Adding a new Venue
  • Error message when ‘signed-in’ as an Aceify client – looks to be with the mileage to courts?
  • Court view – check the display of the floodlight and surface data (I saw some were missing in the demo)
Complete
9.15

Scraping

  • Solve how to “prompt” a court availability scrape from the live site
  • Scrape history view not working
Pending
9.16

ATP tickets

  • include a link that contains the Wimbledon/French/Queens/Boodles tickets (and to tennis club site) 
    • Import export to csv to aid importing of data
Complete
9.16

Bookings

  • Allow non-logged in users to book (ie straight to CC provider, take email)
  • Email confirmation
Pending
9.17

Cancellations

  • Re-use a cancelled court?
  • Setting up a 1st reserve for any cancellations 
Pending
9.17

Scraping

  • Check performance now we have 20+ sites live
  • Complate the ParkSport scrape (very similar to ClubSpark) 
Complete
9.18

Tennis venues

  • Complete update of all venue details 
Complete
9.18

Handling a VIP booking (e.g. Jamie Delgado)

Pending
10 Whistles & Bells #: 4
10.01

Client export function

  • Export all clients or VCF, that aggregates across both the User, Client and Dog entities.
  • Contact form included that will upload to client CRM  (checking for duplicates)
  • Client contact details (and notes re dog) can be exported to a VCF or CSV so you can upload your client details directly into your phone/contacts (so you recognized in-coming calls/emails etc)
Blocked
10.01

Client Details

  • Hide Long and Latitude as an input.  
  • Show map icon
  •  
Complete
10.01

CMS Copy

  • Transfer over copy from Word file
Pending
10.02

Whistles and Bells

  • New Dog, New Client Details
Complete
10.02 Tennis Club #: 15
10.03

Payment

  • Stripe set-up
  • Handling of visitors - visitor fee applied to members Tournie and leagues Platinum vs good memberships
Pending
10.03

CMS

  • Change CompanyName etc to ClubName etc in all forms etc
  • Work on the Index page, and maybe use a table  
  • Rename Twitter to X.  Update icon
Complete
10.04

Management reporting stats pages 

Pending
10.05

Other

  • Approach public schools to ‘rent’ their tennis courts over the summer
  • Simultaneously book a Court(s) for Coaches and for Group Sessions. 
    • What happens if the court is not free?
  • For a coaching session book a clay and a hard court and release one when booked.  And release the backup 24 hours before the lesson
    • When adding a tennis Group Session that is chaperoned by a coach, add that to the coaches calendar too. 
    • Cancellations of a coaching booking would free up the coach/court (or back to the ‘bagsy’)
      • Q:  When should the system release a court if the coach is not booked and there is demand for the court (ie when does the bagsy run out)?
      • Q:  Should the coach reserve a hard or clay court.  How should you handle a client who wants to choose (suggestion - the coach bagsies a hard court and if available at the time of booking then it can move to a clay).  Do you want to differentiate between courts (eg 8v 9 etc)?
  • Add calendar invite when someone makes a coach or session of court booking
  • Have a tennis coaches view that shows today and tomorrow, that is not password protected (but hidden link) allowing the coaches to see their calendar with 1 click.  Make it work on phones
    • Q: What phone do Wyn, Steve, Elena have?
  • Decide order of priority for court usage
  • Show account balance/kitty in Header 
  • Improve ergonomics of the the coach bio page.
    • Ask Wyn for a bio, 2-3 photos and a video  for him Steve and Elena
  • Track no-shows
    • Q: Should a “no-show” prevents new bookings for [x] weeks.  On the first/second/third strike?
  • Track canclled bookings? 
    • Cancel bookings should be saved in a new entity and perhaps tracked.  What limit to put on that?
  • Flexi memberships: Track number of flexi court vouchers remaining
  • Compute/summarise:
    • Court stats by month (# $$$)….. Hard, clay by hour - broken down by the DoW and hour.   ie should you change prices at different times of the day to balance the loads better
    • Coach stats by month (# $$$)
    • Member stats by month
      • Number of court booiings, number of coaching and group sessions. 
      • Which members break-even vs their membership cost etc?  Should you increase/decrease the annual subscription?
  • Membership reminders
  • Excel import/export of all users to upload members for the admin - test
  • Ability to process emails into a booking easily.
Pending
10.06

Users

  • Have ability to create a user from an Outlook lookup.  ie press a button to call up Outlook and search your VCFs and import in the necessary fields
Pending
10.07

Bugs to fix

  • Group Session Index - how do I sort them differently if logged in or not (different column count)
  • My availability grid and the  “I am away button” (line 110 in Index).  Seem to have lost the functionality on these buttons altogetherPayroll
Pending
10.08

Tournament

  • Create the draw and the matches 
    • Including scheduling futures rounds
  • Show the contact details of one's next opponent
Pending
10.09

New entity with Courtey rankings vs User

  • Import/export function or ability for user to edit their own ranking points
Pending
10.10

Users - Delete All

  • Doesn't work
Pending
10.11

Box leagues/ladder

  • Add ability to  run a box league 
  • Look at https://boxleague.net
  • == entity: tennisClub
  •       Name, address, tel, notes, administrator, toilet, GPSlocation, parking, bar, changing rooms, showers 
  • == entity:   boxLeague
  •       tennisClub (relation), box league number (1, 2…. x), sets, promotion count, demotion count, date for completion 
  • == players
  •       Member of a specific box league at a specific club(s)
  •  Box league then creates a list of fixture (grid), allows the users to enter their own score and.or the administrator. Includes walkover 
  • Computer the winner/loser 
  • Computes next season starting point. 
Pending
10.12

Tennis Court Availability

  • Future bookings count - had to change
Pending
10.13

Formatting

  • Photo handling on the Interests page
  • Background colour on footer and header
  • Height of the header, overshadowing the content
Pending
10.14

Premiership table view of players

  • Show last 5 wins/losses
  • Button for Single or Doubles
  • However over for date, player, score

Scrape ITF player rankings weekly 

 

Pending
10.15

User

  • When you register for the club as if permanent or temporary login.  
    • Have feature that emails logged members with expired memberships to remove them from the main list. 
  • Field.  Temp membership - date.  And remove those from the drop-down menus etc. 
  • Prepare a confirmation email to be sent to all bookings (each night and upon making the booking).  In terms of the reference I don’t think we can use the court availability I’d as that changes if they change court. For the coaching booking that can work though?
  • When a new user logs in, have a field that asks if they are a temporary visitor or a long-term member
    • Field:
  • Add Google Analytics
Pending
10.16

Create a unique page for a user, that doesn't require a login and allows them to sign up for sessions 

Pending
11 Financial Advisor #: 8
11.01

News coverage

  • Include useful market information page with podcasts from our top providers – e.g. Merryn@FT;  Prof G.  Include date and link, and summary of the content and my commentary.      Important for social media engagement 
  • Link to news scrapper
Complete
11.01

Podcasts episode

  • Looks like the dates look wrong (a lot the same)
  • https://financialadvisor.atts-systems.com/podcast/episodes/index
Pending
11.02

Financial advice and also generic website template

  • Create a copy of SN, and strip out all non-investment sections
  • Then copy and strip out everything except the user, CMS and basic framework
Complete
11.02

Mortgage

  • Build mortgage comparison tool
  • Inputs:
    • LTV
    • New/Remortgage
    • Cost of Finance
    • Maximum early repayment
    • Odds of moving within fixed term
    • Flexibility to pay if rates increased a lot
Pending
11.03

Updating contributor site

  • Rich text editor for the Summary and Comments fields
Complete
11.03

Updating Podcasts

  • Can you scrape the Transcript
  • Idea is to push the Transcript into ChatGPT for a summary (but not now)
Pending
11.04

Updating Podcasts

Goal

I want to:

  • Track the top 5–10 podcasters in Personal Financial Advice
  • Pull in their latest podcast episodes automatically
  • Then manually add summaries, topics, and comments

How It Should Work

1. Podcasters (Directory)

Page: http://localhost:8000/podcast/directory/

Contains:

  • Podcaster name
  • Link to their YouTube or Apple channel

2. Episodes (Output)

Page: http://localhost:8000/podcast/episodes/index

  • This is where all scraped episodes should appear

 

What the Scraper Should Do

On the Episodes index http://localhost:8000/podcast/episodes/index, when the  “Update (scrape)” is pressed, the scraper: 

  • Goes to their YouTube channel
  • Find their Videos episodes
  • For each episode, store:
    • YouTube URL
    • Podcast title
    • Date published (open link)
    • Duration (if possible)
    • # views
  • Save the episodes into the database (avoid duplicates (don’t re-save the same episode)

What I Will Do Manually

  • Add topics
  • Write summaries
  • Add comments

Current Problem

The “Update (scrape)” button does nothing

  • No data is being pulled in
  • No error message is shown

 

Technical comment

  • I noticed if you open up a link to a video in YouTube you can see : 
    • Date of the podcast
    • # views

 

  • Does it make sense to first scrape the links from the Podcast subscriber view (eg https://www.youtube.com/channel/UCLXQalldcm6gMYMQfLMliww)   and then open each one (each an episode) to capture the  date and views data?
  • Also can we capture the text below the date/views (save in the “summary” field) and also pull in the ‘transcript’ (new field called ‘transcript’)?
  • My idea is that I could then get ChatGPT to summarise each podcast from the transcript? 

 

 

Complete
11.05

Mortgage

Background (Non-Technical Explanation)

  • A mortgage is a loan used to buy a property (house or apartment).
  • The borrower repays the loan over time with interest.

Key Concepts

1. Interest Rate

  • This is the cost of borrowing money, expressed as a percentage per year.
  • Example: 5% means you pay 5% of the loan amount per year as interest

2. Fixed vs Variable Mortgages

Fixed Rate Mortgage

  • The interest rate is locked (fixed) for a set period

Common fixed periods:

  • 2 years
  • 3 years
  • 5 years
  • 10 years

Example:
“5-year fixed at 4.5%”
→ Rate stays 4.5% for 5 years, then changes

Variable Rate Mortgage

  • The rate moves over time (can go up or down)
  • Often linked to central bank rates or market rates

3. Fees, Cashback, Legal/Valuation Frees/Other terms

Mortgages often include upfront costs:

  • Fixed fee (e.g. £999)
  • Or % of loan (e.g. 1%)
  • Cashback (essentially a negative fee)
  • Maximum Loan-to-Value (LTV)

These must be included when comparing deals.

4. Why Compare Mortgages?

The goal is to find the cheapest total cost, not just the lowest rate.

 

======================================================================

2. “Swap Rates?” (Important Context)

  • Swap rates are market interest rates used by banks.
  • They represent the true cost of fixed-rate lending in financial markets.

Why They Matter

Banks price mortgages based on swap rates

If:

5-year swap = 3%

Mortgage = 5%
👉 Bank margin ≈ 2%

This allows us to:

  • Compare banks
  • Identify overpriced or cheap mortgages

3. System Objective

Build a system that:

  • Collects mortgage offers from aggregators (e.g. MoneySuperMarket)
  • Stores them in a structured format
  • Collects daily swap rates
  • Enables mathematical comparison of mortgage deals vs market rates

 

CODING TO DO

4. Mortgage Rates Scraper

See: http://localhost:8000/mortgage/rates/

This page contains buttons:

  • 2-year
  • 3-year
  • 5-year
  • 10-year

Each button leads to a page showing mortgage offers for that maturity term

What to Scrape (Per Mortgage Product)

For each mortgage on the page, extract:

  • Link on moneysupermarket
  • Bank Name
  • Term (ie fixed period in years (eg 2yr, 3yr, 5yr or 10yr)
  • Interest Rate (%)
  • Rate Type 
  • Fees
  1. Fixed amount (£)
  2. Percentage (%) if available
  3. Cashback
  • Maximum LTV
  • Free Legals 
  • Free Valuation

Storage

Create a new record via:  http://localhost:8000/mortgage/rates/new

Scraper Logic

For each term (2, 3, 5, 10):

  • Open the page (2yr, 3yr, 5yr, 10yr)
  • Loop through all mortgage deals available
  • Extract required fields
  • Save one record per mortgage deal available

Maintaining a record over time…  (let's tackle handling versioning over time after we have the scrape working)

  • If the Mortgage Deal already exists in the database (same Lender, same maturity term, same rate, same fees, status=Active) then don't create a new one record
  • If it is a Mortgage Deal, set “DateLaunched” as today and set status as Active
  • If a mortgage record (Active) is no longer present, mark the date "DateWithdrawn" as today

 

5. Swap Rate Scraper Specification

See:  http://localhost:8000/swap/rates/

What to Extract

For each tenor:

  • 2-year
  • 3-year
  • 5-year
  • 10-year

Extract:

  • Rate (%)
  • Tenor
  • Date (today’s date)

Execution

Run once per day (cron job) 

6. End Goal (Why This Matters)

This system allows  comparison of mortgage deals on a like-for-like basis.  I can explain why to you, but not important for the coding exercise

 

Complete
12 Stephen-Nurse #: 141
12.01

ToDoList

  • The list of projects at the top of the page look
    • If RoleAdmin show all projects 
    • Also for adding new projects
  • Allow non-admin to access the +/- button
  • Sorting broken
Complete
12.01

Logout time is too short

Blocked
12.02

To Do List

  • Button to collapse all the projects. 
  • Pressing the Admin-ToDo List should trigger this button
Complete
12.02

Investments, Tax etc needs overall

  • Basic failures
    • http://localhost:8000/investments/edit/22 
Pending
12.03

Tourist Attractions

  • For both the download GPS locations, and the clear GPS locations, do an on-submit check
  • The desktop/mobile distinction doesn't work anymore
Complete
12.04

House Guest

  • Create ability to put in notes (eg need to fly to Frankfurt, dentist appointment etc)
  • Will entail having a ‘blank’ guest, which does/doesn't trigger a blockout period
Complete
12.05

CV

  • Emailing of CV doesn;t work
  • Emailing of Useful files doesn't work either
Complete
12.06

Fixed Rate Deposits

  • Separate by category
  • Add a field for if an EBT (list the 3) so we can build a view of the value of the EBTs separately
Complete
12.07

Useful links

  • Deleting useful links button doesn't work
Complete
12.08

House guest

  • Doesn't look good in mobile
Complete
12.09

Flight destinations

  • They seem to have been deleted.   Crawler/bot problem?
Complete
12.10

Flight Destinations

  • Add buttons to include/exclude
  • If excluded (inactive), don't include in scrape
Complete
12.11

Useful links

  • Add an entity that dynamically allows new categories for useful links
Complete
12.12

User import

  • Handling conflicts and allocation of contacts to Business Contacts
Complete
12.13

Useful files

  • ChkEditor added to base.html but didnt work when added to new and edit file.  Why?
  • Size of text box 
  • Email doesn't work on live, but works on dev
Complete
12.14

To Do List

Clicking on the project should reset the index to that project, similar to the buttons above

Complete
12.15

JPM share price

  • Ability to import JPM share price daily
Complete
12.16

Settings

  • Create a control function to determine if the various Interests tabs are shown
Complete
12.17

Helpful files

Complete
12.18

Recruiters

  • Firstly, before uploading the new User entity from ATS Template,  fix the current Recruiter links in the dashboard
  • Create new entity for Recruiter that is is linked to User
    • Includes Region, Priority and Area of interest and also tracks email sent and received
    • Creates a new User if User does not exist
      • User list export to Outlook includes the Recruiters.
Complete
12.19

To Do List

  • In the Projects list have a flag for whether the live website is working or not
  • In the ToDoList items, show that checkbox and in the title show the C:\dev directory name
Complete
12.20

ToDoList

  • Copy buttons
Complete
12.21

Travel Notes

  • Make it a long text format. 
Complete
12.22

Birthday cron

  • No longer works
  • php bin/console app:send-birthday-reminders works ok, so it is just the cron 
Complete
12.23

Base contains entity specific formatting  

  • Why do these have to be in base.html? Can we put it in the edit.html for each form? 
  • Would that be quicker?
  • This includes form specific details (Editor).  
Complete
12.24

CMS Photo and Company Details not pushing through to Live

In Company Details hide the Favicon and QR fields when completed

Complete
12.25

FX Rates

  • Write a Service to find the FX Rates on the AsOFDate
  • Write a chron chron job to save the FX Rates each day
  • When updating the FX Rate button, show the date and also update the Historical FX Rates 

 

Total PVs

  • Total computation doesn't work.
  • Compute total in GBP or USD
Complete
12.26

House Guest/Flights

  • Include a date range for each flight combination
Complete
12.27

Days out of UK 

  • Compute the days in each country in UK tax year
Complete
12.28

To Do List

  • The Project should be the default choice but editable.
Complete
12.29

ToDoList

  • When you Save and Close a ToDoList entity it returns you to the Pending Items for that project
Complete
12.30

To Do List Item

  • The attachment field has fallen off the bottom
Complete
12.31

Helpful files (File Attachments)

  • The “Notes” appear to delete upon saving
  • Ability to delete each file attachment individually
  • E-mail functionality only works in local
    • Check including multiple files
Complete
12.32

Users 

  • Handling of Recruiters and other ‘role-conditional’ fields when editing a User
  • Birthdays: Cronjob that Sends email to SN to warn of a birthday next [3] days 
Complete
12.33

Flights

  • Scrape time not in the correct format
  • New entity to define destinations. 
  • Button to create the “Return” leg that 
    • Add a new field for “Return leg”
    • And an Order field?
  • Numbering of routes to group them in pairs.  
Complete
12.34

Photos (tennis)

  • Why don't some of the photos show?

Copy

  • Improve the copy for various Interests pages
Complete
12.35

HouseGuest

  • Add a button to scrape the one destiniation/route only. 
  • Copy over to Immigration Services
Complete
12.36

Users

  • PaulCoolen example. (paulcoolen@gmail.com, federer)
    • When he edits his profile, he shouldn't be able to change :
      • Company field  (rename as SN Category).  In fact hide this from the non-admin user
      • Londoner checkboxes
      • Save buttons- don't show the send welcome email button
      • Webpage seems to want to populate with my sn email address?
Complete
12.37

Photos

  • What photos and videos can I upload.  Different formats for photos and movies
Complete
12.38

ToDoList

  • Needs Research.  Field options should be:
    • No
    • Yes - Minor
    • Yes - Major (beyond skillset)
  • Include in view the Needs Research and Hours Allocated fields
    • :Research needed displayed as coloured blobs
      • No - Yes
      • Yes - Minor - Orange
      • Yes - Major (beyond skillset) - Red
  • Fast buttons:
    • Edit the Needs Research field
  • Hours Allocated field
    • Limited to positive numbers
    • Only shows when Yes-Major (beyond skilset) is picked
  • Move the Needs Research on the same line as Hours Allocated to prevent wrapping. 
    • Reduce Status, Hours Allocated and Needs Research to col-1 
    • No delete button?
    • Height is too high
  • Edit the title on the ToDoList to remove the words “Project item”
  • Create a Save, but don't close button? (equivalent to Control-S).  
    • Can one create fast keys?

 

Complete
12.39
Make to do list viewable on the phone
Complete
12.40

Contact details

  • Remove the VCF if in Mobile mode
  • Add a QR code with my VCF details on the home page
Complete
12.41

ToDo List items

  • Format of rich text.  Can't see bullet points, colour etc
  • Make readable without a login, but not editable
Complete
12.42

ToDo List

  • Include buttons at the top to show each Project 
    • Reduce the view to the list of ToDos in that specific project  
Complete
12.43

Photos

  • Thumbnail view vs full view 
Complete
12.44

Guest View

  • Can I freeze the pane in a table
Complete
12.45

Users

  • Duplicate users when importing from Outlook don't look too different
  • Deleting users creates an error
  • Add Recruiters-All
Complete
12.46

Security

  • Photos link doesnt work for Sandra
Complete
12.47

Why isn't ATS appearing in the list of projects in the ToDo List?

Complete
12.48

Tourist Attraction

  • Photo doesn't seem to work
Complete
12.49

Flight destinations

  • Default is ‘IsActive’ = Yes; ‘IsAdmin’ = No
Complete
12.50

Flight destinations

  • Add country to the airport, and sort the list
  • Ability to create a return journey with one click
    • Popup:
      • From,  To..
      • Then creates 2 entries, one outbound, one return, with a grouping of max current plus 1
Complete
12.51

Todo list

  • Sort the list of Project buttons alphabetically
Complete
12.52

ToDo List

  • Create a Save button that Saves the ToDlist item and reopens it. 
  • Perhaps show in red the latest saved time in the edit view next to the button
Complete
12.53

ToDo List

  • Buttons to flag priorities as Top or not
Complete
12.54

To Do List

  • When a new Item is added, inherit the Project name from the location of the button
Complete
12.55

Useful URL

  • Mark as either Public or Private
    • Private only viewable by ROLE_ADMIN
  • Doesn't sort when not logged in as Admin
Complete
12.56

Photos: Mobile version

  • Buttons, 
  • Full page view of the specific photo
Complete
12.57

Blood tests

  • Can't select by date
Complete
12.58

Photos

  • Link may not work
Complete
12.59

ToDo List (Project Priorities)

  • Doesn't sort by ATS-upload date
Complete
12.60

To Do List

  • Sort the buttons alphabetically in the New ToDoList by project name 
  • Change width and height to remove need to scroll
Complete
12.61

Tourist attraction

  • Can't delete
Complete
12.62

Need to provide a MTM over-ride on the loans

Complete
12.63

Helpful files

  • Main notes don't save
Complete
12.64

Map icon import fails (similar to Whistles and Bells)

Complete
12.65

User - Messages and Londoner

  • Create “Outreach” entity
    • User (relational)
    • Category
      • Visiting London
      • Festive message
        • Festive message
        • Message sent timestamp
      • Recruiter
  • Create “OutreachTemplate” entity
    • User Category 
Complete
12.66

Medical Test Results 

  • Does not sort correctly
Complete
12.67

Photos

  • The page that directs users to the location of the photos doesn't work well on mobiles.  Reduce width
Complete
12.68

CMS

  • Remove edit link (for Admin) and replace with a separate fa-pen link
  • Similarly for photos
  • Update CMS for the Interests pages
Complete
12.69

UK days count 

  • Colour coding for the background colour for the tax year
  • Ability to load up multiple attachments rather than just one
  • Day count on each line.  A service?
Complete
12.70

To do list

  • Formatting of this section.  Why light grey - unreadable
Complete
12.71

ToDoList:

  • Can't delete a ToDo List item
  • Error message when saving a new ToDoList Item or deleting an item
Complete
12.72

Weather and Company Docs

  • Link to GPS picture. 
Complete
12.73

To Do List

  • In the buttons, include a count of Pending items 
  • Sort by # of Pending items or can we sort the buttons by priority?
Complete
12.74

File Attachments (Useful files)

  • Errors when editing
Complete
12.75

Photos

  • Only be able to delete your own photos 
Complete
12.76

Photos

  • Clean up the photos directory in live server
  • When deleting a photo,  delete the file to save disc space
Complete
12.77

Bank balances -New in Dev

  • Error: IntlException HTTP 500 Internal Server Error - datefmt_create: invalid locale: U_ILLEGAL_ARGUMENT_ERROR
  • I have seen this multiple times.  Why does it occur and how do I correct?
Complete
12.78

Garmin files

  • ChekEditor
Complete
12.79

Login page

  • Remove the buttons to login on the live site  (all sites)
    • Not controlled by the env file, but by reference to the live server?
Complete
12.80

Email

  • Email to be able to be sent from the logged user rather than the same email address for all user
Complete
12.81

ToDoList Items

  • Move the buttons at the bottom of the page to the top and stretch the Task box longer and full screen width
Complete
12.82

Security on ToDoList

  • Buttons for only the relevant projects
  • Dropdown list of the relevant projects
    • Access rights to the Add ToDoList projects
Complete
12.83

To Do List

  • Clicking on a Project button should take you to the list by that project, but to the Pending items
Complete
12.84

On local, no favicon 

Complete
12.85

Photos

  • Include name of uploader
  • Sort by favourite photos
  • View buttons. Favourites first. By uploaded by Show all or by user. 
  • Sort by who uploaded
Complete
12.86

ToDoList

  • Error attaching attachments and deleting records
Complete
12.87

User View

  • Why do the buttons not spread across the page?
Complete
12.88

Events listener

  • Appears on bottom of every page
Complete
12.89

Helpful links categories dynamic 

Complete
12.90

To Do List:  List of Projects

-New button has wrong URL

Complete
12.91

CV

  • Upload, download and Email CV doesn't work
Complete
12.92

To Do List

  • Deleting an item should return the user to referrer
  • Top priority items no longer showing in search
  • Include a Show button, and make sure works well in mobile (as with Edit)
  • When clicking on a given project, collapse all others, and only expand the one (so when you return to index it is collapsed)
Complete
12.93

Kayak Scrape

  • Have the ability to scrape either (1) Direct flights only (2) Direct and 1-stop   and (3) Both.    
    • So have 3 download buttons for each route
    • And 3 Scrape All buttons
  • When finishing the scrape, display the view including the 1-stop searches as default.   If null (no 1-stop searches) don't display null or no flights but leave blank
Complete
12.94

To Do List

  • Delete button should take one back to the referrer page 
  • Saving a new item should bring you back to the Index but for that project only
  • Check what the grey number on the top left is indicating #…  Is it correct (i thought it was number of Pending items)
  • Save button at top of page to avoid need to scroll down. Immmediate Priority box can be reduced in size
Complete
12.95

ToDoList Projects

  • LiveSiteWorking- Convert to string and include a N/A.
    • Enable sorting by  LiveSiteWorking
  • Sort ATSUpdateDate to include h:m
    • Show including h:m (to test)
  • Website link to correct for no https:   
    • And show only the part without https

ToDoList

  • Ability to collapse/expand a given project
Complete
12.96

Users 

  • Users: create a field for ‘ComingToLondon’ and Settings entry to type in the message
Complete
12.97

Emails

Complete
12.98

Flying 

  • Add save and re-edit button to the flying entity
  • Add a file attachment 
Complete
12.99

Server problem

  • Can't edit (change status) of a ToDoList item
Complete
12.99

Flight pages

  • Add a timestamp to the flight scrape
  • Add a setting in settings for how ‘stale’ a flight scrape can be before it is deleted/hidden
    • Display #days in brackets
  • Enable users (not just Admin) to refresh flights
    • Add +7D button next to a stale flight that scrapes the next 7 days
Complete
12.99

To Do List

  • The Top Priorities are not sorted by project
Complete
13.00

Flight scrape

  • Stops after a few days
Complete
13.01

To Do List

  • When deleting an item, return them to the page they left from. ie the filtered index page
Complete
13.02

Useful files

  • New - Formatting doesn't work
  • Index - formatting
Complete
13.03

Flight routes

  • Button to reset all route dates to the default in the view
  • The dropdown list includes airports not in flight prices.
  • Remove ‘Are you sure’ when clicking Admin or Active on/off
  • In House Calendar view have a link to the Flight Destinations, not just New destination

 

Airport view

  • Show Active and Inactive in two tables side by side
Complete
13.04

Birthdays

  • Go through an old Contacts saved file and check the birthdays vs current
  • Best to do with 2 screens
Complete
13.05

To do list

  • Add a date completed field 
  • For completed tasks, sort by date completed
Complete
13.06

Todo list

  • Create and compete date.   Remove ranking in complete
Complete
13.07

To Do List

  • When you complete a task, save the date time Completed and save chronologically. 
Complete
13.08

CKeditor formatting 

  • On ToDoList Items and Projects
Complete
13.09

To Do List Projects

  • Filter for Active/Inactive projects
  • Sort by Latest ATS update
Complete
13.10

Flights

  • Improve the line on left/right 
Complete
13.11

To Do List

  • Only show projects with non-zero items
Complete
13.12

ToDo list item

  • Make the default setting for Status to be Pending
Complete
13.13

Email

Complete
Complete
13.15

UK Days

  • JSON file field still showing
Complete
13.16

Flights

  • I have added a new field in the FlightStats entity called “lowestPriceOneStop”
  • Amend the Kayak scrape to include 1-Stop flights as well as Direct-only (currently the search specifies Direct-flights only) and store 2 prices for each route/date…. the best Direct flight price in the field “lowestPrice” and the best 1-stop price in “lowestPriceOneStop”
  • I have adapted the calendarindex twig and the controller to show the choice of the user (button at the top to toggle between showing both Direct and Direct+1-stop)
  • Don't wait for each scrape to update the screen.  Update after each scrape (ie per day/route)  

 

Complete
13.17

To Do List

  • Delete button shouldn't require a Check
  • In the Index, the indentations don't show
    • Second indentation
      • Third indentation
Complete
13.18

Useful files

  • Unable to edit
  • Hide the input field if populated. Tidy up the show form.
Complete
13.19

Photos

  • Edit the screen that allows me (Admin) to pick which location to see.  
Complete
13.20

Project TO-Do List Priorities

  • Need the EditorChekr for the summary of each new project
Complete
13.21

ATS Update (Paginator)

  • Causes an error
  • Note the additional processes needed for all updates (save in update.bat in notes)
Complete
13.22

Emails - Chron job?

  • Emails getting sent and returned?
Complete
13.23

Latest git pull failed on live

Complete
13.24

ToDo List

  • New does todolist_item not formatted the same as Edit.  
    • Edit box is smaller
Complete
13.25

Londoner email

  • Londoner email functionality

 

Complete
13.26

Flights

  • Kayak scrape failing
Complete
13.27

House Guest

  • New: 
    • If ‘Internal Note’ or ‘Block Out’ is checked, it should hide the GuestName.
  • Email alert doesn't work
Complete
13.28

Helpful files

  • New and edit can't change some fields
Complete
13.29

Flights

  • Deleting a destination should delete flights
  • Copy destinations 
  • Multiple destinations 
Complete
13.30

Birthday

  • Cron job
Complete
13.31

File attachments

  • Multiple files not updating
Complete
13.32

To Do List

  • Sort the Projects by their Priority rank.
Complete
13.33

SQL Download

  • Error message on live  (works on ATS -Live)
Complete
13.34

User profile

  • On all projects (e.g. stephen-nurse.com) I am continually having to run ‘backdoor’ to reset my rights. 
  • User_roles keeps getting deleted
  • I have renamed the roles to add a ‘2’ to them to see if that is the problem too

Roles

  • Login directions seems to have gone too. 

Helpful Links

  •  Helpful Links data keeps getting erased - this seems to have stopped (no reason why)  (happened again over the weekend)

Helpful files

  • Record remains but the attachments get deleted

Photos - Both CMS and Photo gallery 

  • Seem to get deleted

 

Complete
13.35

ToDo List

  • Top Priority
    • Change Controller such that the list of ToDoList is only those that have a Top Priority Item . Lines 42-48 in ToDoListController
    • Top Priority field doesn't save
  • Add ability to add files to the ToDoListItems
    • ToDoListItems Controller line 95-110
  • Increase height of the box that shows the number of individuals who can edit a project. 
  • Cascade -  When you delete a ToDoList, delete all the associated ToDoListItems
Complete
13.36

Helpful files

  • In show, it shows the attachment icon when it is null.
  • Widen the notes column in view  - test on mobile
Complete
13.37

All projects

  • Button that downloads the Live database to the Local version doesn't seem to work on all sites.
Complete
13 Limassol School Run #: 4
13.01

Childrens index

  • Need a button that will show all the children on a map, with tooltip showing child/parent name and the pickup/drop off order number

Day log

  • Each day create log of pickup times and drop off times.

 

Payments taken entity

  • Start and end date of payments by child
Complete
13.02

Set up new project and live site 

Complete
13.03

Schools

  • Add the school logo
  • Make HomePage a collage of the school icons
Complete
13.04

Adding new entity

  • I can't seem to add a new entity to the project.  I think the setup may be incomplete
Complete
14 Tech Arete #: 6
14.01

Company Description: TECHARETE SYSTEMS LTD.

Techarete Systems Ltd (‘Company’) is a pioneering technology company headquartered in Cyprus. The Company specialises in the development of cutting-edge software solutions designed to transform client booking and CRM systems used in various industries. Our commitment to innovation, efficiency, and customer-centricity drives the creation of software that optimizes resources, enhances marketing potential, and revolutionizes how businesses manage their booking processes.

Vision and Mission: At TECHARETE SYSTEMS, our vision is to empower businesses with innovative software solutions that not only streamline their booking processes but also amplify their marketing potential. Our mission is to be a driving force behind positive change, leveraging technology to optimize resource allocation and deliver unparalleled user experiences.

Core Activities: Our core focus lies in the creation of advanced software solutions that cater to diverse business needs. Our expertise extends to industries such as sports facilities, medical centres, and transportation. Through our solutions, we bring efficiency, convenience, and precision to the booking experience and improved economics for all parties. 

Optimizing Resources: Our software solutions are designed to optimize the allocation of resources. In sports facilities, we ensure that every booking maximizes facility usage and minimizes conflicts. Our software streamlines appointment scheduling, resource allocation, and client management, leading to enhanced operational efficiency. In the transport industry, our software enhances dispatching, route optimization, and customer engagement, resulting in better resource utilization.

Enhancing Marketing Potential: TECHARETE SYSTEMS' software solutions go beyond functional enhancements. We recognize the importance of marketing in today's competitive landscape. Our software includes features that empower businesses to showcase their services, promotions, and special offers, thereby increasing their marketing potential. This integrated approach enables our clients to not only manage bookings effectively but also to attract and retain customers more effectively.

Innovation and Growth: Innovation is at the heart of the Company. We pride ourselves on staying ahead of industry trends and technological advancements. Our dedicated team of experts, including software engineers, UI/UX designers, and data analysts, continuously explores new avenues to refine our solutions and introduce features that drive growth and innovation for our clients.

Collaboration and Partnerships: Collaboration is a cornerstone of our approach. We actively seek partnerships with industry stakeholders, valuing their insights and needs. By working closely with our partners, we co-create customized solutions that address specific challenges within each sector. Our collaborative spirit extends to businesses of all sizes, from startups to established enterprises.

In conclusion, Techarete Systems Ltd. is synonymous with innovation and transformation. Our software solutions are designed to optimize resources, enhance marketing potential, and elevate the booking experience across industries. With a strong commitment to excellence and customer success, we are excited to shape the future of booking systems and contribute to the growth of businesses across the globe.

Complete
14.02

No password hasher has been configured for account "App\Entity\User".

Complete
14.03

Backup

  • Is there a way to export the live database and upload it to local an automatic basis
Complete
14.04

Page

  • The pages for each product don't look great on mobile
Complete
14.05

Live site no longer works after pushing changes to live. It is a simple copy of ATS template with no customisation

Complete
14.06

Create a “The Team” page

Complete
16 Yasser Physio #: 8
16.01

Day Dairy 

  • Example: https://yasserphysio.atts-systems.com/booking/day/2026-06-10
  • Tab title: should be the date (not ‘Day Diary’)
    • Ensure the Day can change with language picked
  • Top heading (in red H1), should again show the date eg  “Wed 10 June 2026” (in H1 red)
  • On either side of the date show << or >> to indicate a function to move back/forward 1 day
  • In the table, bold the times

 

When not logged in:

  • It shows an unwanted column “Client”.      Hide please
  • The first column… The phrase “Your appointment” isn’t necessary.
    • The first column should show the venue (i.e. “Pathos studio” (then show address and map-marker) or “Home” (then show address and map marker))
  • Add a second column:
    • Cancel appointment button
  • Add a third column for the repeat bookings (use a dropdown)
  • Objective is to get it all on 1-line
  • Make sure it looks good on mobile too

 

 

When logged in as a User 

 

 

 

 

When logged as ROLE_ADMIN

  • Add a fa fa-user icon that edits the User
  • Be able to take a payment from the Day view screen 
  • Show balance of kitty for each client -new column after telephone
    • (Note: the balance should not include Future bookings – ie if someone books 5 appointments now, it should not show €500 owed…. Just €100 on each)
  • Show the eye icon to Show the booking (rather than clicking on the name) – new column at the end
  • Show the pen icon to Edit the booking  - new column at the end

 

Complete
16.01

Booking Day

  • New page looks good.   Minor improvements
    • If the date= Today, put “(Today)” after the date and make background colour yellow
    • If the date= Tomorrow, put “(Tomorrow)” after the date and make background colour yellow
    • Add a button , after “>>”  that takes the user back to “Today”

When logged in as ROLE_ADMIN

  • Looks great
  • When you take a payment, then revert the user to the Day page 

Check on mobile

Pending
16.02

Calendar messages

Pending
16.03

Time slots

  • 1 hour, 1.5 hour, 2 hours
  • Always Lunch - time variable
  • Gap between appointments: 15’ at office.  30 otherwise
  • Starts in Pathos and can be volatile. 
  • Addresses not stored. 
Pending
16.04

Add a client history page

  • Shows bookings and payments by date for a given client
  • By date range (eg month)
  • League table: List of clients and number of bookings and total €
  • Total number of bookings per day graph and total for month
  • Break out of home/studio
Pending
16.05

Create business stats page

  • By date range (eg month)
  • League table: List of clients and number of bookings and total €
  • Total number of bookings per day graph and total for month
  • Break out of home/studio
Pending
16.06
  • Add a “Venue” field to each booking, which is either the “Pathos studio” or “Client home”  (background:  Yasser either travels to the home of the client, or the client comes to his studio).  DONE- Show Client address in the form and also the in Day view 
  • Allow clients to cancel appointments themselves (eg X hours before the appointment).  Control “X” in Settings DONE
  • When showing the list of available slots, each client would only see appointments you are happy for them to take (eg if you are in Peyia, it won’t show an empty slot after to me as I am too far away
    • Calculate realistic travel times between appointments so your schedule reflects operational reality rather than simply appointment duration.
    • You could set rules as to how you control this (eg set certain days as “AH zone” or “Limassol zone” etc) – “Geolocation rules”.  
  • Allow clients to quickly rebook repeat appointments (eg weekly), which probably increases overall bookings and convenience. DONE
    • Button that “Book Same Time Next Week” - it checks to see if available before booking
    • Button “Book for X weeks” 
  • Upon booking, in the confirmation, include an ICS file to add to calendar. DONE
  • Send automatic WhatsApp/email reminders and confirmations to reduce no-shows  Email Done and WHatsapp Pending
    • Set up a Chron that emails and whatsapps clients the day before appointments to remind them of date, time, venue.
    • Control time to resend reminders in Settings (eg day before at 9am, day-of at 9am, one day T-2hours).  Ok for multiple
  • If the User does not have a GPS co-ordinates, include in the Day View a button (to be pressed by ROLE_ADMIN) that takes the current location and adds that to the User DONE
    Send reminders, ‘haven’t seen you in a while’ messages, offers etc to clients who haven’t used you for a while
    • Create a view and allow Yasser to trigger sending (don't want to over send)
  • Track payments, balances and treatment packages automatically.   DONE  
    • This requires a payment entity with three fields
      •  Date
      • Payment amount
      • Booking ID which can be null (if clients want to pay each booking as it comes, rather than run a kitty system  (https://www.worldwidewords.org/qa-kit2.html)

 

Pending
16.07

The very basic solution

A simple “billboard’ website advertising your business would be straightforward and could get it up and running for you in 1–2 days:

Other than a contact me button, that site wouldn’t “do anything “   (i.e. could not organise a calendar, store names/addresses of clients, track payments etc) so while cheap to do is only real value is on online business card. But quick and cheap to do for you if that’s all you want.

 

 

A proper website that include booking and intelligence

My sense is that the real value is building a proper booking and operational platform specifically around how your business actually works, and automate your admin and booking

 

The website/platform could do the following for you and your customers:

  • Allow clients to see your availability live and book appointments themselves online rather than exchanging multiple WhatsApp messages backwards and forwards.
  • Each client would only see appointments you are happy for them to take (eg if you are in Peyia, it won’t show an empty slot after to me as I am too far away
    • Calculate realistic travel times between appointments so your schedule reflects operational reality rather than simply appointment duration.
    • You could set rules as to how you control this (eg set certain days as “AH zone” or “Limassol zone” etc) – “Geolocation rules”.  
  • Allow clients to quickly rebook repeat appointments, which probably increases overall bookings and convenience.
  • Allow clients to reschedule appointments themselves (for example up to 24 hours beforehand) without needing manual coordination (again subset to the geolocation rules)
  • Send automatic WhatsApp/email reminders and confirmations to reduce no-shows and administration.
  • Send calendar invites automatically so appointments appear directly in the client’s phone calendar.
  • Provide direct Google Maps / Apple Maps directions to your Paphos studio.
  • Save client names, emails, telephone and addresses  - launch navigation apps (Waze) directly from your phone on your daily schedule
    • Sync client contacts to your phone too
  • Send reminders, ‘haven’t seen you in a while’ messages, offers etc to clients who haven’t used you for a while
  • Send Xmas, birthday wishes automatically and any offers

 

Manage driving time and therefore know what appointment is ‘available’ to each client

This is probably one of the most valuable features.

For a mobile professional, the challenge is not really managing a diary — it is managing geography and driving efficiently between appointments.

The system could maintain a client location database and calculate driving times between all customer locations.

With approximately 250 clients, the platform could effectively maintain a travel-time relationship matrix between all customer addresses (ie compute 250 x 250 combinations)

This allows the system to:

  • avoid impossible adjacent bookings (ie clients too far from each other)
  • group appointments geographically
  • create “zone days” (Aphrodite Hills day, Sea Caves day etc)
  • reduce wasted driving
  • reduce stress/fatigue
  • potentially fit more appointments into each day
  • The objective is simple: more treatment time and less driving time.

 

 

Other features

  • Allow quick one-click operational messages such as:
  • “Sorry - Running 10 mins late”
  • “I’ve arrived”

•     Support referral rewards and vouchers.

•     Allow clients to scan a QR code to:

  • save your contact details
  • book instantly
  • Fast links to leave Google reviews
  • recommend you to friends
  • Support multiple languages
  • English
  • Greek
  • Russian
  • Israeli etc

•     Track payments, balances and treatment packages automatically.

 

Taking Payments

I actually think it probably makes sense for you to continue mainly using cash and/or Revolut rather than forcing card payments as much as you can, as this avoid paying unnecessary fees.  However, it does create problems when you don’t have change etc.

However, the platform could still recognise cash payments as well as credit cards (usually 1-2% fee) or Revolut (free):

  • track who has paid
  • track prepaid balances/packages
  • maintain client credit (“kitty”) balances
  • reduce the need to remember everything manually

 

What’s available on the market (ie off the shelf) as comparison

I also looked properly at systems already “in the market”  - ie essentially off the shelf where you benefit from economies of scale.   The market leader is called “Fresha”, which seems to be used by a number of salons, podiatrists etc in Pathos… My podiatrist in Pathos uses it for example.  To be clear Fresha is not their site but just the calendar/payment system embedded in it.   But you test it here -> https://www.nynpodiatry.com/   Start to make a booking (but don’t confirm it obviously!)    

 

From the reviews, Fresha is good as a generic booking platform for salons and clinics.  Fresha changes about €2.50 per booking, once payment processing and messaging/SMS reminder costs are included. For you doing approximately 40 appointments per week,  and if all are on line  that’s around €400/month. Plus they charge 20% on the first booking for new clients and their first appointment.   Plus you still need to build the simple website to plug into it.  

 

The other problem with Fresha is that it is designed around fixed-location businesses rather than mobile therapists driving between appointments all day. So it will not be able to optimise across geographies and plan an optimal day including driving.  Think of a barber similar business. So ito does not really give you:

  • your own bespoke operational system
  • your own fully customised website
  • your own independent platform
  • reviews are internal and not google specific

 

Instead, you are effectively operating inside somebody else’s ecosystem and pricing structure.

 

The platform I am proposing would instead be:

  • your own branded system
  • multilingual
  • specifically designed around mobile massage/physio work
  • operationally focused around geography, travel time and scheduling efficiency
  • fixed predictable monthly cost
  • no marketplace commissions (ie 20% commission on new clients)
  • fully adaptable as the business evolves

 

 

Realistically, I think this is 4–6 weeks of development work (I have 2 guys in India who help me) and if priced commercially would likely cost ~€10k.  That’s a lot, I know. 

 

Here’s my proposal, I think the fairest structure is probably:

  • I will pay all the upfront development costs
  • Use it for free for 1–2 months as a live pilot period while we refine the workflow around how you actually operate in practice.  
    • If you don’t like it and don’t think it offers you any value we can dump the project, at no cost to you;  I am confident it will make a difference and you will want to take it.   
    • During our sessions you can give me feedback on the system and I can improve it.  
  • Then, after the trial and you accept it:  monthly fee: €200-250 month depending on what you want (so I am assuming you will run it for 5yrs for me to break even)
    • Includes platform/support fee, your own website URL (you should pick something that will drive more business to you – e.g. paphosmobilemassage.com)
    • Includes maintenance and software upgrades
Pending
17 Thea Vista Pissouri #: 3
17.01

New booking

  • Implement minimum stay parameter, additional guest surcharge as required
Complete
17.02

Translation

  • Translate copy and all headings into required languages (to be agreed with John and Catherine)
Complete
17.03

Booking process

  • Create ‘Flying from’
  • Make booking ‘Pending’ until confirmed by John/Catherine
Complete
18 News-scrapper #: 39
18.01

News Lists

  • Issue is that the buttons trigger a refresh and slow.
  • Can one overcome this with a javascrpt flag and a press to do all button at the end

Users

  • Centrally scrape the content of the articles.  Check once the login of the user at their login stage, and track if good.  Then show in the title page if the login is confirmed as valid
Pending
18.01

Market Data

  • Future T+2 data….  
Complete
18.02

Scrape content

  • Check that the scraping of all the news sites works
  • Also ensure that the content and not just the headline are scraped saved in the ‘fullContent’ field in the news entity.
  • In the view, hovering over the title will display the full content
  • For websites where the content is behind a firewall, then login and scrape where available.
Pending
18.02

Market stats

  • Scrape doesn't work in live
Complete
18.03

Update scrapers which have broken over time

WorkingNot working
  • CNBC
  • Teletrader
  • FT Markets
  • Economist
  • FIA
  • Matt Levine
  • ISDA
  • BIS
  • Clarus
  • Economist Expresso
  • FirstFT, FT Main
  • Reuters
  • Economist Special Reports
  • Risk
  • EACH
  • FN
  • Global Custodian
  • Securities Finance
Complete
18.03

Set up a Payment gateway- Stripe? 

Pending
18.04

User Passwords

  • List the users in alphabetical order
  • When you edit a User Password it changes the User name
Complete
18.04

Deleting LinkedIn Users

  • Delete MY Linkedin contacts should not delete them but mark them as hidden
  • How to handle when we have a contact shared with multiple "owners"?
Pending
18.05

LinkedIn Contacts

  • Deleting LinkedIn Contacts -just the owner's contact and the languages spoken
Complete
18.05

User Password checks

  • Need to develop an algorithm to check the passwords upon login
Pending
18.06

Favicon

  •  Not working, both in bookmark and in tab, but only when on the home page… Odd
Complete
18.07

LinkedIN scrape (https://www.linkedin.com/in/stephen-j-nurse/)

  • Include the summary experience and the employment history
Complete
18.08

LinkedIn Contacts

  • Don't save a Language Spoken for the null case
Complete
18.09

Login

  • Add ability to register
Complete
18.10

Read count

  • The new count needs to be user specific. 
  • So this is the number of unread articles in the past 24 hours by user.   Service by user and source
  • The read all button should not affect archives
    • Perhaps in archive you can have unread shown separately. 
Complete
18.11

Linkedin contacts 

  • Create a User-Settings upon scrape
Complete
18.12

User-specific summary email

  • Once the broken scrapers are fixed, the main ‘ask’ is to make it “user-specific” (ie each user can define their own list of stories and categories to include in the summary email). So the following need to be linked to the logged user:
    • Headline categories (eg Macro, CV19, Corp, Cryp, Pol, Ukraine, Clearing, x)
    • What to include/exclude for the email
    • What economic stats are key to them
    • Their own list of favourites and commentaries
  • At the moment each of these fields are attached to the news article so we need to create a User-News field relationship to achieve this.  Does that make sense to you?
Complete
18.13

Settings

  • Add VCard code (Jeroen)
Complete
18.14

Favicon

Complete
18.15

Bugs

  • subscriptions_buttons line 45
    • Make this dynamic?
  • source\index line 43
    • Make this dynamic?
  • Favicon issue on live (when favcicon file exists)
Complete
18.16

 New sites to scrape

Complete
18.17

Other

  • Make the Economic Stats scrape time 1am and 8.30am
  • Cron does not include FirstFT
  • Add a button to test that the FT.com login is working
  • Full content button (FT) only shows in first block (unassigned)
  • Upon user login, run a check on the user's logins and passwords and determine access accordingly
Complete
18.18

LinkedIn:

  • Popup that checks that the LinkedIn login and password are successful
  • The first result should return the number of connections and estimate the time to download them, before proceeding.
    • Advise the user how long it will take to download and that a file will be emailed to them 
  • Email csv file - one-step directly after the scrape -  ie save a file in the database at the end of the scrap and email (ie merge the 3 buttons we have)
Complete
18.19

Bugs

  • Market Economic Stats scraper doesn't work in live.  Not just United States (filters).  Aman is re-writing the scrape 
  • Chron job for  MarketStats doesn't work 
Complete
18.20

User memberships

  • Dates
Complete
18.21

CompanyDetails

  • The HideOther inputs not coming through into Live
Complete
18.22

Formatting

  • Login button
  • Subscription page to show when not logged in
  • Ability to look at each headline
  • User Edit page -
    • Show categories
    • Button to delete photo
    • Show photo
    • Hide Status from user
  • New stories
    • No like/read buttons
Complete
18.23

Memberships

  • Create a 30-day free trial period
    • Unable to extend
    • Link the systems login to LinkedIn login and other site logins to avoid gaming
    • Buttons to upgrade
Complete
18.24

User

Add time zones

Complete
18.25

Security

  • Add role heirachy in security.yaml
Complete
18.26
  • Review of security (Dashboard -changed to ROLE_USER)
Complete
18.27

Users

  • Delete doesn't work
  • Include in user view.
    • Membership
Complete
18.28

Pricing

The functions of the website are

  • LinkedIn scrape
  • News:
    • Single place to read articles
      • Summary access only
      • Hover for full article
    • Abilty to mark articles as read, to avoid re-reading
    • Abiliy to select key articles and send summary email 
    • Mark economic stats as favourite - to generate an email
    • See what others are liking - are you missing an important well read article?

 

  • Summary Read-only  
    • Full articles available via a link 
  • One-stop Read access
    • However
      •  
Complete
18.29

Removed the CMS and Settings entities

Why isn't LinkedIn password appearing on the list in a User's profile?

Complete
18.30

LinkedIn contact export

  • Develop a view of the contacts that can be expanded/contracted [like Excel]
  • Import photo and save file
  • Export file - two types: Full CSV and Outlook
    • Export to directory per user
    • Develop a concatenated Notes for the Outlook export
  • Control the number of exports (2 now)
  • Don't show the flashing screen.  Warn on timings
  • Automatically email file
Complete
18.31

Economic stats

  • Highlight and suppress buttons not working
  • Button to use the Teletrader defaults
  • Button to remove your highlight or take standard
  • Or if blank use the default - over-ride
Complete
18.32

Economic Market Statistics

  • Chron job.  Refresh every 15mins
    • Button to refresh manually if >10mins 
  • Historical view by stat
Complete
18.33

Bugs

  • Merge the ‘Highlight/Standard/Low’ buttons into a pop-up.  To avoid confusion. 
  • Set User bug in Market Stats
Complete
18.34

Subscription page/Memberships

  • Check whether a user has a membership upon opening the Subscription page
    • If not, create a New membership, initially a Free membership
    • The new Membership button shouldn't open the form, but just save the details as per the button
      • Include Today's date 
      • The new membership button shows all users to Non-Admin users
Complete
18.03 XVA Consulting #: 4
18.04

Dev→Live

  • The project “XVAconsulting” is working on dev, but not on live
  • I had problems with installing the pagination module in composer and we might be on the wrong version of php
  • To push to live:  ssh -p 55101 ubuntu@54.36.163.14
    Password: Decartes99
Complete
18.05

Introduction

With a career spanning several prestigious institutions, I have accumulated a wealth of experience and expertise that can be of significant value to your organization. I invite you to explore my journey and accomplishments in various roles across the financial industry.

During my tenure at JPMorgan, I led a transformative initiative within the Clearing and F&O business. By introducing front-office risk-management and pricing discipline to this previously considered "agency" business, I successfully revamped the risk and capital infrastructure. This endeavor resulted in doubling the revenue of the Clearing business while reducing the capital, GSIB, and residual interest footprint. Notably, my team's contributions led JPMorgan to win the Risk award for best OTC Client Clearer in 2019 and 2021.

Prior to that, I played a pivotal role in implementing funding adjustments (FVA) and lifetime cost of capital (KVA) for the derivative franchise globally, which had a substantial impact on the firm's performance. Furthermore, I spearheaded the introduction of single and multi-currency OIS discounting for collateralized derivatives, establishing a centralized firm-wide utility for managing funding risks across all lines of business and regions.

 

 

XVA

1. Collateral optimisation/CSA renegotiation/Differential Discounting (DD) recognition

The idea of capturing value in trades through recognition of different eligible assets (i.e. initially the issue of moving from Libor to OIS discounting, but also extending to other assets in the CSA) has been well known since around 2009-10 (when GS reputedly made the majority of their FICC revenue optimising for this). Most dealers have updated their systems to avoid this arbitrage in their bilateral business (crystallizing considerable costs for the late movers). 

However, this concept is not completely efficiently captured in every aspect of the market, for example where the trades are “given-in” under a Clearing Agreement. That market is a post trade approval market and essentially DD-agnostic and hence it is still open to arbitrage.  Specifically, when a client goes to market, the Executing Broker (EB) prices the trade according to their DD curve facing the Clearing Agent. These can be different from different EBs, and is not the same curve as the DD curve the Clearing Agent has with the client. So, in effect, the trade is priced on the “wrong” discount (DD) curve and a client could potentially identify backwardation opportunities particularly for trades with large funding deltas.  

2. CVA mining and IM optimisation – XVA Hub

Should a corporate or hedge fund have any uncollateralised risk, a Central Hub function could help mine bank’s CVA reserves where there are offsetting risk and or credit deltas across counterparties.

Similar to CVA mining, moving trades between counterparties can optimise the availability of the $50m threshold under the Non-Cleared Margin Rules (NCMR), reducing total IM funding needs.   For example, if their cost of debt is 5%, adding 5 dealers and optimising for threshold could save 5*$50m*5% = 12.5m per annum

Another specific variant of the IM optimisation idea is to convert Cleared IR delta into uncleared put and call swaptions, where the IM can be bilaterally negotiated and offset bilateral risk. In essence, it can result in free funding.  

A large hedge fund, recently set up a Central Hub to manage the relationships and XVAs with all their dealers, to prevent unnecessary credit costs/exposures and to minimise margin funding costs.

 

Complete
18.06

Consulting Services in CVA and XVA: Issues and Offerings

As a highly accomplished derivatives risk manager with extensive experience spanning trading, marketing, and risk management at JPMorgan, your expertise uniquely positions your consulting firm to offer comprehensive services in the field of Counterparty Value Adjustment (CVA) and XVA (X-Value Adjustments). Drawing from your vast experience, your consulting firm can address a multitude of critical issues and provide valuable insights to clients in the financial industry. Here's a detailed exploration of the issues and offerings your consulting service may provide:

CVA and XVA Methodologies and Implementations:

  • Offer guidance on implementing and enhancing CVA and XVA methodologies, leveraging your experience in pioneering CVA trading and defining philosophies for derivative counterparty risk management.
  • Provide expertise in designing and implementing systems for comprehensive XVA calculations, including CVA, DVA (Debit Value Adjustment), FVA (Funding Value Adjustment), and others.

Market and Regulatory Developments:

  • Stay abreast of evolving regulatory frameworks related to counterparty risk, including Basel III and IV, ISDA SIMM (Standard Initial Margin Model), and other regulatory changes impacting derivatives trading and risk management.
  • Offer insights into regulatory changes affecting non-cleared margin requirements, capital metrics (e.g., SLR, LCR, NSFR), and their implications on derivatives pricing and risk management.

Risk Management and Optimization:

  • Provide guidance on optimizing counterparty risk management strategies, incorporating differential discounting and collateral funding optimization techniques pioneered during your tenure.
  • Assist clients in developing comprehensive risk management frameworks to mitigate credit, funding, and capital risks across the entire derivatives portfolio.

Product Structuring and Pricing:

  • Offer expertise in structuring complex derivative products tailored to clients' specific risk profiles and investment objectives.
  • Provide pricing analytics and model validation services for structured products, drawing from your experience in executing derivative transactions for structured finance businesses.

Client Clearing and Margin Optimization:

  • Assist clients in optimizing client clearing operations and margin requirements to enhance profitability while maintaining risk discipline.
  • Provide guidance on establishing market risk-aware pricing frameworks for client clearing services, based on your experience leading the implementation of FVA (Funding Valuation Adjustment) and KVA (Capital Valuation Adjustment).

Technology and Infrastructure Enhancement:

  • Offer guidance on technology and infrastructure enhancements necessary to support advanced risk management and pricing analytics, leveraging your experience in technology and infrastructure change management.
  • Assist clients in implementing cutting-edge risk management systems and tools to streamline operations and enhance decision-making processes.

Industry Engagement and Thought Leadership:

  • Provide thought leadership and industry insights through participation in industry forums, conferences, and regulatory initiatives.
  • Offer bespoke training and educational programs to disseminate best practices in CVA and XVA methodologies and risk management techniques.

Client-specific Solutions and Advisory:

  • Tailor consulting services to meet the unique needs and challenges of individual clients, spanning investment banks, asset managers, hedge funds, and other financial institutions.
  • Offer bespoke advisory services to address specific client concerns, such as optimizing derivative trading strategies, managing counterparty exposures, and enhancing regulatory compliance.

In summary, your consulting firm's offerings would encompass a broad spectrum of services, ranging from methodological expertise in CVA and XVA calculations to strategic advisory on risk management, regulatory compliance, and technology enhancements. Leveraging your extensive experience and thought leadership in derivatives risk management, your firm is well-positioned to provide invaluable guidance and solutions to clients navigating the complexities of counterparty risk in derivatives trading.

Complete
18.07

Consulting website

  • Create a new website that is largely a billboard site.  Call it “XVA Consulting” 
  • Create a live website and SSL
Complete
19 ITF Proposal #: 1
19.01

Searching for tournaments (https://www.itftennis.com/en/tournament-calendar/world-tennis-masters-tour-calendar/)

  • When searching, you can filter/sort by date or country….. but not by Category, or Surface
  • The Name of the Tournament is always a concatenation of the City and the Category, so in effect is superfluous 
  • Some of the Cities are in CAPS, some not.
  • The Country filter doesn't work terribly well.  Specifically, if I am searching for "Cyprus"  yet have selected a month where there are no tournaments in Cyprus, then the search fails to recognize Cyprus.  In addition your search function can be configured to capture structured to look for other a couple of ways of spelling a country.  For example, I looked for “England”, and found nothing.   It should suggest Great Britain.   Similarly United States doesn't trigger, the code is USA.  However you can easily configure where your country database has 2 or 3 alternative search names (hidden) that will then show “Great Britain” if I were to type any of the following "UK, GB, England, Wales, Scotland, Northern Ireland etc)

Registering/Applying for a tournament

Checking out the draw for tournament (this page→https://www.itftennis.com/en/tournament/mt400-limassol/cyp/2024/s-mt400-cyp-2024-004/draws-and-results/) 

  • Each tournament has a single URL for all the draws (Mens, Womens, Mixed…. All age groups), and they control the display with Javascript 
    • Example: https://www.itftennis.com/en/tournament/mt400-limassol/cyp/2024/s-mt400-cyp-2024-004/draws-and-results/
  • That means you can't share the URL to direct family/friends/partners for specific draw. You have to tell them to navigate to say "Mens / Singles, Over 45)
  • Moreover, the site doesn't remember anything about the user, so refreshing the Age category resets the gender of the user. 
    • I would recommend tracking the default with a cookie or alternatively providing a unique URL (trade-off is that it is slightly to flick between tournaments, but most users are not doing that)
  • The order of play page doesn't optimally use the screen width. On high resolution screens you could see 12 courts simultaneously, rather than clicking across screens
    • Similarly the court numbering at the top is confusing. 
    • Granted on a phone it needs to be swipe right for 
Pending
21 Ski Jobs #: 1
21.01

Objective

  • To create an improved version of https://www.ski-jobs.co.uk/, which we started before (the ‘recruitment’ site).  
  • We can restart looking at that in parallel to #1 and #2 as I think once this is working I can do a lot of the development work myself.  I want to first make the workflow superior to this site and then I want to scrape all the jobs from this site and a few others.   
  • It will become evident as we build this , but first priority is to get it working with fresh (manually entered) data. 

Competitor sites

Search fields:

  • Location: French Alps/ Swiss Alps
  • Season: Summer/ Winter/ All-year
  • Duration: 3 months or Start and End date:
  • Jobs: Chalet Host/ Chalet Couple/ Chalet Chefs/ French-speaking PA/ Resort Manager/ housekeeper/ 
  • Salary: Competitive/ 1,700 Euro net per month (French contract; food and ski hire included) – Chalet Hosts? Driver & hospitality assistant @ Meriski/ 2,100 Euro net per month for Chalet Chefs (working 5 days a week)
  • Workdays: 6/ 4 (driver & hospitality assistant @ Meriski)
  • Nationality:  EU passport or Carte de sejour/ New Zealand, Australian, Canadian, or South African passport holders who have obtained a working holiday visa for France

For candidates

  • Candidate CV review
  • Referal fees

For employers:

  • Ask clients what they want
  • Success based (no hires, no fees)
  • Target audience may be France
  • Transport from UK to France/Austrai( check fllght costs with lots of luggage in early dec)
  • Contract generation
  • University fayres
  • Visa, Tax

Clients

Pending
23 Flight Database #: 3
23.01

Separate out the Flight scraping software from the AX Tools and the StephenNurse site and consolidate into a single site. 

Scrape all flights to/from PFO and Larnaca airports and tracks prices over time as well as flight times and actual arrival and depart times

 

Pending
23.02

Flight database

  • The objective is to build up a database of all future airline/flight numbers/departure/arrival times for a given airport (eg PFO).
  • The objective is to get data about every flight scheduled in to/out of Pathos airport (or Geneva airport).  So each day going forward, i want to see the flight number, airline, destination/departure airports, schedule time and actual departure/arrival times.
  • The flight database is designed to provide data to the AXtools and the ParkNRide projects.
  • To do this I want to list all the destinations served by an airport (eg for PFO it is LGW, FRA, LHR,  LSN, etc) 
    • For each date and route (eg LGW-PFO), return the flight details.
    • Look for direct (non-stop) flights only
      • Return the list of flights (date, airline, take-off and landing time, price)
    • We will match that to a database of flights (airline, route, time) to get a flight number.   If a new flight, add a new record to look up the flight number.

The source could be either kayak.com or aviationstack.com (Login: nurse_stephen@hotmail.com; Password: Descartes99)

Pending
23.03

Add Flights/Destinations

  • Include Flight prices.
    • Copy from Stephen-nurse.com
    • Allow users to add a new airport; Show if flights need refreshing
    • Add a view with dates with flight prices and villa availability
Pending
25 Irish Passport Consultants #: 1
25.01

Add a new project and site called “IrishPassportApplicationExperts.com”.

Copy from ATS

Complete
26 ParkRide #: 1
26.01

Initial setup

  • Create a live URL
  • Establishg the SSL
  • Get working for basic version
Complete
28 Aphrodite Winter Cash Cup #: 1
28.01

Need to update the User entity to include Playing Singles/Doubles

Complete
29 Harcourt #: 1
29.01

User- Doubles Partner

  • Show?hide Doubles Partner if playing doubles
  • Present a list of player who are playing doubles, and not yet already taken
Complete
30 Personal Admin #: 7
30.01

Admin

  • Populate medical stats online 
Complete
30.01

Kimberly admin

  • Ax -Keys and license, miscellaneous papers 
  • Nicolas.  Tell him about the funeral and let him know about keys and driving license
Pending
30.02

Admin

  • Car MOT, service and tires 
  • Car keys cut - MS Locksmith
  • Toasty picture frame - Mondart Framing & Art Supplies or Kings Mall
  • Hygeniest - Farfaras Dentist Hygenist
  • Cosmetic dentist
  • Health MOT
  • Book RAK Flights
  • Ozempic
Pending
30.03

James

  • Prepare summary of EIS loan
  • Think about EIS loan and call option idea
Pending
30.04

TechArete

  • Write a tech contract for Malcolm
Pending
30.05

Personal Admin

  • Will
  • Health insurance
  • Physio exercises
  • IT course 
    • iOS; Buy Mac
  • Facebook list
    • e-bike. 
    • Padel board 
  • Whey powder / Creatine
Pending
30.06

Pension

  • Call Towers and Reassure to ask about drawdown (one time or multiple)

UK Tax

  • Loan interest and Scion
Pending