Saltar al contenido principal
Los detalles del producto se muestran en inglés. Próximamente traducciones.
Travel Agency Operations for ERPNext — A build-to-order ERPNext application that turns each trip into a booking file — travel — 1/1Vista previa ilustrativa

A build-to-order ERPNext application that turns each trip into a booking file

— travelers, supplier confirmations, costs and receipts in one submittable document with live margin.

ECOSIRE builds, installs and supports it on your ERPNext v15 or v16 instance.

¿Qué es Travel Agency Operations for ERPNext?

A build-to-order ERPNext application that turns each trip into a booking file — travelers, supplier confirmations, costs and receipts in one submittable document with live margin. ECOSIRE builds, installs and supports it on your ERPNext v15 or v16 instance. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Características clave

`Booking File` DocType with child tables for travelers and services — one submittable document per trip, with a naming series configurable per branch or business unit
Per-service supplier linkage: each `Booking Service` row links to an ERPNext `Supplier` and, on confirmation, to the Purchase Invoice recognising the payable — no parallel ledger
Live package costing in the file controller: multi-currency cost lines converted at the service-date exchange rate, per-service or per-file markup, and stored gross margin and margin percent fields
`validate` and `on_submit` doc events in `hooks.py` block submission of a service priced below cost unless overridden by the Travel Manager role, and require a supplier confirmation reference before a service reaches `Confirmed`
`Supplier Statement Import` DocType ingesting BSP/ARC and bed-bank statements from CSV or XLSX, matched against booking services on confirmation reference and ticket number into matched / variance / unmatched buckets
Reconciliation posts accepted statement lines against the linked Purchase Invoices and routes amount variances to a configurable expense account, with a per-run audit record naming user, source file and resulting GL entries
Daily `scheduler_events` job scanning open files for cancellation deadlines inside a configurable window, raising ToDos and an email digest to the file owner
Client Script margin panel on the Booking File form plus a one-click Sales Invoice action that pulls only the services flagged billable
Whitelisted API methods (`@frappe.whitelist()`) for file creation, service confirmation and status lookup over the Frappe REST API, executing under standard Frappe permission checks
Role Profiles for Travel Consultant, Travel Manager and Accounts, with permlevel restrictions so consultants cannot edit submitted supplier costs
Print Formats and Letter Heads for itinerary, service voucher and traveler-level ticket summary, generated from the same Booking File as the accounting entries
Query reports for file profitability, margin by service type, margin by supplier and unbilled cost ageing, usable in the ERPNext report builder and dashboard charts
Traveler child table capturing passport number and expiry, with a validation warning when a document expires inside the travel window
Patches and fixtures shipped with the app so `bench migrate` upgrades cleanly, with support for Frappe/ERPNext v15 and v16

Hecho a medida, listo para ti

Sin configuración por tu cuenta: una app funcional creada, instalada y con soporte de ECOSIRE.

  1. 1

    Haces el pedido

    Empieza con un precio único de desarrollo. Definimos el alcance contigo en el arranque.

  2. 2

    Creamos e instalamos

    ECOSIRE la crea, la configura y la instala en tu ERPNext.

  3. 3

    En marcha + soporte

    Sales en vivo en aproximadamente una semana laboral, con dos semanas de soporte tras la puesta en marcha. Los defectos en el código que entregamos se corrigen sin coste.

Especificaciones técnicas

Compatibilidad con ERPNext
—
Licencia
La licencia requiere confirmación
Requisito de Python
Python 3.10+
Base de datos
MariaDB 10.6+

Sobre este producto

A travel agency does not sell a stock item. It assembles a file: two air segments from a consolidator, four hotel nights from a bed bank, a transfer, a visa, insurance — each with its own supplier, its own confirmation reference, its own payment terms and its own cancellation deadline. ERPNext handles the money side of that well once it exists as a Sales Invoice and a set of Purchase Invoices, but nothing in ERPNext core holds the file together. There is no DocType where a traveler list, a PNR, five supplier confirmations and a client quotation live as one record, so agencies run the operation in spreadsheets and only tell ERPNext what happened after the trip departed. The predictable result: nobody can answer "what did file TRV-2481 actually make?" until month-end, and supplier statements get reconciled by eye.

We build a proper Frappe app — travel_agency_operations, its own module, installed with bench get-app and bench --site install-app, never a pile of Custom Fields bolted onto Sales Order. The spine is a Booking File DocType with child tables for Traveler (name as per passport, document number, expiry, ticket or voucher number) and Booking Service (service type, supplier, confirmation reference, service dates, cost currency and amount, sell amount, cancellation deadline). Each Booking Service row links to the ERPNext Supplier and, once confirmed, to the Purchase Invoice that recognises the payable — so the file is never a parallel ledger, it is a controller over standard accounting documents. Package costing is computed in the Booking File server-side controller: cost lines convert at the exchange rate captured on the service date, markup applies per service or per file according to a Travel Settings single DocType, and gross margin, margin percent and unbilled cost are stored as read-only fields you can group and report on in the ERPNext query report builder.

Technically the app leans on Frappe rather than fighting it. Document events registered in hooks.py (validate, on_submit, on_update_after_submit) enforce the rules that actually cause losses — a file cannot be submitted with a service priced below cost unless a user holding the Travel Manager role overrides it, and a supplier confirmation reference is mandatory before a service moves to Confirmed. A scheduler_events daily job scans open files for cancellation deadlines falling inside a configurable window and raises ToDos plus an email digest to the file owner, which is the single control that stops silent no-show charges. Client Scripts on the Booking File form give the consultant an inline margin panel and a one-click Sales Invoice action that pulls only services flagged billable. Whitelisted methods (@frappe.whitelist()) expose file creation, service confirmation and status lookup over the Frappe REST API so a GDS bridge, a B2B portal or a messaging bot can push confirmations in without touching the desk; every endpoint runs under standard Frappe permission checks, and we ship Role Profiles for Travel Consultant, Travel Manager and Accounts with permlevel restrictions so a consultant can build files but never edit a submitted supplier cost.

Supplier and BSP reconciliation is its own DocType. A Supplier Statement Import accepts the BSP/ARC or bed-bank statement as CSV or XLSX, matches lines against Booking Service rows on confirmation reference and ticket number, and produces three buckets — matched, amount-variance and unmatched — with a Reconcile action that posts accepted lines against the corresponding Purchase Invoices and routes the variance to a configurable expense account. Nothing posts silently: every reconciliation run leaves an audit record naming the user, the source file and the resulting GL entries. Customer documentation uses Frappe Print Formats and Letter Heads — itinerary, service voucher and traveler-level ticket summary — generated from the same file, so what the client receives and what the accounts show cannot drift apart.

This is build-to-order, and we are explicit about what that means. There is no download button; there is a scoping call. We walk your current desk workflow, your supplier mix, your statement formats and your ERPNext version, agree a written scope, then build against that scope, test on a staging site restored from your data, and hand over with source. Typical delivery is one working week from confirmed scope, depending on how many statement formats and integrations are in play. You receive the git repository, so the app is yours to keep, fork and extend whether or not you continue with us.

lo que obtienes

  • Installable Frappe app source code (`travel_agency_operations`) built and tested against your exact Frappe/ERPNext version — v15 or v16
  • Installation and configuration on your site: `bench get-app` / `install-app`, Travel Settings, naming series, role profiles and permission setup
  • Technical documentation — DocType and field reference, hooks and scheduler events, whitelisted API endpoints with request and response examples, and the statement-import mapping format
  • End-user guide plus one live training session for consultants, managers and accounts staff, recorded for future hires
  • UAT on a staging site restored from your production data, with a written test script and a documented rollback plan before go-live
  • Post-go-live support window for defect fixes on the delivered scope, with a named channel and agreed response times
  • Git repository handover with full history, branches and tags — the app remains yours to keep, fork and extend
  • Post-deployment health check after the first full booking-and-reconciliation cycle, including a review of the first supplier statement run

¿Para quién es esto?

Travel agency owner or managing director

Sells packages assembled from many suppliers and cannot see true file-level profit until long after departure. Needs margin computed on the file itself, visible before the client is invoiced, and a defensible number at month-end rather than a reconstructed spreadsheet.

Operations or reservations manager

Runs the desk: chases supplier confirmations, watches cancellation deadlines, and rebuilds the same trip data three times across email, spreadsheet and the ERP. Needs one booking file holding traveler details, supplier confirmations and deadlines together, with automated warnings before a free-cancellation window closes.

Finance controller or accountant

Reconciles BSP/ARC and bed-bank statements against agency records line by line, and inherits payables that were never raised. Needs statement import with reference matching, controlled posting against Purchase Invoices, an explicit variance account and a full audit trail of every reconciliation run.

ERPNext systems administrator or implementation partner

Already runs ERPNext for accounting and will not accept another disconnected system or Custom Field sprawl. Needs a real Frappe app with its own DocTypes, hooks, patches and fixtures that survives `bench migrate` and upgrades from v15 to v16 without hand-repair.

Cómo se compara Travel Agency Operations for ERPNext

CriterioECOSIREConstrucción personalizadaCompetidorNativo de ERPNext
Booking file as a first-class recordPurpose-built `Booking File` DocType with traveler and service child tables, submittable and auditableAchievable, but the data model is designed from scratch on your budget and timelineOften a lighter booking form; child-table depth and workflow vary by publisherNo such concept — the closest fit is a Sales Order, which has no traveler or supplier-confirmation dimension
Per-file profitabilityMargin and margin percent computed in the controller and stored as reportable fields, visible before invoicingWhatever your developer builds; commonly deferred to reporting rather than enforced in the documentUsually reported after the fact from linked invoices, not held on the fileReconstructed at period end by matching Sales and Purchase Invoices by hand
Supplier and BSP reconciliationStatement import with reference matching, three-bucket triage, controlled posting and a per-run audit recordBuildable, but statement-format mapping is usually the part cut for timeRarely included; where present, typically one fixed formatManual comparison of supplier statements against Purchase Invoices
Cancellation-deadline controlDaily scheduler job raising ToDos and an email digest before free-cancellation windows closeDepends entirely on whether it was specified before the budget ran outSometimes a date field; automated pre-deadline alerting is uncommonNo deadline concept exists for supplier services
Fit to your desk workflowScoped against your actual supplier mix, statement formats and roles before a line is writtenFully yours, at the cost of specifying and testing everything from zeroYou adapt your process to the publisher's assumptionsGeneric sales and purchase flows, not travel-specific
Upgrade path to v16Patches and fixtures shipped with the app; built against your exact version and migrated with `bench migrate`Depends on whether the original developer is still availableTied to the publisher's release cadence for your versionCore upgrades are clean, but any Custom Field workarounds you built are yours to repair
Integration surfaceWhitelisted API methods under standard Frappe permission checks, ready for a GDS, portal or botWhatever is built; permission handling is a common weak pointVaries; often UI-first with a thin or undocumented APIGeneric Frappe REST API over core DocTypes, with no travel semantics
Ownership and lock-inFull git repository at handover, no licence key, no phone-home checkYou own it outright, having funded the entire buildTypically a per-site licence with renewal termsIncluded with ERPNext, but nothing travel-specific to own

Preguntas frecuentes sobre Travel Agency Operations

How long does delivery take, and is this an instant download?

It is not a download — this is built to order. After a scoping call we agree a written scope, then build, test and install the app on your ERPNext instance. Typical delivery is one working week from confirmed scope. Builds with several supplier statement formats or a GDS/consolidator integration sit at the longer end; a straightforward booking-file and costing build sits at the shorter end. You get a dated plan before any work starts.

Which Frappe and ERPNext versions do you support?

We build against Frappe/ERPNext v15 and v16, and specifically against your running version rather than the newest release. If you are on v15 today and plan to move to v16, say so at scoping — we ship patches and fixtures so the app migrates with `bench migrate` instead of needing rework. It installs on Frappe Cloud, a self-hosted bench, or your own Docker deployment.

What happens after go-live — support and updates?

Every build includes a post-go-live support window for defect fixes on the delivered scope, with a named channel and agreed response times. After that window you can take an ongoing support and maintenance agreement covering version upgrades, or continue on your own — you hold the full git repository and the app is standard Frappe code, so any competent Frappe developer can maintain it. New features beyond the agreed scope are quoted separately.

Will this replace or conflict with ERPNext accounting?

Neither. The app is a controller over standard ERPNext documents, not a parallel ledger. Booking services create and link to normal Purchase Invoices for supplier payables, and billable services flow into a normal Sales Invoice. Your Chart of Accounts, tax templates, payment entries and financial statements stay exactly as they are — the app only ensures the right documents are created against the right file, with margin visible before you invoice.

Can it import our BSP/ARC or bed-bank supplier statements?

Yes, that is a core part of the build. The `Supplier Statement Import` DocType accepts CSV or XLSX and matches lines against booking services on confirmation reference and ticket number. Because every consolidator and bed bank formats statements differently, we map your actual formats during scoping — send us two or three real statements and the mapping is built and tested against them. Additional formats added later are a small scoped change.

Can other systems push bookings into it — a GDS, a portal or a chatbot?

Yes. File creation, service confirmation and status lookup are exposed as whitelisted methods over the Frappe REST API, authenticated with a standard API key and secret and executing under normal Frappe permission checks, so an external system has exactly the rights of the role it authenticates as. We do not ship a GDS connector in the base build — if you need one for a specific provider we scope it as an integration alongside the core app.

Do we own the code?

Yes. You receive the git repository with full history at handover. The app is yours to keep, fork, extend or hand to another developer. There is no runtime licence key, no phone-home check, and no mechanism by which the app stops working if you stop working with us.

Solicitar presupuesto

Travel Agency Operations

A build-to-order ERPNext application that turns each trip into a booking file — travelers, supplier confirmations, costs and receipts in one submittable document with live margin. ECOSIRE builds, installs and supports it on your ERPNext v15 or v16 instance.

  • `Booking File` DocType with child tables for travelers and services — one submittable document per trip, with a naming series configurable per branch or business unit
  • Per-service supplier linkage: each `Booking Service` row links to an ERPNext `Supplier` and, on confirmation, to the Purchase Invoice recognising the payable — no parallel ledger
  • Live package costing in the file controller: multi-currency cost lines converted at the service-date exchange rate, per-service or per-file markup, and stored gross margin and margin percent fields
  • `validate` and `on_submit` doc events in `hooks.py` block submission of a service priced below cost unless overridden by the Travel Manager role, and require a supplier confirmation reference before a service reaches `Confirmed`

Solicitar presupuesto

Cuéntanos tus necesidades de Travel Agency Operations y te enviaremos precios, opciones de licencia y una propuesta a medida, normalmente en un día hábil.

Sin pago ahora. Esto envía una solicitud de presupuesto a nuestro equipo; te responderemos por correo con precios y próximos pasos.