Skip to content

Commit 474ca1e

Browse files
committed
fixed service-rate model
1 parent 9ec9cb4 commit 474ca1e

3 files changed

Lines changed: 26 additions & 39 deletions

File tree

addon/models/service-rate.js

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import Model, { attr, hasMany, belongsTo } from '@ember-data/model';
2-
import { tracked } from '@glimmer/tracking';
32
import { computed, action } from '@ember/object';
43
import { getOwner } from '@ember/application';
54
import { format as formatDate, formatDistanceToNow } from 'date-fns';
@@ -20,8 +19,6 @@ export default class ServiceRate extends Model {
2019
@belongsTo('zone') zone;
2120
@hasMany('custom-field-value', { async: false }) custom_field_values;
2221

23-
24-
2522
/** @attributes */
2623
@attr('string') service_area_name;
2724
@attr('string') zone_name;
@@ -119,21 +116,15 @@ export default class ServiceRate extends Model {
119116
return this.cod_calculation_method === 'percentage';
120117
}
121118

122-
@computed('rate_fees.[]', 'rate_fees.@each.distance', 'max_distance') get rateFees() {
119+
@computed('rate_fees.@each.distance', 'max_distance') get rateFees() {
123120
const n = Math.max(0, Number(this.max_distance) || 0);
124-
const existing = (this.rate_fees?.toArray?.() ?? [])
125-
.filter(r => r.distance !== null && r.distance !== undefined && !r.isDeleted);
126-
121+
const existing = (this.rate_fees?.toArray?.() ?? []).filter((r) => r.distance !== null && r.distance !== undefined && !r.isDeleted);
122+
127123
// Return existing fees sorted by distance, filtered by max_distance
128-
return existing
129-
.filter(r => r.distance >= 0 && r.distance < n)
130-
.sort((a, b) => a.distance - b.distance);
124+
return existing.filter((r) => r.distance >= 0 && r.distance < n).sort((a, b) => a.distance - b.distance);
131125
}
132126

133127
/** @methods */
134-
135-
136-
137128
@action createDefaultPerDropFee(attributes = {}) {
138129
const store = getOwner(this).lookup('service:store');
139130
return store.createRecord('service-rate-fee', {
@@ -173,13 +164,13 @@ export default class ServiceRate extends Model {
173164
@action resetPerDropFees() {
174165
// Remove all existing per-drop fees
175166
const existingFees = this.rate_fees?.toArray?.() ?? [];
176-
existingFees.forEach(fee => {
167+
existingFees.forEach((fee) => {
177168
if (fee.unit === 'waypoint') {
178169
this.rate_fees.removeObject(fee);
179170
fee.destroyRecord();
180171
}
181172
});
182-
173+
183174
// Add a new default per-drop fee
184175
const defaultFee = this.createDefaultPerDropFee();
185176
this.rate_fees.addObject(defaultFee);

addon/models/vehicle.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,4 +272,4 @@ export default class VehicleModel extends Model {
272272

273273
return devices;
274274
}
275-
}
275+
}

addon/serializers/service-rate.js

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,25 @@ export default class ServiceRateSerializer extends ApplicationSerializer.extend(
2424
*/
2525
normalizeSaveResponse(store, primaryModelClass, payload, id, requestType) {
2626
const normalized = super.normalizeSaveResponse(store, primaryModelClass, payload, id, requestType);
27-
27+
2828
// After normalization, replace rate_fees with only the saved records from backend
2929
if (normalized.data && normalized.data.type === 'service-rate') {
3030
const serviceRateId = normalized.data.id;
31-
const rateFeeIds = normalized.data.relationships?.rate_fees?.data || [];
32-
31+
3332
// Schedule after store update using Ember run loop
3433
next(() => {
3534
const serviceRate = store.peekRecord('service-rate', serviceRateId);
3635
if (serviceRate) {
3736
// Cleanup rate_fees duplicates (for Fixed Rate and Per-Drop)
3837
const allRateFees = serviceRate.get('rate_fees').toArray();
39-
const savedRateFees = allRateFees.filter(f => !f.isNew);
40-
const unsavedRateFees = allRateFees.filter(f => f.isNew);
41-
38+
const savedRateFees = allRateFees.filter((f) => !f.isNew);
39+
const unsavedRateFees = allRateFees.filter((f) => f.isNew);
40+
4241
// Create a map of saved fees by distance
43-
const savedByDistance = new Map(savedRateFees.map(f => [f.distance, f]));
44-
42+
const savedByDistance = new Map(savedRateFees.map((f) => [f.distance, f]));
43+
4544
// Only remove unsaved fees that duplicate saved fees
46-
unsavedRateFees.forEach(fee => {
45+
unsavedRateFees.forEach((fee) => {
4746
if (savedByDistance.has(fee.distance)) {
4847
serviceRate.get('rate_fees').removeObject(fee);
4948
fee.unloadRecord();
@@ -52,24 +51,21 @@ export default class ServiceRateSerializer extends ApplicationSerializer.extend(
5251

5352
// Cleanup parcel_fees duplicates
5453
const allParcelFees = serviceRate.get('parcel_fees').toArray();
55-
const savedParcelFees = allParcelFees.filter(f => !f.isNew);
56-
const unsavedParcelFees = allParcelFees.filter(f => f.isNew);
57-
58-
// Create a map of saved parcel fees by uuid (or another unique key)
59-
const savedParcelByUuid = new Map(savedParcelFees.map(f => [f.get('id'), f]));
60-
54+
const savedParcelFees = allParcelFees.filter((f) => !f.isNew);
55+
const unsavedParcelFees = allParcelFees.filter((f) => f.isNew);
56+
57+
// // Create a map of saved parcel fees by uuid (or another unique key)
58+
// const savedParcelByUuid = new Map(savedParcelFees.map((f) => [f.get('id'), f]));
59+
6160
// Remove unsaved parcel fees that have a saved version
62-
unsavedParcelFees.forEach(fee => {
61+
unsavedParcelFees.forEach((fee) => {
6362
// For parcel fees, we need to check if there's a duplicate based on attributes
6463
// Since they don't have a simple key like distance, we'll just remove all unsaved ones
6564
// that don't have unique identifying attributes
66-
const hasDuplicate = savedParcelFees.some(saved =>
67-
saved.size === fee.size &&
68-
saved.length === fee.length &&
69-
saved.width === fee.width &&
70-
saved.height === fee.height
65+
const hasDuplicate = savedParcelFees.some(
66+
(saved) => saved.size === fee.size && saved.length === fee.length && saved.width === fee.width && saved.height === fee.height
7167
);
72-
68+
7369
if (hasDuplicate) {
7470
serviceRate.get('parcel_fees').removeObject(fee);
7571
fee.unloadRecord();
@@ -78,7 +74,7 @@ export default class ServiceRateSerializer extends ApplicationSerializer.extend(
7874
}
7975
});
8076
}
81-
77+
8278
return normalized;
8379
}
8480
}

0 commit comments

Comments
 (0)