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.
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
Aman: Please work out how to scrape all the jobs from the following sites:
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)
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)
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
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:
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?
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
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
As you know, we haven’t yet managed to get the Alpex software to work standalone, but once we have that working I would like to adapt it in a number of ways. My first objective is to enable it to work for at a number of new airports and more strategically I want to move away from the owner-operator model (where I own the cars and employ the drivers) to an aggregator model where we outsource to other single driver operators. This will be quite a build change. In addition I want to build a iPhone (and maybe Android) version of the client website so we can use the client tracking features.
Park-To-Fly
I have seen a company here in Cyprus that could benefit from most of the functionality of the Alpex software. The company essentially provides a car park close to the airport, where passengers can park their cars near the airport while they are on holiday, and the company drops them to/from the airport in small buses.
In essence, from an IT perspective, their business is very similar to my Swiss bus company (Alpex), so I was proposing to strip down the Alpex system to automate that business. The key is that it requires the company to track flights, and move people on/off a shared bus to/from the airport. So there are lots of synergies.
Accommodation software
I was going to buy a house in Cyprus and rent it out in the summer months. I would like to build a website for to advertise that house and others around. Similar to booking.com
Kids Travel Lite
I met the owner of a company called KidsTravelLite.com. In short, that company hires children’s equipment to tourists while they are holiday (e.g. prams, cots, toys). Her site is aesthetically beautiful but very simple, and I offered to improve it. It does not do inventory management or track flights and this could synch into the taxi app. One idea is to integrate the hiring with the taxi to/from the airport
Recruitment site
Overall app
I thought I would ultimately combine all the with the tennis club website into a single offering (single resort app) as they all rely on some similar info (e.g. accommodation details, flight details)and I can see synergies if customers only have 1 login. In future I can add restaurant bookings, baby sitters etc. Perhaps that ‘single login’ is something we should talk about at the start?
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.
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
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.
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?
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.
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.
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.
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
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
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
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.
Create a template project that contains the basic structure of all the sites, so I can make changes centrally and have those changes become available to all the projects
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)
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
Index: The button taking you to the local google weather page doesn't correctly pick up the location (goes to the user's home location rather than say ‘Haslemere’)
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)
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
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.
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
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:
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:
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.
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
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)
This tries to scrape from www.sbb.ch the train times for the next 4 or 5 days. Routes that are interesting are Martigny to Geneva Airport or LeChable to Martigny or LeChable to Geneva Airport
The routes are saved in another entity (TrainRoutes) and the times/dates are in the entity SbbTrainTimes
Two extra columns have been added to the Accommodation Index view, that will show the number of transfers and the value of the transfers taken 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
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
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
Cycle through the list of accommodations and extract all the details. All info available in the Index and no need to go into each record, but need to open 23 different pages
My idea is that various taxi companies and individual taxidrivers 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?
So I want to 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)
So let's say there are 50 drivers.
Can I control 50 x CMS inputs centrally (ie each CMS page would need to be linked to a taxi driver)
Can I point their own website to my code (eg. www.johnstaxi.com) if they already have a URL?
So in each Partner company I would include theirwebsite link if they are adopting my system
A lower standard is that they can just see the trips and can bid on them (and manage them themselves).
For the Resort Contacts (Staff) column, I have a link to the Resort Contacts index file and the count of the number of staff. A popup showing the names of the staff would be nice.
Same for Chalets - currently shows the number of chalets and a link to the Accommodation list. A popup would be terrific
Editing
The email recipients should show the list of employees (ie Resort Contacts) for that affiliate in the dropdown list.
Recall the Resort Contact is just a reference to a User (ie links a User ID to an Affiliate ID)
Add a + button to add a new Resort Contact for that Affiliate
In the index, show the recipient names and email in popup
Sign
The sign is the file used as a background on the driver's iPads when collecting the client from the airport. So it will have the hotel/chalet logo etc and on top of it it will show the client name.
Check that when you save a sign document that the input field no longer shows, there is a default button and it is shown in a thumbnail in the index view
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
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
In a transfer, if the Destination Type is not City (eg is an Airport or Train Station), then take the default address/GPS and no dropdown box for address.
In other words it is like there is only one address for that destination.
In the transfer record, store the address as the accommodation id (as we need that to look up other details)
If the transfer is a City and you are given the choice of addresses, you should have the option to add an address manually
This should be a new field (with text) and this transfer will appear in the “Error” list and ideally the staff will update the Accommodation database and check it for the driver.
If the transfer is for a train, then the address is not relevant, but ask for train depart or arrival time.
if the transfer is to/from an airport, then it should offer a list of flights (and save the flight id). if the flight is not there, allow user to input: flight number, arrival/depart time and destination and time. Again these are all new fields and hopefully we will update the flight database… (and transfer appears in the ‘error’ list).
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
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
‘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”
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
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)
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
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 3 new fields – 1) “Price Adjustment” (float) and 2) “isSharedAllowed” (boolean) and “sharedTransfers” (relation linked to Transfer Entity – ManyToMany).
Price Adjustment: Each transfer will have a price, which will be composed of the “standard price” plus the possibility of a manual ‘adjustment’ (which most of the time is zero). The adjustment might be positive or negative and for example might be because the customer wants something special (eg snacks/drinks in the car, or a stopover en route) etc. The “standard price” will be calculated from the destination combination (eg VRB to GVA), the number of passengers and potentially the time of day, and we will designed an entity to capture that. And the Price Adjustment is a manual input. The standard price is computed dynamically – but I want to save it in case the formula changes as we can’t change a price already given (hence a field is required. Make sense?
IsSharedAllowed. The concept I want to introduce here is that I want to offer people the ability to share a taxi. Typically the vehicles will take 7 people, so if you are a family of 4, you have 3 spare seats. I will only allow a share if the others are on the same flight/train (if inbound – as sometimes flights are late and don’t want any additional waiting) or within [10] mins for a flight/train departure. So if a client says yes to “isSharedAllowed” we will try to combine and split the costs.
To do that we might need to link transfers together using the sharedTransfers field which will contain which transfers are being combined (typically 2 clients (ie 2 transfers) but could be more, eg 4 passengers +2 passengers +1 passenger) And then we can assign all [3] transfers to the same vehicle/driver….
For the train pickup service that is the same concept – we will have a bus (say 13 seats) that can take various combinations of passengers to fill it (could be 13 single travellers). That service will take people from LeChable train to their chalets in Verbier. Does that make sense?
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
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
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.”
Build the forward schedule (so clients can book a trip say 2 weeks in advance
Check and update live times on the day of the flight.
And the objective is to then marry that data
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