Skip to content

Commit

Permalink
Merge pull request #152 from lahirulakruwan/main
Browse files Browse the repository at this point in the history
Vehicle fuel consumption function api changes added
  • Loading branch information
YujithIsura committed Sep 10, 2024
2 parents ce799dc + 8ff7055 commit 09fe3ed
Show file tree
Hide file tree
Showing 5 changed files with 450 additions and 2 deletions.
162 changes: 160 additions & 2 deletions api/main.bal
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import ballerina/graphql;
import ballerina/sql;
import ballerina/log;
import ballerina/io;
import ballerina/log;
import ballerina/sql;
import ballerina/time;

// @display {
Expand Down Expand Up @@ -5337,6 +5337,164 @@ AND p.organization_id IN (
}

}

remote function add_vehicle_fuel_consumption(VehicleFuelConsumption vehicle_fuel_consumption) returns VehicleFuelConsumptionData|error? {

sql:ExecutionResult res = check db_client->execute(
`INSERT INTO vehicle_fuel_consumption (
vehicle_id,
date_time,
reason_id,
starting_meter,
ending_meter,
distance,
comment
) VALUES (
${vehicle_fuel_consumption.vehicle_id},
${vehicle_fuel_consumption.date_time},
${vehicle_fuel_consumption.reason_id},
${vehicle_fuel_consumption.starting_meter},
${vehicle_fuel_consumption.ending_meter},
${vehicle_fuel_consumption.distance},
${vehicle_fuel_consumption.comment}
);`
);

int|string? insert_id = res.lastInsertId;
if !(insert_id is int) {
return error("Unable to insert Vehicle Fuel Consumption record");
}

return new (insert_id);
}

isolated resource function get vehicle_fuel_consumption_by_date(int? organization_id, string? date = "") returns VehicleFuelConsumptionData[]|error? {
stream<VehicleFuelConsumption, error?> vehicle_fuel_consumption_data;

if (organization_id != null && date != null) {

lock {
vehicle_fuel_consumption_data = db_client->query(
`SELECT vfc.id,vfc.vehicle_id,vfc.date_time,vfc.reason_id,vfc.starting_meter,vfc.ending_meter,vfc.distance,vfc.comment,vfc.created,vfc.updated
FROM vehicle_fuel_consumption vfc
INNER JOIN vehicle v ON vfc.vehicle_id = v.id
where v.organization_id = ${organization_id} and DATE(vfc.date_time) = ${date};`);
}

VehicleFuelConsumptionData[] vehicleFuelConsumptionDatas = [];

check from VehicleFuelConsumption vehicle_fuel_consumption_data_record in vehicle_fuel_consumption_data
do {
VehicleFuelConsumptionData|error vehicleFuelConsumptionData = new VehicleFuelConsumptionData(0, vehicle_fuel_consumption_data_record);
if !(vehicleFuelConsumptionData is error) {
vehicleFuelConsumptionDatas.push(vehicleFuelConsumptionData);
}
};

check vehicle_fuel_consumption_data.close();
return vehicleFuelConsumptionDatas;

} else {
return error("Provide non-null values for both 'organization_id' and 'date'.");
}

}
isolated resource function get vehicle_fuel_consumption_by_id(int? id) returns VehicleFuelConsumptionData|error? {
if (id != null) {
return new (id);
} else {
return error("Provide non-null value for id.");
}
}

remote function update_vehicle_fuel_consumption(VehicleFuelConsumption vehicle_fuel_consumption) returns VehicleFuelConsumptionData|error? {
int id = vehicle_fuel_consumption.id ?: 0;
if (id == 0) {
return error("Unable to update Vehicle Fuel Consumption record");
}

sql:ExecutionResult res = check db_client->execute(
`UPDATE vehicle_fuel_consumption SET
vehicle_id = ${vehicle_fuel_consumption.vehicle_id},
date_time = ${vehicle_fuel_consumption.date_time},
reason_id = ${vehicle_fuel_consumption.reason_id},
starting_meter = ${vehicle_fuel_consumption.starting_meter},
ending_meter = ${vehicle_fuel_consumption.ending_meter},
distance = ${vehicle_fuel_consumption.distance},
comment = ${vehicle_fuel_consumption.comment}
WHERE id = ${id};`
);

if (res.affectedRowCount == sql:EXECUTION_FAILED) {
return error("Unable to update Vehicle Fuel Consumption record");
}

return new (id);
}

remote function delete_vehicle_fuel_consumption_by_id(int? id) returns int?|error? {

sql:ExecutionResult res = check db_client->execute(
`DELETE FROM vehicle_fuel_consumption WHERE id = ${id};`
);

int? delete_id = res.affectedRowCount;
io:println(delete_id);
if (delete_id <= 0) {
return error("Unable to delete vehicle_fuel_consumption with id: " + id.toString());
}

return delete_id;

}

isolated resource function get vehicles(int? organization_id) returns VehicleData[]|error? {
stream<Vehicle, error?> vehicles_data;

lock {
vehicles_data = db_client->query(
`SELECT id,vehicle_number,person_id
from vehicle
where organization_id = ${organization_id};`);
}

VehicleData[] vehicleDatas = [];

check from Vehicle vehicle_data_record in vehicles_data
do {
VehicleData|error vehicleData = new VehicleData(0,0,vehicle_data_record);
if !(vehicleData is error) {
vehicleDatas.push(vehicleData);
}
};

check vehicles_data.close();
return vehicleDatas;
}

isolated resource function get vehicle_reasons() returns VehicleReasonMetaData[]|error? {
stream<VehicleReasonMetadata, error?> vehicle_reasons_data;

lock {
vehicle_reasons_data = db_client->query(
`SELECT id,reason
from vehicle_reason_metadata;`);
}

VehicleReasonMetaData[] vehicleReasonDatas = [];

check from VehicleReasonMetadata vehicle_reason_data_record in vehicle_reasons_data
do {
VehicleReasonMetaData|error vehicleReasonData = new VehicleReasonMetaData(0,vehicle_reason_data_record);
if !(vehicleReasonData is error) {
vehicleReasonDatas.push(vehicleReasonData);
}
};

check vehicle_reasons_data.close();
return vehicleReasonDatas;
}

}

isolated function calculateWeekdays(time:Utc toDate, time:Utc fromDate) returns int {
Expand Down
31 changes: 31 additions & 0 deletions api/types.bal
Original file line number Diff line number Diff line change
Expand Up @@ -654,3 +654,34 @@ public type OrganizationMetaDataDetails record{|
string? key_name;
string? value;
|};

public type Vehicle record{|
readonly string? record_type = "vehicle";
int id?;
string? vehicle_number;
int? organization_id;
int? person_id;
string? created;
string? updated;
|};

public type VehicleReasonMetadata record{|
readonly string? record_type = "vehicle_reason_metadata";
int id?;
string? reason;
string? created;
|};

public type VehicleFuelConsumption record{|
readonly string? record_type = "vehicle_fuel_consumption";
int id?;
int? vehicle_id;
string? date_time;
int? reason_id;
string? starting_meter;
string? ending_meter;
string? distance;
string? comment;
string? created;
string? updated;
|};
93 changes: 93 additions & 0 deletions api/vehicle_data.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
public isolated service class VehicleData {

private Vehicle vehicle;

isolated function init(int? id = 0, int? person_id = 0, Vehicle? vehicle = null) returns error? {

if (vehicle != null) {
self.vehicle = vehicle.cloneReadOnly();
return;
}

lock {

Vehicle vehicle_raw;

if (id > 0) {

vehicle_raw = check db_client->queryRow(
`SELECT *
FROM vehicle
WHERE id = ${id};`);

} else {
vehicle_raw = check db_client->queryRow(
`SELECT *
FROM vehicle
WHERE
person_id = ${person_id};`);
}

self.vehicle = vehicle_raw.cloneReadOnly();

}

}

isolated resource function get id() returns int?|error {
lock {
return self.vehicle.id;
}
}

isolated resource function get vehicle_number() returns string? {
lock {
return self.vehicle.vehicle_number;
}
}

isolated resource function get organization() returns OrganizationData|error? {
int id = 0;
lock {
id = self.vehicle.organization_id ?: 0;
if (id == 0) {
return null; // no point in querying if address id is null
}
}

return new OrganizationData((), id);
}

isolated resource function get person_id() returns int? {
lock {
return self.vehicle.person_id;
}
}

isolated resource function get person() returns PersonData|error? {
int id = 0;
lock {
id = self.vehicle.person_id ?: 0;
if (id == 0) {
return null;
}

}

return new PersonData((), id);
}


isolated resource function get created() returns string? {
lock {
return self.vehicle.created;
}
}

isolated resource function get updated() returns string? {
lock {
return self.vehicle.updated;
}
}

}
Loading

0 comments on commit 09fe3ed

Please sign in to comment.