yes:
function onLoadSetSchedulesEnum(fields: IForestSmartActionFields, payment: IPayment) {
fields['Echéance à rembourser'].enums = getScheduleEnumValues(payment, [EPaymentStatus.COMPLETED], [EPaymentMethod.CARD])
}
async function onLoadSetParticipantEnum(fields: IForestSmartActionFields, payment: IPayment) {
const order = payment.orderId as IOrder
const collect: ICollect = await GetOneCollect.init({ _id: order.collect })
if (collect.type !== ECollectType.REGATTA) {
const orderDetails: IRegistrationOrderDetails = await GetRegistrationOrderDetails.init(order._id)
fields["Article d'un participant"].enums = orderDetails.orderItemsByParticipant.flatMap(participant => {
return participant.orderItems.flatMap(({ productName, orderItemIds, variants }) => {
if (variants && variants.length > 0) {
return variants.map(
({ weekDay, startTime, endTime, orderItemId }) =>
`${participant.participantFullname} - ${productName} - créneau du ${EWeekDayLabel[weekDay]} ${startTime} à ${endTime} - ${orderItemId}`
)
}
return `${participant.participantFullname} - ${productName} - ${orderItemIds[0]}`
})
})
}
}
export const refundPaymentScheduleAction = {
name: 'Rembourser une échéance en CB',
type: 'single',
fields: [
{
field: 'Echéance à rembourser',
type: 'Enum',
description: "Si aucune échéance n'a été payée, la liste est vide.",
enums: [],
isRequired: true
},
{
field: "Montant déjà remboursé sur l'échéance",
description: 'Ce champs est à titre informatif. Il ne sera jamais pris en compte.',
type: 'Number',
isReadOnly: true
},
,
{
field: "Montant restant sur l'échéance",
description: 'Ce champs est à titre informatif. Il ne sera jamais pris en compte.',
type: 'Number',
isReadOnly: true
},
{
field: "Article d'un participant",
description: "UNIQUEMENT si le remboursement concerne l'article d'un participant en particuliers. Sinon, laisser vide",
type: 'Enum',
enums: []
},
{
field: 'Remettre en vente ?',
description: "Action appliquée à tous les articles ou UNIQUEMENT à l'article du participant sélectionné.",
type: 'Enum',
enums: ['NON', 'OUI'],
isRequired: true
},
{
field: "Quantité de l'article à remettre en vente",
description:
"Indiquer une quantité UNIQUEMENT si l'article d'un participant est sélectionné. Si aucun article n'est sélectionné et que vous remmettez les quantités en vente, toutes les quantités commandées seront remise en vente.",
type: 'Number'
},
{
field: 'Montant du remboursement',
description:
"/!/ Si vous avez sélectionné l'article d'un participant, le montant du remboursement ne doit s'appliquer qu'à cet article /!/",
type: 'Number',
isRequired: true
},
{
field: "Montant des frais déjà remboursés sur l'échéance",
type: 'Number',
description: 'Ce champs est à titre informatif. Il ne sera jamais pris en compte.',
isReadOnly: true
},
{
field: "Montant des frais restant sur l'échéance",
type: 'Number',
description: 'Ce champs est à titre informatif. Il ne sera jamais pris en compte.',
isReadOnly: true
},
{
field: 'Montant des frais à rembourser',
description: 'Uniquement sur la première échéance. Laissez vide si vous ne voulez pas rembourser de frais.',
type: 'Number'
}
],
hooks: {
load: async ({ fields, record }: ISmartActionParams) => {
onLoadSetSchedulesEnum(fields, record)
await onLoadSetParticipantEnum(fields, record)
return fields
},
change: {
['Echéance à rembourser']: ({ fields, record }: ISmartActionParams) => {
onChangeSetRefundedAmountValue(fields, record)
onChangeSetRefundableAmountValue(fields, record)
onChangeSetAmountToRefundValue(fields)
onChangeSetFeesAmountToRefundValue(fields)
onChangeSetRefundedFeesValue(fields, record)
onChangeSetRefundableFeesValue(fields, record)
return fields
},
["Article d'un participant"]: ({ fields, record }: ISmartActionParams) => {
onChangeSetParticipantArticleOrderQuantityValue(fields, record)
return fields
},
['Remettre en vente ?']: ({ fields, record }: ISmartActionParams) => {
onChangeSetParticipantArticleOrderQuantityValue(fields, record)
return fields
}
}
}
}