@movalib/movalib-commons 1.68.36 → 1.68.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -32,7 +32,7 @@ export { default as Logger } from "./src/helpers/Logger";
32
32
  export { default as Absence } from "./src/models/Absence";
33
33
  export { default as Address } from "./src/models/Address";
34
34
  export { default as CategoryPrestation } from "./src/models/CategoryPrestation";
35
- export { default as Customer } from "./src/models/Customer";
35
+ export { default as Customer, Contact } from "./src/models/Customer";
36
36
  export type { EmailVerification } from "./src/models/EmailVerification";
37
37
  export { default as Document } from "./src/models/Document";
38
38
  export { default as Employee } from "./src/models/Employee";
package/dist/index.js CHANGED
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.Supplier = exports.Subscription = exports.Schedule = exports.Role = exports.Product = exports.Prestation = exports.Operation = exports.LoanVehicle = exports.Garage = exports.Event = exports.Employee = exports.Document = exports.Customer = exports.CategoryPrestation = exports.Address = exports.Absence = exports.Logger = exports.TestButton = exports.ScheduleFields = exports.QRCode = exports.MovaVehicleTireField = exports.MovaSnackbar = exports.MovaSignUp = exports.MovaLogin = exports.MovaDigitalPassport = exports.MovaDialog = exports.MovaCopyright = exports.Loader = exports.IbanInput = exports.GenderSelector = exports.GaragePLV = exports.DialogForgotPassword = exports.ConfirmationDialog = exports.regexPlate = exports.oldRegexPlate = exports.VehiclePlateField = exports.VehicleFullCard = exports.ActivateAccount = exports.QrCodePLVContainer = exports.PrintSize = exports.PLVComponent = exports.MovaTableBack = exports.MovaTable = exports.LinkedDocumentDialog = exports.AddressFields = exports.AccountValidation = exports.VehicleService = exports.UserService = exports.GarageService = exports.AuthenticationService = void 0;
8
- exports.SlotAlgorithm = exports.SecondaryPartsApplicationType = exports.RoleType = exports.RegistrationState = exports.ProductType = exports.PrestationType = exports.PrestationState = exports.PartsApplicationType = exports.OrderState = exports.OrderPreference = exports.MovaAppType = exports.Gender = exports.EventType = exports.EventState = exports.DocumentType = exports.DocumentState = exports.DigitalPassportIndex = exports.DayOfWeek = exports.DateFormatTypes = exports.CustomerType = exports.CountryCode = exports.APIMethod = exports.validateText = exports.validatePhoneNumber = exports.validateEmail = exports.validateField = exports.isSafariOniOS = exports.isEmpty = exports.getFormattedSchedule = exports.getFormattedIntervals = exports.getDayOfWeekLabel = exports.getApplicationsShortLabels = exports.getApplicationShortLabel = exports.formatVehicleTire = exports.formatVehiclePlate = exports.formatPhoneNumber = exports.flexLeftRow = exports.findScheduleByDayOfWeek = exports.capitalizeFirstLetter = exports.getLongFormattedDateTime = exports.formatDateByTimezone = exports.readCookie = exports.deleteCookie = exports.request = exports.API_BASE_URL = exports.LoanVehicleLightAgreement = exports.VehicleTire = exports.VehicleGarage = exports.Vehicle = exports.User = void 0;
9
- exports.StyledToggleButtonGroup = exports.StyledToggleButton = exports.getSetting = exports.isStockActive = exports.getQrCodeBase64 = exports.openDialogPrint = exports.VehiclePlateType = exports.SubscriptionType = exports.SubscriptionState = exports.SubscriptionPaymentInterval = void 0;
7
+ exports.Subscription = exports.Schedule = exports.Role = exports.Product = exports.Prestation = exports.Operation = exports.LoanVehicle = exports.Garage = exports.Event = exports.Employee = exports.Document = exports.Contact = exports.Customer = exports.CategoryPrestation = exports.Address = exports.Absence = exports.Logger = exports.TestButton = exports.ScheduleFields = exports.QRCode = exports.MovaVehicleTireField = exports.MovaSnackbar = exports.MovaSignUp = exports.MovaLogin = exports.MovaDigitalPassport = exports.MovaDialog = exports.MovaCopyright = exports.Loader = exports.IbanInput = exports.GenderSelector = exports.GaragePLV = exports.DialogForgotPassword = exports.ConfirmationDialog = exports.regexPlate = exports.oldRegexPlate = exports.VehiclePlateField = exports.VehicleFullCard = exports.ActivateAccount = exports.QrCodePLVContainer = exports.PrintSize = exports.PLVComponent = exports.MovaTableBack = exports.MovaTable = exports.LinkedDocumentDialog = exports.AddressFields = exports.AccountValidation = exports.VehicleService = exports.UserService = exports.GarageService = exports.AuthenticationService = void 0;
8
+ exports.SecondaryPartsApplicationType = exports.RoleType = exports.RegistrationState = exports.ProductType = exports.PrestationType = exports.PrestationState = exports.PartsApplicationType = exports.OrderState = exports.OrderPreference = exports.MovaAppType = exports.Gender = exports.EventType = exports.EventState = exports.DocumentType = exports.DocumentState = exports.DigitalPassportIndex = exports.DayOfWeek = exports.DateFormatTypes = exports.CustomerType = exports.CountryCode = exports.APIMethod = exports.validateText = exports.validatePhoneNumber = exports.validateEmail = exports.validateField = exports.isSafariOniOS = exports.isEmpty = exports.getFormattedSchedule = exports.getFormattedIntervals = exports.getDayOfWeekLabel = exports.getApplicationsShortLabels = exports.getApplicationShortLabel = exports.formatVehicleTire = exports.formatVehiclePlate = exports.formatPhoneNumber = exports.flexLeftRow = exports.findScheduleByDayOfWeek = exports.capitalizeFirstLetter = exports.getLongFormattedDateTime = exports.formatDateByTimezone = exports.readCookie = exports.deleteCookie = exports.request = exports.API_BASE_URL = exports.LoanVehicleLightAgreement = exports.VehicleTire = exports.VehicleGarage = exports.Vehicle = exports.User = exports.Supplier = void 0;
9
+ exports.StyledToggleButtonGroup = exports.StyledToggleButton = exports.getSetting = exports.isStockActive = exports.getQrCodeBase64 = exports.openDialogPrint = exports.VehiclePlateType = exports.SubscriptionType = exports.SubscriptionState = exports.SubscriptionPaymentInterval = exports.SlotAlgorithm = void 0;
10
10
  // Export des services
11
11
  var AuthenticationService_1 = require("./src/services/AuthenticationService");
12
12
  Object.defineProperty(exports, "AuthenticationService", { enumerable: true, get: function () { return __importDefault(AuthenticationService_1).default; } });
@@ -83,6 +83,7 @@ var CategoryPrestation_1 = require("./src/models/CategoryPrestation");
83
83
  Object.defineProperty(exports, "CategoryPrestation", { enumerable: true, get: function () { return __importDefault(CategoryPrestation_1).default; } });
84
84
  var Customer_1 = require("./src/models/Customer");
85
85
  Object.defineProperty(exports, "Customer", { enumerable: true, get: function () { return __importDefault(Customer_1).default; } });
86
+ Object.defineProperty(exports, "Contact", { enumerable: true, get: function () { return Customer_1.Contact; } });
86
87
  var Document_1 = require("./src/models/Document");
87
88
  Object.defineProperty(exports, "Document", { enumerable: true, get: function () { return __importDefault(Document_1).default; } });
88
89
  var Employee_1 = require("./src/models/Employee");
@@ -54,6 +54,7 @@ var jsx_runtime_1 = require("react/jsx-runtime");
54
54
  var icons_material_1 = require("@mui/icons-material");
55
55
  var CloseRounded_1 = __importDefault(require("@mui/icons-material/CloseRounded"));
56
56
  var EditRounded_1 = __importDefault(require("@mui/icons-material/EditRounded"));
57
+ var NoteAlt_1 = __importDefault(require("@mui/icons-material/NoteAlt"));
57
58
  var material_1 = require("@mui/material");
58
59
  var x_date_pickers_1 = require("@mui/x-date-pickers");
59
60
  var moment_1 = __importDefault(require("moment"));
@@ -98,21 +99,23 @@ var VehicleFullCard = function (_a) {
98
99
  var _b, _c, _d, _e;
99
100
  var vehicle = _a.vehicle, fullwidth = _a.fullwidth, onError = _a.onError, onUploadDocument = _a.onUploadDocument, onDeleteDocument = _a.onDeleteDocument, appType = _a.appType, _f = _a.editMode, editMode = _f === void 0 ? false : _f, _g = _a.focused, focused = _g === void 0 ? false : _g, onUpdate = _a.onUpdate, onDelete = _a.onDelete, currentUpload = _a.currentUpload, currentUser = _a.currentUser;
100
101
  var theme = (0, material_1.useTheme)();
102
+ var isDesktop = (0, material_1.useMediaQuery)(theme.breakpoints.up('md'));
103
+ var _h = (0, react_1.useState)(null), notesAnchorEl = _h[0], setNotesAnchorEl = _h[1];
101
104
  var sectionTitleSx = {
102
105
  fontWeight: "bold",
103
106
  textTransform: "uppercase",
104
107
  mb: 1,
105
108
  color: theme.palette.primary.main
106
109
  };
107
- var _h = (0, react_1.useState)(editMode), localEditMode = _h[0], setLocalEditMode = _h[1];
108
- var _j = (0, react_1.useState)(false), openConfirmDocumentDelete = _j[0], setOpenConfirmDocumentDelete = _j[1];
109
- var _k = (0, react_1.useState)(false), openConfirmVehicleDelete = _k[0], setOpenConfirmVehicleDelete = _k[1];
110
- var _l = (0, react_1.useState)(""), documentToDelete = _l[0], setDocumentToDelete = _l[1];
111
- var _m = (0, react_1.useState)(false), sizeLimit = _m[0], setSizeLimit = _m[1];
112
- var _o = (0, react_1.useState)(initialUserFormState), form = _o[0], setForm = _o[1];
110
+ var _j = (0, react_1.useState)(editMode), localEditMode = _j[0], setLocalEditMode = _j[1];
111
+ var _k = (0, react_1.useState)(false), openConfirmDocumentDelete = _k[0], setOpenConfirmDocumentDelete = _k[1];
112
+ var _l = (0, react_1.useState)(false), openConfirmVehicleDelete = _l[0], setOpenConfirmVehicleDelete = _l[1];
113
+ var _m = (0, react_1.useState)(""), documentToDelete = _m[0], setDocumentToDelete = _m[1];
114
+ var _o = (0, react_1.useState)(false), sizeLimit = _o[0], setSizeLimit = _o[1];
115
+ var _p = (0, react_1.useState)(initialUserFormState), form = _p[0], setForm = _p[1];
113
116
  var invoiceInputRef = (0, react_1.useRef)(null);
114
117
  var tirePictureInputRef = (0, react_1.useRef)(null);
115
- var _p = (0, react_1.useState)(false), isShowLinkedDocument = _p[0], setShowLinkedDocument = _p[1];
118
+ var _q = (0, react_1.useState)(false), isShowLinkedDocument = _q[0], setShowLinkedDocument = _q[1];
116
119
  var docTypeCurrent = (0, react_1.useRef)();
117
120
  var messageRGPD = appType === Enums_1.MovaAppType.INDIVIDUAL ? ((0, jsx_runtime_1.jsx)(material_1.Box, {})) : ((0, jsx_runtime_1.jsx)(material_1.Box, { sx: { mt: 2 }, children: (0, jsx_runtime_1.jsx)(material_1.Alert, { severity: "warning", children: "Vous \u00EAtes responsable des documents que vous importez, en ajoutant un document vous reconnaissez disposer du consentement explicite du client pour le stockage de ses donn\u00E9es conform\u00E9ment \u00E0 la r\u00E9glementation RGPD." }) }));
118
121
  (0, react_1.useEffect)(function () {
@@ -280,7 +283,7 @@ var VehicleFullCard = function (_a) {
280
283
  case 1: return [2 /*return*/, _a.sent()];
281
284
  }
282
285
  });
283
- }); }, "aria-label": "Copier la plaque", children: (0, jsx_runtime_1.jsx)(icons_material_1.ContentCopy, { sx: { fontSize: 14, color: "text.disabled" } }) })] })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: "flex", flexDirection: "row", alignItems: "flex-end", gap: 1 }, children: [onDelete && ((0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", color: "error", size: "small", onClick: function (e) { return handleOnClickDeleteVehicle(e); }, children: "Supprimer" })), !localEditMode && ((0, jsx_runtime_1.jsx)(material_1.Button, { onClick: handleOnClickEdit, size: "small", variant: "outlined", startIcon: (0, jsx_runtime_1.jsx)(EditRounded_1.default, { sx: { fontSize: "14px !important" } }), sx: {
286
+ }); }, "aria-label": "Copier la plaque", children: (0, jsx_runtime_1.jsx)(icons_material_1.ContentCopy, { sx: { fontSize: 14, color: "text.disabled" } }) })] })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: "flex", flexDirection: "row", alignItems: "flex-end", gap: 1 }, children: [vehicle.notes && appType !== Enums_1.MovaAppType.INDIVIDUAL && (isDesktop ? ((0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: vehicle.notes.length > 500 ? vehicle.notes.slice(0, 500) + '…' : vehicle.notes, children: (0, jsx_runtime_1.jsx)(NoteAlt_1.default, { sx: { color: '#F59E0B', fontSize: 22, cursor: 'default', alignSelf: 'center' } }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.IconButton, { size: "small", onClick: function (e) { return setNotesAnchorEl(e.currentTarget); }, sx: { p: 0.5, alignSelf: 'center' }, children: (0, jsx_runtime_1.jsx)(NoteAlt_1.default, { sx: { color: '#F59E0B', fontSize: 22 } }) }), (0, jsx_runtime_1.jsx)(material_1.Popover, { open: Boolean(notesAnchorEl), anchorEl: notesAnchorEl, onClose: function () { return setNotesAnchorEl(null); }, anchorOrigin: { vertical: 'bottom', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'right' }, children: (0, jsx_runtime_1.jsx)(material_1.Typography, { sx: { p: 2, maxWidth: 280, fontSize: 13 }, children: vehicle.notes.length > 500 ? vehicle.notes.slice(0, 500) + '…' : vehicle.notes }) })] }))), onDelete && ((0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", color: "error", size: "small", onClick: function (e) { return handleOnClickDeleteVehicle(e); }, children: "Supprimer" })), !localEditMode && ((0, jsx_runtime_1.jsx)(material_1.Button, { onClick: handleOnClickEdit, size: "small", variant: "outlined", startIcon: (0, jsx_runtime_1.jsx)(EditRounded_1.default, { sx: { fontSize: "14px !important" } }), sx: {
284
287
  fontSize: 12,
285
288
  borderColor: "divider",
286
289
  }, children: "Modifier" }))] })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { px: 2, py: 1.5, borderBottom: "0.5px solid", borderColor: "divider" }, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "body2", sx: sectionTitleSx, children: "Kilom\u00E9trage" }), (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 1 }, children: [(0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { bgcolor: "grey.50", borderRadius: 1, p: 1.25 }, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "caption", color: "text.secondary", display: "block", children: "Actuel" }), !localEditMode ? ((0, jsx_runtime_1.jsxs)(material_1.Typography, { variant: "body1", fontWeight: 500, children: [(_b = vehicle.currentMileage) !== null && _b !== void 0 ? _b : "-", " ", (0, jsx_runtime_1.jsx)(material_1.Typography, { component: "span", variant: "caption", color: "text.secondary", children: "km" })] })) : ((0, jsx_runtime_1.jsx)(material_1.TextField, { name: "currentMileage", variant: "standard", type: "number", required: true, value: (_c = form.currentMileage.value) !== null && _c !== void 0 ? _c : "", onChange: handleInputChange, error: Boolean(form.currentMileage.error), helperText: Boolean(form.currentMileage.error && form.currentMileage.value > 0)
@@ -4,6 +4,14 @@ import { EmailVerification } from "./EmailVerification";
4
4
  import Role from "./Role";
5
5
  import User from "./User";
6
6
  import Vehicle from "./Vehicle";
7
+ export declare class Contact {
8
+ id: number;
9
+ name?: string;
10
+ phoneNumber?: string;
11
+ email?: string;
12
+ emailVerification?: EmailVerification;
13
+ constructor(id: number, name?: string, phoneNumber?: string, email?: string, emailVerification?: EmailVerification);
14
+ }
7
15
  export default class Customer extends User {
8
16
  vehicles: Vehicle[];
9
17
  turnover: {
@@ -41,8 +49,10 @@ export default class Customer extends User {
41
49
  drivingLicenseNumber?: string;
42
50
  drivingLicenseObtainedAt?: Date;
43
51
  drivingLicensePlace?: string;
52
+ contacts?: Contact[];
53
+ deliveryNotePriced?: boolean;
44
54
  constructor(id: string, roles: Role[] | undefined, firstname: string | undefined, lastname: string | undefined, avatar: string | undefined, addresses: Address[] | undefined, vehicles: Vehicle[], email: string | undefined, turnover: {
45
55
  key: string;
46
56
  value: number;
47
- }[], type: CustomerType, companyName: string, companyPhoneNumber: string, billingAddress: Address | undefined, notes: string, siren?: string, vatId?: string, contactId?: number, establishmentId?: number, paymentMethods?: string, paymentPeriod?: number, discountRate?: number, billingEmail?: string, additionalEmails?: string, seCode?: string, drivingLicenseNumber?: string, drivingLicenseObtainedAt?: Date, drivingLicensePlace?: string);
57
+ }[], type: CustomerType, companyName: string, companyPhoneNumber: string, billingAddress: Address | undefined, notes: string, siren?: string, vatId?: string, contactId?: number, establishmentId?: number, paymentMethods?: string, paymentPeriod?: number, discountRate?: number, billingEmail?: string, additionalEmails?: string, seCode?: string, drivingLicenseNumber?: string, drivingLicenseObtainedAt?: Date, drivingLicensePlace?: string, contacts?: Contact[], deliveryNotePriced?: boolean);
48
58
  }
@@ -18,10 +18,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
18
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.Contact = void 0;
21
22
  var User_1 = __importDefault(require("./User"));
23
+ var Contact = /** @class */ (function () {
24
+ function Contact(id, name, phoneNumber, email, emailVerification) {
25
+ this.id = id;
26
+ this.name = name;
27
+ this.phoneNumber = phoneNumber;
28
+ this.email = email;
29
+ this.emailVerification = emailVerification;
30
+ }
31
+ return Contact;
32
+ }());
33
+ exports.Contact = Contact;
22
34
  var Customer = /** @class */ (function (_super) {
23
35
  __extends(Customer, _super);
24
- function Customer(id, roles, firstname, lastname, avatar, addresses, vehicles, email, turnover, type, companyName, companyPhoneNumber, billingAddress, notes, siren, vatId, contactId, establishmentId, paymentMethods, paymentPeriod, discountRate, billingEmail, additionalEmails, seCode, drivingLicenseNumber, drivingLicenseObtainedAt, drivingLicensePlace) {
36
+ function Customer(id, roles, firstname, lastname, avatar, addresses, vehicles, email, turnover, type, companyName, companyPhoneNumber, billingAddress, notes, siren, vatId, contactId, establishmentId, paymentMethods, paymentPeriod, discountRate, billingEmail, additionalEmails, seCode, drivingLicenseNumber, drivingLicenseObtainedAt, drivingLicensePlace, contacts, deliveryNotePriced) {
25
37
  if (roles === void 0) { roles = []; }
26
38
  if (firstname === void 0) { firstname = ""; }
27
39
  if (lastname === void 0) { lastname = ""; }
@@ -52,6 +64,8 @@ var Customer = /** @class */ (function (_super) {
52
64
  _this.drivingLicenseNumber = drivingLicenseNumber;
53
65
  _this.drivingLicenseObtainedAt = drivingLicenseObtainedAt;
54
66
  _this.drivingLicensePlace = drivingLicensePlace;
67
+ _this.contacts = contacts;
68
+ _this.deliveryNotePriced = deliveryNotePriced;
55
69
  return _this;
56
70
  }
57
71
  return Customer;
@@ -3,7 +3,8 @@ export declare enum SettingsEnumCode {
3
3
  NO_PHONE_CUSTOMER_CREATION = "NO_PHONE_CUSTOMER_CREATION",
4
4
  DOCUMENT_PRODUCT_CREATION = "DOCUMENT_PRODUCT_CREATION",
5
5
  DOCUMENT_PRODUCT_UPDATE = "DOCUMENT_PRODUCT_UPDATE",
6
- DOCUMENT_MILEAGE_OPTIONAL = "DOCUMENT_MILEAGE_OPTIONAL"
6
+ DOCUMENT_MILEAGE_OPTIONAL = "DOCUMENT_MILEAGE_OPTIONAL",
7
+ DEFAULT_QUOTE_EMAIL_COMMENT = "DEFAULT_QUOTE_EMAIL_COMMENT"
7
8
  }
8
9
  export default class Settings {
9
10
  code: SettingsEnumCode;
@@ -8,6 +8,7 @@ var SettingsEnumCode;
8
8
  SettingsEnumCode["DOCUMENT_PRODUCT_CREATION"] = "DOCUMENT_PRODUCT_CREATION";
9
9
  SettingsEnumCode["DOCUMENT_PRODUCT_UPDATE"] = "DOCUMENT_PRODUCT_UPDATE";
10
10
  SettingsEnumCode["DOCUMENT_MILEAGE_OPTIONAL"] = "DOCUMENT_MILEAGE_OPTIONAL";
11
+ SettingsEnumCode["DEFAULT_QUOTE_EMAIL_COMMENT"] = "DEFAULT_QUOTE_EMAIL_COMMENT";
11
12
  })(SettingsEnumCode || (exports.SettingsEnumCode = SettingsEnumCode = {}));
12
13
  var Settings = /** @class */ (function () {
13
14
  function Settings(code, valueBoolean, valueText, valueNumber) {
@@ -34,6 +34,7 @@ export default class Vehicle {
34
34
  gearboxCode: string;
35
35
  gearboxType: string;
36
36
  energy: string;
37
+ notes?: string;
37
38
  constructor(id: number, ownerId: number, averageMileagePerYear: number, plate: string, brand: string, model: string, version: string, vin: string, currentMileage: number, digitalPassportIndex: DigitalPassportIndex, firstRegistrationDate: Date, ktype: string, tireDiameter: string, tireHeight: string, tireSpeedIndex: string, tireWidth: string, documents: Document[], tireSize: VehicleTire, lastInspectionDate: Date, lastMaintenanceDate: Date, foreignPlate: boolean, secondaryTireDiameter: string, secondaryTireHeight: string, secondaryTireSpeedIndex: string, secondaryTireWidth: string, secondaryTireSize: VehicleTire, engineCode: string, gearboxCode: string, gearboxType: string, energy: string, tireBrand?: string, tireProfile?: string);
38
39
  getVehicleLabel(): string;
39
40
  }
@@ -28,7 +28,7 @@ export default class GarageService {
28
28
  }): Promise<APIResponse<Garage>>;
29
29
  static uploadLogo(garageId: string, formData: FormData): Promise<APIResponse<string>>;
30
30
  static sendInterventionEnd(garageId: string, eventId: string): Promise<APIResponse<string>>;
31
- static sendAppointmentVehicleAvailable(garageId: string, eventId: string): Promise<APIResponse<string>>;
31
+ static sendAppointmentVehicleAvailable(garageId: string, eventId: string, contactId?: number): Promise<APIResponse<string>>;
32
32
  static enableGaragePrestation(garageId: string, prestationId: string): Promise<APIResponse<string>>;
33
33
  static disableGaragePrestation(garageId: string, prestationId: string): Promise<APIResponse<string>>;
34
34
  static getEmployeeDetails(garageId: string, employeeId: string): Promise<APIResponse<Employee>>;
@@ -174,9 +174,15 @@ var GarageService = /** @class */ (function () {
174
174
  appType: Enums_1.MovaAppType.GARAGE,
175
175
  });
176
176
  };
177
- GarageService.sendAppointmentVehicleAvailable = function (garageId, eventId) {
177
+ GarageService.sendAppointmentVehicleAvailable = function (garageId, eventId, contactId) {
178
+ var body;
179
+ if (contactId !== undefined) {
180
+ body = new FormData();
181
+ body.append('contactId', contactId.toString());
182
+ }
178
183
  return (0, ApiHelper_1.request)({
179
184
  url: "".concat(ApiHelper_1.API_BASE_URL, "/garage/").concat(garageId, "/event/").concat(eventId, "/vehicle-available"),
185
+ body: body,
180
186
  method: Enums_1.APIMethod.POST,
181
187
  appType: Enums_1.MovaAppType.GARAGE,
182
188
  });
@@ -66,4 +66,3 @@ exports.StyledToggleButtonGroup = (0, material_1.styled)(material_1.ToggleButton
66
66
  },
67
67
  });
68
68
  });
69
- ;
@@ -75,4 +75,4 @@ export const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) =>
75
75
  backgroundColor: theme.palette.primary.light, // Modifier la couleur de fond au survol
76
76
  },
77
77
  },
78
- }))as React.ComponentType<ToggleButtonGroupProps>;;
78
+ }))as React.ComponentType<ToggleButtonGroupProps>;
package/index.ts CHANGED
@@ -46,7 +46,7 @@ export { default as Logger } from "./src/helpers/Logger";
46
46
  export { default as Absence } from "./src/models/Absence";
47
47
  export { default as Address } from "./src/models/Address";
48
48
  export { default as CategoryPrestation } from "./src/models/CategoryPrestation";
49
- export { default as Customer } from "./src/models/Customer";
49
+ export { default as Customer, Contact } from "./src/models/Customer";
50
50
  export type { EmailVerification } from "./src/models/EmailVerification";
51
51
  export { default as Document } from "./src/models/Document";
52
52
  export { default as Employee } from "./src/models/Employee";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@movalib/movalib-commons",
3
- "version": "1.68.36",
3
+ "version": "1.68.37",
4
4
  "description": "Bibliothèque d'objets communs à l'ensemble des projets React de Movalib",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -4,6 +4,7 @@ import {
4
4
  default as CloseIcon,
5
5
  } from "@mui/icons-material/CloseRounded";
6
6
  import EditIcon from "@mui/icons-material/EditRounded";
7
+ import NoteAltIcon from "@mui/icons-material/NoteAlt";
7
8
  import {
8
9
  Alert,
9
10
  Box,
@@ -19,12 +20,14 @@ import {
19
20
  InputLabel,
20
21
  Link,
21
22
  MenuItem,
23
+ Popover,
22
24
  Select,
23
25
  SelectChangeEvent,
24
26
  TextField,
25
27
  Tooltip,
26
28
  Typography,
27
29
  darken,
30
+ useMediaQuery,
28
31
  useTheme,
29
32
  } from "@mui/material";
30
33
  import { DatePicker } from "@mui/x-date-pickers";
@@ -109,6 +112,8 @@ const VehicleFullCard: FC<VehicleFullCardProps> = ({
109
112
  currentUser,
110
113
  }) => {
111
114
  const theme = useTheme();
115
+ const isDesktop = useMediaQuery(theme.breakpoints.up('md'));
116
+ const [notesAnchorEl, setNotesAnchorEl] = useState<HTMLElement | null>(null);
112
117
  const sectionTitleSx = {
113
118
  fontWeight: "bold",
114
119
  textTransform: "uppercase" as const,
@@ -399,6 +404,31 @@ const VehicleFullCard: FC<VehicleFullCardProps> = ({
399
404
  {/* Bouton modifier / supprimer */}
400
405
  <Box sx={{ display: "flex", flexDirection: "row", alignItems: "flex-end", gap: 1 }}>
401
406
 
407
+ {vehicle.notes && appType !== MovaAppType.INDIVIDUAL && (
408
+ isDesktop ? (
409
+ <Tooltip title={vehicle.notes.length > 500 ? vehicle.notes.slice(0, 500) + '…' : vehicle.notes}>
410
+ <NoteAltIcon sx={{ color: '#F59E0B', fontSize: 22, cursor: 'default', alignSelf: 'center' }} />
411
+ </Tooltip>
412
+ ) : (
413
+ <>
414
+ <IconButton size="small" onClick={(e) => setNotesAnchorEl(e.currentTarget)} sx={{ p: 0.5, alignSelf: 'center' }}>
415
+ <NoteAltIcon sx={{ color: '#F59E0B', fontSize: 22 }} />
416
+ </IconButton>
417
+ <Popover
418
+ open={Boolean(notesAnchorEl)}
419
+ anchorEl={notesAnchorEl}
420
+ onClose={() => setNotesAnchorEl(null)}
421
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
422
+ transformOrigin={{ vertical: 'top', horizontal: 'right' }}
423
+ >
424
+ <Typography sx={{ p: 2, maxWidth: 280, fontSize: 13 }}>
425
+ {vehicle.notes.length > 500 ? vehicle.notes.slice(0, 500) + '…' : vehicle.notes}
426
+ </Typography>
427
+ </Popover>
428
+ </>
429
+ )
430
+ )}
431
+
402
432
  {onDelete && (
403
433
  <Button
404
434
  variant="outlined"
@@ -5,6 +5,21 @@ import Role from "./Role";
5
5
  import User from "./User";
6
6
  import Vehicle from "./Vehicle";
7
7
 
8
+ export class Contact {
9
+ id: number;
10
+ name?: string;
11
+ phoneNumber?: string;
12
+ email?: string;
13
+ emailVerification?: EmailVerification;
14
+ constructor(id:number, name?:string, phoneNumber?:string, email?: string, emailVerification?: EmailVerification) {
15
+ this.id = id;
16
+ this.name = name;
17
+ this.phoneNumber = phoneNumber;
18
+ this.email = email;
19
+ this.emailVerification = emailVerification;
20
+ }
21
+ }
22
+
8
23
  export default class Customer extends User {
9
24
  // Properties
10
25
  vehicles: Vehicle[];
@@ -43,6 +58,8 @@ export default class Customer extends User {
43
58
  drivingLicenseNumber?: string;
44
59
  drivingLicenseObtainedAt?: Date;
45
60
  drivingLicensePlace?: string;
61
+ contacts?: Contact[];
62
+ deliveryNotePriced?:boolean;
46
63
  constructor(
47
64
  id: string,
48
65
  roles: Role[] = [],
@@ -70,7 +87,9 @@ export default class Customer extends User {
70
87
  seCode?:string,
71
88
  drivingLicenseNumber?:string,
72
89
  drivingLicenseObtainedAt?:Date,
73
- drivingLicensePlace?:string
90
+ drivingLicensePlace?:string,
91
+ contacts?:Contact[],
92
+ deliveryNotePriced?:boolean
74
93
  ) {
75
94
  super(id, roles, firstname, lastname, avatar, email);
76
95
 
@@ -94,5 +113,7 @@ export default class Customer extends User {
94
113
  this.drivingLicenseNumber = drivingLicenseNumber;
95
114
  this.drivingLicenseObtainedAt = drivingLicenseObtainedAt;
96
115
  this.drivingLicensePlace = drivingLicensePlace;
116
+ this.contacts =contacts;
117
+ this.deliveryNotePriced = deliveryNotePriced;
97
118
  }
98
119
  }
@@ -4,6 +4,8 @@ export enum SettingsEnumCode {
4
4
  DOCUMENT_PRODUCT_CREATION = "DOCUMENT_PRODUCT_CREATION",
5
5
  DOCUMENT_PRODUCT_UPDATE ="DOCUMENT_PRODUCT_UPDATE",
6
6
  DOCUMENT_MILEAGE_OPTIONAL="DOCUMENT_MILEAGE_OPTIONAL",
7
+ DEFAULT_QUOTE_EMAIL_COMMENT="DEFAULT_QUOTE_EMAIL_COMMENT"
8
+
7
9
  }
8
10
  export default class Settings {
9
11
 
@@ -47,6 +47,7 @@ export default class Vehicle {
47
47
  gearboxCode: string;
48
48
  gearboxType: string;
49
49
  energy: string;
50
+ notes?: string;
50
51
  constructor(
51
52
  id: number,
52
53
  ownerId: number,
@@ -250,15 +250,21 @@ export default class GarageService {
250
250
 
251
251
  static sendAppointmentVehicleAvailable(
252
252
  garageId: string,
253
- eventId: string
253
+ eventId: string,
254
+ contactId?: number
254
255
  ): Promise<APIResponse<string>> {
256
+ let body: FormData | undefined;
257
+ if (contactId !== undefined) {
258
+ body = new FormData();
259
+ body.append('contactId', contactId.toString());
260
+ }
255
261
  return request({
256
262
  url: `${API_BASE_URL}/garage/${garageId}/event/${eventId}/vehicle-available`,
263
+ body,
257
264
  method: APIMethod.POST,
258
265
  appType: MovaAppType.GARAGE,
259
266
  });
260
267
  }
261
-
262
268
  static enableGaragePrestation(
263
269
  garageId: string,
264
270
  prestationId: string
@@ -75,4 +75,4 @@ export const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) =>
75
75
  backgroundColor: theme.palette.primary.light, // Modifier la couleur de fond au survol
76
76
  },
77
77
  },
78
- }))as React.ComponentType<ToggleButtonGroupProps>;;
78
+ }))as React.ComponentType<ToggleButtonGroupProps>;