day3 and day4 assignment
This commit is contained in:
parent
04915b3909
commit
f5f3d90c63
|
@ -1,8 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Airline", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
||||
frappe.ui.form.on("Airline", {
|
||||
refresh(frm) {
|
||||
frm.add_web_link(frm.doc.website, "See on website");
|
||||
},
|
||||
});
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"link_fieldname": "name"
|
||||
}
|
||||
],
|
||||
"modified": "2024-06-16 13:51:31.156362",
|
||||
"modified": "2024-07-26 10:08:17.491380",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airline",
|
||||
|
@ -57,6 +57,45 @@
|
|||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Travel Agent",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Fleet Manager",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Flight Crew Member",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
|
|
|
@ -8,7 +8,14 @@
|
|||
"field_order": [
|
||||
"model",
|
||||
"airline",
|
||||
"capacity"
|
||||
"capacity",
|
||||
"initial_audit_completed",
|
||||
"flight_crew_members_section",
|
||||
"captain",
|
||||
"first_officer",
|
||||
"column_break_ajqj",
|
||||
"flight_medic",
|
||||
"flight_attendant"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
|
@ -33,11 +40,51 @@
|
|||
"label": "Capacity",
|
||||
"non_negative": 1,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "initial_audit_completed",
|
||||
"fieldtype": "Check",
|
||||
"label": " Initial Audit Completed",
|
||||
"permlevel": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "flight_crew_members_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Flight Crew Members"
|
||||
},
|
||||
{
|
||||
"fieldname": "captain",
|
||||
"fieldtype": "Link",
|
||||
"label": "Captain",
|
||||
"options": "Flight Crew Members"
|
||||
},
|
||||
{
|
||||
"fieldname": "first_officer",
|
||||
"fieldtype": "Link",
|
||||
"label": "First Officer",
|
||||
"options": "Flight Crew Members"
|
||||
},
|
||||
{
|
||||
"fieldname": "flight_medic",
|
||||
"fieldtype": "Link",
|
||||
"label": "Flight Medic",
|
||||
"options": "Flight Crew Members"
|
||||
},
|
||||
{
|
||||
"fieldname": "flight_attendant",
|
||||
"fieldtype": "Link",
|
||||
"label": "Flight Attendant",
|
||||
"options": "Flight Crew Members"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_ajqj",
|
||||
"fieldtype": "Column Break"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-06-16 11:30:54.145867",
|
||||
"modified": "2024-07-30 15:44:56.907253",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airplane",
|
||||
|
@ -55,6 +102,60 @@
|
|||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"permlevel": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Fleet Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Flight Crew Member",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Travel Agent",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
|
|
|
@ -21,10 +21,17 @@
|
|||
"departure_details_section",
|
||||
"date_of_departure",
|
||||
"duration",
|
||||
"gate_no",
|
||||
"column_break_idnl",
|
||||
"time_of_departure",
|
||||
"published",
|
||||
"route"
|
||||
"route",
|
||||
"crew_member_details_section",
|
||||
"captain",
|
||||
"first_officer",
|
||||
"column_break_nilz",
|
||||
"flight_medic",
|
||||
"flight_attendant"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
|
@ -135,6 +142,44 @@
|
|||
"fieldname": "route",
|
||||
"fieldtype": "Data",
|
||||
"label": "Route"
|
||||
},
|
||||
{
|
||||
"fieldname": "crew_member_details_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Crew Member Details"
|
||||
},
|
||||
{
|
||||
"fetch_from": "airplane.captain",
|
||||
"fieldname": "captain",
|
||||
"fieldtype": "Data",
|
||||
"label": "Captain"
|
||||
},
|
||||
{
|
||||
"fetch_from": "airplane.first_officer",
|
||||
"fieldname": "first_officer",
|
||||
"fieldtype": "Data",
|
||||
"label": "First Officer"
|
||||
},
|
||||
{
|
||||
"fetch_from": "airplane.flight_medic",
|
||||
"fieldname": "flight_medic",
|
||||
"fieldtype": "Data",
|
||||
"label": "Flight Medic"
|
||||
},
|
||||
{
|
||||
"fetch_from": "airplane.flight_attendant",
|
||||
"fieldname": "flight_attendant",
|
||||
"fieldtype": "Data",
|
||||
"label": "Flight Attendant"
|
||||
},
|
||||
{
|
||||
"fieldname": "gate_no",
|
||||
"fieldtype": "Data",
|
||||
"label": "Gate No"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_nilz",
|
||||
"fieldtype": "Column Break"
|
||||
}
|
||||
],
|
||||
"has_web_view": 1,
|
||||
|
@ -147,7 +192,7 @@
|
|||
"link_fieldname": "flight"
|
||||
}
|
||||
],
|
||||
"modified": "2024-07-21 19:30:05.323909",
|
||||
"modified": "2024-07-30 15:30:24.142830",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airplane Flight",
|
||||
|
@ -165,6 +210,48 @@
|
|||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Fleet Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Flight Crew Member",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Travel Agent",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"route": "flights",
|
||||
|
|
|
@ -35,4 +35,54 @@ frappe.ui.form.on("Airplane Ticket Add-on Item", {
|
|||
});
|
||||
frm.set_value("total_amount",frm.doc.flight_price + total_addon);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
frappe.ui.form.on('Airplane Ticket', {
|
||||
refresh: function(frm) {
|
||||
frm.add_custom_button(__('Assign Seat'), function() {
|
||||
let d = new frappe.ui.Dialog({
|
||||
title: __('Assign Seat'),
|
||||
fields: [
|
||||
{
|
||||
label: __('Seat Number'),
|
||||
fieldname: 'seat_number',
|
||||
fieldtype: 'Data'
|
||||
}
|
||||
],
|
||||
primary_action_label: __('Assign'),
|
||||
primary_action(values) {
|
||||
frm.set_value('seat', values.seat_number);
|
||||
d.hide();
|
||||
}
|
||||
});
|
||||
|
||||
d.show();
|
||||
}, 'Actions').addClass(".btn-primary")
|
||||
frm.add_custom_button(__('Assign Gate No.'), function() {
|
||||
let d = new frappe.ui.Dialog({
|
||||
title: __('Assign Gate No.'),
|
||||
fields: [
|
||||
{
|
||||
label: __('Gate Number'),
|
||||
fieldname: 'gate_no',
|
||||
fieldtype: 'Data'
|
||||
}
|
||||
],
|
||||
primary_action_label: __('Assign'),
|
||||
primary_action(values) {
|
||||
if(frm.doc.status == "Checked-In")
|
||||
{
|
||||
frm.set_value('gate_no', values.gate_no);
|
||||
}
|
||||
else{
|
||||
frappe.throw("Passanger has not checked-In")
|
||||
}
|
||||
|
||||
d.hide();
|
||||
}
|
||||
});
|
||||
|
||||
d.show();
|
||||
}, 'Actions').addClass(".btn-primary")
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{flight}-{source_airport_code}-to-{destination_airport_code}-###",
|
||||
"autoname": "format:{flight}-{source_airport_code}-to-{destination_airport_code}-{###}",
|
||||
"creation": "2024-06-16 11:39:03.757608",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
|
@ -11,6 +11,7 @@
|
|||
"column_break_vgrd",
|
||||
"flight",
|
||||
"seat",
|
||||
"gate_no",
|
||||
"section_break_gqwg",
|
||||
"source_airport_code",
|
||||
"column_break_izmz",
|
||||
|
@ -157,12 +158,19 @@
|
|||
{
|
||||
"fieldname": "column_break_fxof",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.status===\"Checked-In\"",
|
||||
"fetch_from": "flight.gate_no",
|
||||
"fieldname": "gate_no",
|
||||
"fieldtype": "Data",
|
||||
"label": "Gate No."
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-22 18:33:53.217697",
|
||||
"modified": "2024-07-30 15:26:34.234774",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airplane Ticket",
|
||||
|
@ -180,6 +188,41 @@
|
|||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Flight Crew Member",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Travel Agent",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
|
|
|
@ -8,36 +8,49 @@ import random
|
|||
|
||||
class AirplaneTicket(Document):
|
||||
|
||||
def validate(self):
|
||||
existing_addons = set()
|
||||
for addon in self.add_ons:
|
||||
addon_key = (addon.item)
|
||||
if addon_key in existing_addons:
|
||||
frappe.throw("Duplicate add-on found. Each add-on must be unique.")
|
||||
existing_addons.add(addon_key)
|
||||
def validate(self):
|
||||
existing_addons = set()
|
||||
for addon in self.add_ons:
|
||||
addon_key = (addon.item)
|
||||
if addon_key in existing_addons:
|
||||
frappe.throw("Duplicate add-on found. Each add-on must be unique.")
|
||||
existing_addons.add(addon_key)
|
||||
|
||||
def before_validate(self):
|
||||
if len(self.add_ons) < len(set(self.add_ons)):
|
||||
frappe.throw("Duplicate add ons")
|
||||
else:
|
||||
total_addon = 0.0
|
||||
for addon in self.add_ons:
|
||||
total_addon = total_addon + addon.amount
|
||||
|
||||
self.total_amount = float(self.flight_price) + total_addon
|
||||
|
||||
|
||||
def before_submit(self):
|
||||
if self.status != 'Boarded':
|
||||
frappe.throw("Cannot submit if flight not boarded")
|
||||
self.check_capacity()
|
||||
|
||||
def before_validate(self):
|
||||
if len(self.add_ons) < len(set(self.add_ons)):
|
||||
frappe.throw("Duplicate add ons")
|
||||
else:
|
||||
total_addon = 0.0
|
||||
for addon in self.add_ons:
|
||||
total_addon += addon.amount
|
||||
|
||||
self.total_amount = float(self.flight_price) + total_addon
|
||||
|
||||
def before_submit(self):
|
||||
if self.status != 'Boarded':
|
||||
frappe.throw("Cannot submit if flight not boarded")
|
||||
|
||||
|
||||
def before_insert(self):
|
||||
seatsArray = (("A"),("B"),("C"),("D"),("E"))
|
||||
self.seat = f'{random.randrange(1,99)}{random.choice(seatsArray)}'
|
||||
def before_insert(self):
|
||||
seatsArray = ["A", "B", "C", "D", "E"]
|
||||
self.seat = f'{random.randrange(1, 99)}{random.choice(seatsArray)}'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def check_capacity(self):
|
||||
airplaneflight = frappe.get_doc('Airplane Flight', {'name': self.flight})
|
||||
airplane = frappe.get_doc('Airplane', {'name': airplaneflight.airplane})
|
||||
|
||||
capacity = airplane.capacity
|
||||
existing_tickets = frappe.db.count('Airplane Ticket', {'flight': self.flight})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if existing_tickets > capacity:
|
||||
frappe.throw(f'The number of tickets for flight {self.flight} exceeds the capacity of the airplane.')
|
||||
|
||||
|
||||
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-22 19:01:09.410218",
|
||||
"modified": "2024-07-26 10:03:49.138738",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airplane Ticket Add-on Type",
|
||||
|
@ -36,6 +36,50 @@
|
|||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Fleet Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Flight Crew Member",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Travel Agent",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
|
|
|
@ -34,8 +34,17 @@
|
|||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-06-16 11:33:04.571303",
|
||||
"links": [
|
||||
{
|
||||
"link_doctype": "Airport Shop",
|
||||
"link_fieldname": "airport"
|
||||
},
|
||||
{
|
||||
"link_doctype": "Contract Details",
|
||||
"link_fieldname": "shop"
|
||||
}
|
||||
],
|
||||
"modified": "2024-07-29 16:09:36.027953",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airport",
|
||||
|
@ -53,6 +62,45 @@
|
|||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Airport Authority Personnel",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Fleet Manager",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Flight Crew Member",
|
||||
"share": 1
|
||||
},
|
||||
{
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Travel Agent",
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2024-07-26 17:41:03.180747",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"crew_member"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "crew_member",
|
||||
"fieldtype": "Link",
|
||||
"label": "Crew Member",
|
||||
"options": "Flight Crew Members"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-29 12:59:40.059092",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "crew members",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class crewmembers(Document):
|
||||
pass
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Flight Crew Members", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{designation}-{name1}",
|
||||
"creation": "2024-07-26 16:44:02.451203",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"crew_member_details_section",
|
||||
"name1",
|
||||
"designation",
|
||||
"contact_number"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "name1",
|
||||
"fieldtype": "Data",
|
||||
"label": "Name",
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "designation",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"in_preview": 1,
|
||||
"label": "Designation",
|
||||
"options": "Captain\nFirst Officer\nFlight Attendant\nFlight Medic"
|
||||
},
|
||||
{
|
||||
"fieldname": "contact_number",
|
||||
"fieldtype": "Phone",
|
||||
"label": "Contact Number"
|
||||
},
|
||||
{
|
||||
"fieldname": "crew_member_details_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Crew Member Details"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-30 16:49:07.201949",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Flight Crew Members",
|
||||
"naming_rule": "Expression",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class FlightCrewMembers(Document):
|
||||
pass
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestFlightCrewMembers(FrappeTestCase):
|
||||
pass
|
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"add_total_row": 0,
|
||||
"columns": [
|
||||
{
|
||||
"fieldname": "item",
|
||||
"fieldtype": "Link",
|
||||
"label": "Add-On Type",
|
||||
"options": "Airplane Ticket Add-on Item",
|
||||
"width": 0
|
||||
},
|
||||
{
|
||||
"fieldname": "count",
|
||||
"fieldtype": "Int",
|
||||
"label": "Sold Count",
|
||||
"width": 0
|
||||
}
|
||||
],
|
||||
"creation": "2024-07-24 17:06:12.117276",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"filters": [],
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"letterhead": null,
|
||||
"modified": "2024-07-26 14:12:25.342850",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Add-on Popularity",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"query": "select item,count(*) as count from `tabAirplane Ticket Add-on Item` Group by item ORDER BY count(*) DESC ;",
|
||||
"ref_doctype": "Airplane Ticket Add-on Type",
|
||||
"reference_report": "",
|
||||
"report_name": "Add-on Popularity",
|
||||
"report_type": "Query Report",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"add_total_row": 0,
|
||||
"columns": [],
|
||||
"creation": "2024-07-23 17:54:28.525337",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"filters": [],
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"json": "{}",
|
||||
"letterhead": null,
|
||||
"modified": "2024-07-26 11:45:41.837832",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airplanes By Airline",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"ref_doctype": "Airplane",
|
||||
"reference_report": "",
|
||||
"report_name": "Airplanes By Airline",
|
||||
"report_type": "Report Builder",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"add_total_row": 0,
|
||||
"columns": [],
|
||||
"creation": "2024-07-26 11:22:34.548100",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"filters": [],
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"json": "{\"filters\":[],\"fields\":[[\"airline\",\"Airplane\"],[\"_aggregate_column\",\"Airplane\"]],\"order_by\":\"`tabAirplane`.creation desc\",\"add_totals_row\":0,\"page_length\":20,\"column_widths\":{\"airline\":120,\"_aggregate_column\":200},\"group_by\":{\"group_by\":\"`tabAirplane`.`airline`\",\"aggregate_function\":\"count\"}}",
|
||||
"letterhead": null,
|
||||
"modified": "2024-07-26 11:46:49.553325",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Airplanes By Airlines",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"ref_doctype": "Airplane",
|
||||
"report_name": "Airplanes By Airlines",
|
||||
"report_type": "Report Builder",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
},
|
||||
{
|
||||
"role": "Airport Authority Personnel"
|
||||
},
|
||||
{
|
||||
"role": "Fleet Manager"
|
||||
},
|
||||
{
|
||||
"role": "Travel Agent"
|
||||
},
|
||||
{
|
||||
"role": "Flight Crew Member"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.query_reports["Revenue By Airline"] = {
|
||||
"filters": [
|
||||
|
||||
]
|
||||
};
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"add_total_row": 1,
|
||||
"columns": [],
|
||||
"creation": "2024-07-24 17:17:31.331459",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"filters": [],
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"letterhead": null,
|
||||
"modified": "2024-07-25 11:43:36.156947",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airplane mode",
|
||||
"name": "Revenue By Airline",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"ref_doctype": "Airplane",
|
||||
"report_name": "Revenue By Airline",
|
||||
"report_type": "Script Report",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
|
||||
def execute(filters=None):
|
||||
columns = [
|
||||
{
|
||||
"fieldtype": "Link",
|
||||
"options": "Airline",
|
||||
"label": "Airline",
|
||||
"fieldname": "airline"
|
||||
},
|
||||
{
|
||||
"fieldtype": "Currency",
|
||||
"label": "Revenue",
|
||||
"fieldname": "total_amount"
|
||||
}
|
||||
]
|
||||
|
||||
# Fetch all airlines
|
||||
all_airlines = frappe.get_all("Airline", fields=["name"])
|
||||
airline_revenue = {airline['name']: 0.0 for airline in all_airlines}
|
||||
|
||||
# Fetch all airplane ticket details
|
||||
airplanedetails = frappe.get_all("Airplane Ticket", fields=["total_amount", "flight"])
|
||||
|
||||
total_revenue = 0.0
|
||||
|
||||
for ticket in airplanedetails:
|
||||
airplaneflight = frappe.get_doc('Airplane Flight', ticket['flight'])
|
||||
airplane = frappe.get_doc('Airplane', airplaneflight.airplane)
|
||||
airline = airplane.airline
|
||||
|
||||
airline_revenue[airline] += ticket['total_amount']
|
||||
total_revenue += ticket['total_amount']
|
||||
|
||||
data = [{"airline": airline, "total_amount": revenue} for airline, revenue in airline_revenue.items()]
|
||||
|
||||
chart = {
|
||||
"data": {
|
||||
"labels": [d["airline"] for d in data],
|
||||
"datasets": [
|
||||
{
|
||||
"values": [d["total_amount"] for d in data]
|
||||
}
|
||||
]
|
||||
},
|
||||
"type": "donut"
|
||||
}
|
||||
|
||||
report_summary = [
|
||||
{
|
||||
"value": total_revenue,
|
||||
"indicator": "Green",
|
||||
"label": "Total Revenue",
|
||||
"datatype": "Currency",
|
||||
"currency": "INR"
|
||||
}
|
||||
]
|
||||
|
||||
return columns, data, None, chart, report_summary
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Airport Shop", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,110 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_guest_to_view": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{shop_number}-{shop_name}",
|
||||
"creation": "2024-07-29 15:42:09.403809",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"shop_name",
|
||||
"shop_number",
|
||||
"status",
|
||||
"column_break_qzfz",
|
||||
"shop_area",
|
||||
"airport",
|
||||
"type",
|
||||
"published",
|
||||
"route"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "shop_name",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Shop Name",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "shop_number",
|
||||
"fieldtype": "Data",
|
||||
"label": "Shop Number",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_qzfz",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "shop_area",
|
||||
"fieldtype": "Int",
|
||||
"label": "Shop Area",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "airport",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Airport",
|
||||
"options": "Airport",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "Available",
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"in_filter": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Status",
|
||||
"options": "Available\nOccupied"
|
||||
},
|
||||
{
|
||||
"default": "For-Rent",
|
||||
"fieldname": "type",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"in_preview": 1,
|
||||
"label": "Type",
|
||||
"options": "For-Rent\nFor-Lease"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "published",
|
||||
"fieldtype": "Check",
|
||||
"label": "published"
|
||||
},
|
||||
{
|
||||
"fieldname": "route",
|
||||
"fieldtype": "Data",
|
||||
"label": "route"
|
||||
}
|
||||
],
|
||||
"has_web_view": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"is_published_field": "published",
|
||||
"links": [],
|
||||
"modified": "2024-07-30 12:31:53.628854",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airport shop management",
|
||||
"name": "Airport Shop",
|
||||
"naming_rule": "Expression",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"route": "shops",
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.website.website_generator import WebsiteGenerator
|
||||
|
||||
|
||||
class AirportShop(WebsiteGenerator):
|
||||
pass
|
|
@ -0,0 +1,24 @@
|
|||
{% extends "templates/web.html" %}
|
||||
|
||||
{% block page_content %}
|
||||
<h3>{{ title |e }}</h3>
|
||||
<div>
|
||||
<h4>Shop Details</h4>
|
||||
<li class="font-size-sm text-muted">Shop Name:{{ doc.shop_name }}</li>
|
||||
<li class="font-size-sm text-muted">Shop Number:{{ doc.shop_number }}</li>
|
||||
<li class="font-size-sm text-muted">Shop Area :{{ doc.shop_area }}</li>
|
||||
<li class="font-size-sm text-muted padding:2px">Available :{{ doc.type }}</li>
|
||||
|
||||
{% set shop = title %}
|
||||
{% set rent = 15000.0 |float %}
|
||||
|
||||
|
||||
|
||||
<a class="btn btn-info" href="/book-airport-shop/new?shop={{ shop }}&&rent_amount={{ rent }}">Book Shop</a>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<!-- this is a sample default web page template -->
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
<style>
|
||||
.list {
|
||||
|
||||
color: black;
|
||||
border: 1px solid black;
|
||||
border-radius: 10px;
|
||||
margin: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
{% if doc.status == "Available" %}
|
||||
<div class="list" >
|
||||
<h5>{{ doc.shop_name }}</h5>
|
||||
<h5 class="font-size-sm text-muted">At:{{ doc.airport }}</h5>
|
||||
|
||||
|
||||
<a class="font-size-sm color:blue;" href="/{{ doc.route |e }}">View Shop</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div></div>
|
||||
</div>
|
||||
<!-- this is a sample default list template -->
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestAirportShop(FrappeTestCase):
|
||||
pass
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Contract Details", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,95 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{shop}-contract",
|
||||
"creation": "2024-07-29 15:43:51.359191",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"tenant_name",
|
||||
"shop",
|
||||
"contract_expiry_date",
|
||||
"column_break_vazm",
|
||||
"type",
|
||||
"rent_amount",
|
||||
"lease_amount"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "tenant_name",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Tenant Name",
|
||||
"options": "Shop Tenant",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "shop",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Shop ",
|
||||
"options": "Airport Shop",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.type===\"For-Rent\"",
|
||||
"description": "per month",
|
||||
"fieldname": "rent_amount",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Rent Amount",
|
||||
"options": "Rent Amount",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "contract_expiry_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Contract Expiry Date",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "For-Rent",
|
||||
"fetch_from": "shop.type",
|
||||
"fieldname": "type",
|
||||
"fieldtype": "Select",
|
||||
"label": "Type",
|
||||
"options": "For-Rent\nFor-Lease"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_vazm",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.type===\"For-Lease\"",
|
||||
"fieldname": "lease_amount",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Lease Amount"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-29 18:01:51.981589",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airport shop management",
|
||||
"name": "Contract Details",
|
||||
"naming_rule": "Expression",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class ContractDetails(Document):
|
||||
|
||||
def before_validate(self):
|
||||
rent_amt = frappe.get_doc('Rent Amount')
|
||||
self.rent_amount = rent_amt.rent_amount
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestContractDetails(FrappeTestCase):
|
||||
pass
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Rent Amount", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,44 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{rent_amount}",
|
||||
"creation": "2024-07-29 17:16:51.957848",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"rent_amount"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "rent_amount",
|
||||
"fieldtype": "Currency",
|
||||
"in_list_view": 1,
|
||||
"label": "Rent Amount ",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-29 17:18:36.559227",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airport shop management",
|
||||
"name": "Rent Amount",
|
||||
"naming_rule": "Expression",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class RentAmount(Document):
|
||||
pass
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestRentAmount(FrappeTestCase):
|
||||
pass
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Rent Payments", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{shop}-{received_date}",
|
||||
"creation": "2024-07-30 12:20:24.037360",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"shop",
|
||||
"tenant_name",
|
||||
"amount",
|
||||
"payment_status",
|
||||
"received_date"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "shop",
|
||||
"fieldtype": "Link",
|
||||
"label": "Shop",
|
||||
"options": "Contract Details"
|
||||
},
|
||||
{
|
||||
"fetch_from": "shop.tenant_name",
|
||||
"fieldname": "tenant_name",
|
||||
"fieldtype": "Data",
|
||||
"label": "Tenant Name",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "payment_status",
|
||||
"fieldtype": "Select",
|
||||
"label": "Payment Status",
|
||||
"options": "Received\nNot Received"
|
||||
},
|
||||
{
|
||||
"fieldname": "received_date",
|
||||
"fieldtype": "Date",
|
||||
"label": "Received Date"
|
||||
},
|
||||
{
|
||||
"fetch_from": "shop.rent_amount",
|
||||
"fieldname": "amount",
|
||||
"fieldtype": "Data",
|
||||
"label": "Amount"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-30 12:27:48.995456",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airport shop management",
|
||||
"name": "Rent Payments",
|
||||
"naming_rule": "Expression",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class RentPayments(Document):
|
||||
pass
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestRentPayments(FrappeTestCase):
|
||||
pass
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Rent Reminders", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2024-07-29 18:27:54.663221",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"rent_reminder_section",
|
||||
"is_enabled"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "rent_reminder_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Rent Reminder"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "is_enabled",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is Enabled?"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-29 18:28:31.259766",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airport shop management",
|
||||
"name": "Rent Reminders",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class RentReminders(Document):
|
||||
pass
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestRentReminders(FrappeTestCase):
|
||||
pass
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2024, snehalatha and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Shop Tenant", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"autoname": "format:{first_name}",
|
||||
"creation": "2024-07-29 15:38:43.846918",
|
||||
"doctype": "DocType",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"tenant_information_section",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"full_name",
|
||||
"email",
|
||||
"contact_no"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "first_name",
|
||||
"fieldtype": "Data",
|
||||
"in_filter": 1,
|
||||
"in_global_search": 1,
|
||||
"in_list_view": 1,
|
||||
"in_preview": 1,
|
||||
"label": "First Name",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "last_name",
|
||||
"fieldtype": "Data",
|
||||
"in_global_search": 1,
|
||||
"in_list_view": 1,
|
||||
"in_preview": 1,
|
||||
"label": "Last Name"
|
||||
},
|
||||
{
|
||||
"fieldname": "full_name",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Full Name",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "email",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Email",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "contact_no",
|
||||
"fieldtype": "Phone",
|
||||
"in_list_view": 1,
|
||||
"label": "Contact no",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "tenant_information_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Tenant Information"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-07-29 17:28:52.339154",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Airport shop management",
|
||||
"name": "Shop Tenant",
|
||||
"naming_rule": "Expression",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "creation",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
# Copyright (c) 2024, snehalatha and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class ShopTenant(Document):
|
||||
|
||||
|
||||
def before_validate(self):
|
||||
|
||||
if not self.last_name:
|
||||
self.full_name = self.first_name
|
||||
else:
|
||||
self.full_name = f"{self.first_name} {self.last_name}"
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2024, snehalatha and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestShopTenant(FrappeTestCase):
|
||||
pass
|
|
@ -132,7 +132,11 @@ app_license = "mit"
|
|||
|
||||
# Scheduled Tasks
|
||||
# ---------------
|
||||
|
||||
scheduler_events = {
|
||||
"monthly": [
|
||||
"airplane_mode.scheduler.send_email_reminders"
|
||||
]
|
||||
}
|
||||
# scheduler_events = {
|
||||
# "all": [
|
||||
# "airplane_mode.tasks.all"
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
Airplane mode
|
||||
Airplane mode
|
||||
Airport shop management
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
import frappe
|
||||
from frappe import sendmail
|
||||
from frappe.utils import nowdate
|
||||
from frappe.core.doctype.communication.email import make
|
||||
|
||||
def send_email_reminders():
|
||||
|
||||
reminder = frappe.get_doc('Rent Reminders')
|
||||
if(reminder.is_enabled):
|
||||
records = frappe.get_all('Contract Details', filters={
|
||||
'type': 'For-Rent',
|
||||
},fields=["*"])
|
||||
for record in records:
|
||||
subject = "Reminder: Rent Amount"
|
||||
message = f"Dear Tenant, please pay the rent amount on time."
|
||||
tenant = frappe.get_doc("Shop Tenant",{"first_name",record.tenant_name})
|
||||
recipients = [ tenant.email ]
|
||||
|
||||
# Send email
|
||||
comm = sendmail(
|
||||
recipients= recipients,
|
||||
subject=subject,
|
||||
message=message,
|
||||
)
|
||||
return comm
|
||||
else:
|
||||
return "Reminder not enabled"
|
Loading…
Reference in New Issue