mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-02-20 14:54:15 +01:00
linted all code expected profile-custom-fields/* and proof-of-identity/*
This commit is contained in:
parent
4a8d8796a3
commit
c0d5da55ce
@ -57,7 +57,7 @@
|
||||
"fabmanager/component-methods-documentation": "error",
|
||||
"fabmanager/no-bootstrap": "error",
|
||||
"fabmanager/no-utilities": "error",
|
||||
"fabmanager/scoped-translation": ["error", { "ignoreAbstractKeyword": true }]
|
||||
"fabmanager/scoped-translation": ["error", { "ignoreAbstractKeyword": false }]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ export const FabModal: React.FC<FabModalProps> = ({ title, isOpen, toggleModal,
|
||||
className={`fab-modal fab-modal-${width} ${className}`}
|
||||
overlayClassName="fab-modal-overlay"
|
||||
onRequestClose={toggleModal}>
|
||||
{closeButton && <FabButton className="modal-btn--close" onClick={toggleModal}>{t('app.shared.buttons.close')}</FabButton>}
|
||||
{closeButton && <FabButton className="modal-btn--close" onClick={toggleModal}>{t('app.shared.fab_modal.close')}</FabButton>}
|
||||
<div className="fab-modal-header">
|
||||
{!customHeader && <h1>{ title }</h1>}
|
||||
{customHeader && customHeader}
|
||||
|
@ -16,8 +16,8 @@ interface LabelledInputProps {
|
||||
export const LabelledInput: React.FC<LabelledInputProps> = ({ id, type, label, value, onChange }) => {
|
||||
return (
|
||||
<div className="labelled-input">
|
||||
<label className="label" htmlFor={id}>{label}</label>
|
||||
<input className="input" id={id} type={type} value={value} onChange={onChange} />
|
||||
<label htmlFor={id}>{label}</label>
|
||||
<input id={id} type={type} value={value} onChange={onChange} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -32,7 +32,7 @@ export interface FabTextEditorRef {
|
||||
*/
|
||||
export const FabTextEditor: React.ForwardRefRenderFunction<FabTextEditorRef, FabTextEditorProps> = ({ paragraphTools, content, limit = 400, video, image, onChange, placeholder, error, disabled = false }, ref: RefObject<FabTextEditorRef>) => {
|
||||
const { t } = useTranslation('shared');
|
||||
const placeholderText = placeholder || t('app.shared.text_editor.text_placeholder');
|
||||
const placeholderText = placeholder || t('app.shared.text_editor.fab_text_editor.text_placeholder');
|
||||
// TODO: Add ctrl+click on link to visit
|
||||
|
||||
const editorRef: React.MutableRefObject<Editor | null> = useRef(null);
|
||||
|
@ -18,6 +18,7 @@ declare module '@tiptap/core' {
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line import/no-default-export
|
||||
export default Node.create<IframeOptions>({
|
||||
name: 'iframe',
|
||||
|
||||
|
@ -231,16 +231,16 @@ export const MenuBar: React.FC<MenuBarProps> = ({ editor, paragraphTools, video,
|
||||
<div ref={ref} className={`fab-text-editor-subMenu ${submenu ? 'is-active' : ''}`}>
|
||||
{ submenu === 'link' &&
|
||||
(<>
|
||||
<h6>{t('app.shared.text_editor.add_link')}</h6>
|
||||
<h6>{t('app.shared.text_editor.menu_bar.add_link')}</h6>
|
||||
<div>
|
||||
<input value={url.href} onChange={linkUrlChange} onKeyDown={handleEnter} type="text" placeholder={t('app.shared.text_editor.link_placeholder')} />
|
||||
<input value={url.href} onChange={linkUrlChange} onKeyDown={handleEnter} type="text" placeholder={t('app.shared.text_editor.menu_bar.link_placeholder')} />
|
||||
<button type='button' onClick={unsetLink}>
|
||||
<Trash size={24} />
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<label className='tab'>
|
||||
<p>{t('app.shared.text_editor.new_tab')}</p>
|
||||
<p>{t('app.shared.text_editor.menu_bar.new_tab')}</p>
|
||||
<input type="checkbox" onChange={toggleTarget} checked={url.target === '_blank'} />
|
||||
<span className='switch'></span>
|
||||
</label>
|
||||
@ -252,14 +252,14 @@ export const MenuBar: React.FC<MenuBarProps> = ({ editor, paragraphTools, video,
|
||||
}
|
||||
{ submenu === 'video' &&
|
||||
(<>
|
||||
<h6>{t('app.shared.text_editor.add_video')}</h6>
|
||||
<h6>{t('app.shared.text_editor.menu_bar.add_video')}</h6>
|
||||
<select name="provider" onChange={handleSelect}>
|
||||
<option value="youtube">YouTube</option>
|
||||
<option value="vimeo">Vimeo</option>
|
||||
<option value="dailymotion">Dailymotion</option>
|
||||
</select>
|
||||
<div>
|
||||
<input type="text" onChange={videoUrlChange} placeholder={t('app.shared.text_editor.url_placeholder')} />
|
||||
<input type="text" onChange={videoUrlChange} placeholder={t('app.shared.text_editor.menu_bar.url_placeholder')} />
|
||||
<button type='button' onClick={() => addIframe()}>
|
||||
<CheckCircle size={24} />
|
||||
</button>
|
||||
@ -268,9 +268,9 @@ export const MenuBar: React.FC<MenuBarProps> = ({ editor, paragraphTools, video,
|
||||
}
|
||||
{ submenu === 'image' &&
|
||||
(<>
|
||||
<h6>{t('app.shared.text_editor.add_image')}</h6>
|
||||
<h6>{t('app.shared.text_editor.menu_bar.add_image')}</h6>
|
||||
<div>
|
||||
<input type="text" onChange={imageUrlChange} placeholder={t('app.shared.text_editor.url_placeholder')} />
|
||||
<input type="text" onChange={imageUrlChange} placeholder={t('app.shared.text_editor.menu_bar.url_placeholder')} />
|
||||
<button type='button' onClick={() => addImage()}>
|
||||
<CheckCircle size={24} />
|
||||
</button>
|
||||
|
@ -43,8 +43,8 @@ export const EventCard: React.FC<EventCardProps> = ({ event, cardType }) => {
|
||||
startDate.getMonth() === endDate.getMonth() &&
|
||||
startDate.getDate() === endDate.getDate();
|
||||
return singleDayEvent
|
||||
? t('app.public.home.on_the_date', { DATE: FormatLib.date(event.start_date) })
|
||||
: t('app.public.home.from_date_to_date', { START: FormatLib.date(event.start_date), END: FormatLib.date(event.end_date) });
|
||||
? t('app.public.event_card.on_the_date', { DATE: FormatLib.date(event.start_date) })
|
||||
: t('app.public.event_card.from_date_to_date', { START: FormatLib.date(event.start_date), END: FormatLib.date(event.end_date) });
|
||||
};
|
||||
|
||||
/**
|
||||
@ -52,8 +52,8 @@ export const EventCard: React.FC<EventCardProps> = ({ event, cardType }) => {
|
||||
*/
|
||||
const formatTime = (): string => {
|
||||
return event.all_day
|
||||
? t('app.public.home.all_day')
|
||||
: t('app.public.home.from_time_to_time', { START: FormatLib.time(event.start_date), END: FormatLib.time(event.end_date) });
|
||||
? t('app.public.event_card.all_day')
|
||||
: t('app.public.event_card.from_time_to_time', { START: FormatLib.time(event.start_date), END: FormatLib.time(event.end_date) });
|
||||
};
|
||||
|
||||
return (
|
||||
@ -112,14 +112,14 @@ export const EventCard: React.FC<EventCardProps> = ({ event, cardType }) => {
|
||||
}
|
||||
<div className="grid-item">
|
||||
<i className="fa fa-user"></i>
|
||||
{event.nb_free_places > 0 && <h6>{t('app.public.home.still_available') + event.nb_free_places}</h6>}
|
||||
{event.nb_total_places > 0 && event.nb_free_places <= 0 && <h6>{t('app.public.home.event_full')}</h6>}
|
||||
{!event.nb_total_places && <h6>{t('app.public.home.without_reservation')}</h6>}
|
||||
{event.nb_free_places > 0 && <h6>{t('app.public.event_card.still_available') + event.nb_free_places}</h6>}
|
||||
{event.nb_total_places > 0 && event.nb_free_places <= 0 && <h6>{t('app.public.event_card.event_full')}</h6>}
|
||||
{!event.nb_total_places && <h6>{t('app.public.event_card.without_reservation')}</h6>}
|
||||
</div>
|
||||
<div className="grid-item">
|
||||
<i className="fa fa-bookmark"></i>
|
||||
{event.amount === 0 && <h6>{t('app.public.home.free_admission')}</h6>}
|
||||
{event.amount > 0 && <h6>{t('app.public.home.full_price') + FormatLib.price(event.amount)}</h6>}
|
||||
{event.amount === 0 && <h6>{t('app.public.event_card.free_admission')}</h6>}
|
||||
{event.amount > 0 && <h6>{t('app.public.event_card.full_price') + FormatLib.price(event.amount)}</h6>}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
This directory is holding the inputs components for usage within forms controlled by [React-hook-form](https://react-hook-form.com/).
|
||||
|
||||
All these components must have [props](https://reactjs.org/docs/components-and-props.html) that inherits from [FormComponent](../models/form-component.ts)
|
||||
All these components must have [props](https://reactjs.org/docs/components-and-props.html) that inherit from [FormComponent](../models/form-component.ts)
|
||||
or from [FormControlledComponent](../models/form-component.ts).
|
||||
|
||||
Please look at the existing components for examples.
|
||||
|
@ -40,29 +40,29 @@ export const PaymentScheduleSummary: React.FC<PaymentScheduleSummaryProps> = ({
|
||||
return (
|
||||
<div className="payment-schedule-summary">
|
||||
<div>
|
||||
<h4>{ t('app.shared.cart.your_payment_schedule') }</h4>
|
||||
<h4>{ t('app.shared.payment_schedule_summary.your_payment_schedule') }</h4>
|
||||
{hasEqualDeadlines() && <ul>
|
||||
<li>
|
||||
<span className="schedule-item-info">
|
||||
{t('app.shared.cart.NUMBER_monthly_payment_of_AMOUNT', { NUMBER: schedule.items.length, AMOUNT: FormatLib.price(schedule.items[0].amount) })}
|
||||
{t('app.shared.payment_schedule_summary.NUMBER_monthly_payment_of_AMOUNT', { NUMBER: schedule.items.length, AMOUNT: FormatLib.price(schedule.items[0].amount) })}
|
||||
</span>
|
||||
<span className="schedule-item-date">{t('app.shared.cart.first_debit')}</span>
|
||||
<span className="schedule-item-date">{t('app.shared.payment_schedule_summary.first_debit')}</span>
|
||||
</li>
|
||||
</ul>}
|
||||
{!hasEqualDeadlines() && <ul>
|
||||
<li>
|
||||
<span className="schedule-item-info">{t('app.shared.cart.monthly_payment_NUMBER', { NUMBER: 1 })}</span>
|
||||
<span className="schedule-item-info">{t('app.shared.payment_schedule_summary.monthly_payment_NUMBER', { NUMBER: 1 })}</span>
|
||||
<span className="schedule-item-price">{FormatLib.price(schedule.items[0].amount)}</span>
|
||||
<span className="schedule-item-date">{t('app.shared.cart.debit')}</span>
|
||||
<span className="schedule-item-date">{t('app.shared.payment_schedule_summary.debit')}</span>
|
||||
</li>
|
||||
<li>
|
||||
<span className="schedule-item-info">
|
||||
{t('app.shared.cart.NUMBER_monthly_payment_of_AMOUNT', { NUMBER: schedule.items.length - 1, AMOUNT: FormatLib.price(schedule.items[1].amount) })}
|
||||
{t('app.shared.payment_schedule_summary.NUMBER_monthly_payment_of_AMOUNT', { NUMBER: schedule.items.length - 1, AMOUNT: FormatLib.price(schedule.items[1].amount) })}
|
||||
</span>
|
||||
</li>
|
||||
</ul>}
|
||||
<button className="view-full-schedule" onClick={toggleFullScheduleModal}>{t('app.shared.cart.view_full_schedule')}</button>
|
||||
<FabModal title={t('app.shared.cart.your_payment_schedule')} isOpen={modal} toggleModal={toggleFullScheduleModal}>
|
||||
<button className="view-full-schedule" onClick={toggleFullScheduleModal}>{t('app.shared.payment_schedule_summary.view_full_schedule')}</button>
|
||||
<FabModal title={t('app.shared.payment_schedule_summary.your_payment_schedule')} isOpen={modal} toggleModal={toggleFullScheduleModal}>
|
||||
<ul className="full-schedule">
|
||||
{schedule.items.map(item => (
|
||||
<li key={String(item.due_date)}>
|
||||
|
@ -66,7 +66,7 @@ export const PaymentSchedulesDashboard: React.FC<PaymentSchedulesDashboardProps>
|
||||
* after a successful card update, provide a success message to the end-user
|
||||
*/
|
||||
const handleCardUpdateSuccess = (): void => {
|
||||
onCardUpdateSuccess(t('app.logged.dashboard.payment_schedules.card_updated_success'));
|
||||
onCardUpdateSuccess(t('app.logged.dashboard.payment_schedules_dashboard.card_updated_success'));
|
||||
};
|
||||
|
||||
/**
|
||||
@ -85,7 +85,7 @@ export const PaymentSchedulesDashboard: React.FC<PaymentSchedulesDashboardProps>
|
||||
|
||||
return (
|
||||
<div className="payment-schedules-dashboard">
|
||||
{!hasSchedules() && <div>{t('app.logged.dashboard.payment_schedules.no_payment_schedules')}</div>}
|
||||
{!hasSchedules() && <div>{t('app.logged.dashboard.payment_schedules_dashboard.no_payment_schedules')}</div>}
|
||||
{hasSchedules() && <div className="schedules-list">
|
||||
<PaymentSchedulesTable paymentSchedules={paymentSchedules}
|
||||
showCustomer={false}
|
||||
@ -93,7 +93,7 @@ export const PaymentSchedulesDashboard: React.FC<PaymentSchedulesDashboardProps>
|
||||
operator={currentUser}
|
||||
onError={onError}
|
||||
onCardUpdateSuccess={handleCardUpdateSuccess} />
|
||||
{hasMoreSchedules() && <FabButton className="load-more" onClick={handleLoadMore}>{t('app.logged.dashboard.payment_schedules.load_more')}</FabButton>}
|
||||
{hasMoreSchedules() && <FabButton className="load-more" onClick={handleLoadMore}>{t('app.logged.dashboard.payment_schedules_dashboard.load_more')}</FabButton>}
|
||||
</div>}
|
||||
</div>
|
||||
);
|
||||
|
@ -93,19 +93,19 @@ export const PaymentSchedulesList: React.FC<PaymentSchedulesListProps> = ({ curr
|
||||
* after a successful card update, provide a success message to the operator
|
||||
*/
|
||||
const handleCardUpdateSuccess = (): void => {
|
||||
onCardUpdateSuccess(t('app.admin.invoices.payment_schedules.card_updated_success'));
|
||||
onCardUpdateSuccess(t('app.admin.invoices.payment_schedules_list.card_updated_success'));
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="payment-schedules-list">
|
||||
<h3>
|
||||
<i className="fas fa-filter" />
|
||||
{t('app.admin.invoices.payment_schedules.filter_schedules')}
|
||||
{t('app.admin.invoices.payment_schedules_list.filter_schedules')}
|
||||
</h3>
|
||||
<div className="schedules-filters">
|
||||
<DocumentFilters onFilterChange={handleFiltersChange} />
|
||||
</div>
|
||||
{!hasSchedules() && <div>{t('app.admin.invoices.payment_schedules.no_payment_schedules')}</div>}
|
||||
{!hasSchedules() && <div>{t('app.admin.invoices.payment_schedules_list.no_payment_schedules')}</div>}
|
||||
{hasSchedules() && <div className="schedules-list">
|
||||
<PaymentSchedulesTable paymentSchedules={paymentSchedules}
|
||||
showCustomer={true}
|
||||
@ -113,7 +113,7 @@ export const PaymentSchedulesList: React.FC<PaymentSchedulesListProps> = ({ curr
|
||||
operator={currentUser}
|
||||
onError={onError}
|
||||
onCardUpdateSuccess={handleCardUpdateSuccess} />
|
||||
{hasMoreSchedules() && <FabButton className="load-more" onClick={handleLoadMore}>{t('app.admin.invoices.payment_schedules.load_more')}</FabButton>}
|
||||
{hasMoreSchedules() && <FabButton className="load-more" onClick={handleLoadMore}>{t('app.admin.invoices.payment_schedules_list.load_more')}</FabButton>}
|
||||
</div>}
|
||||
</div>
|
||||
);
|
||||
|
@ -98,7 +98,7 @@ const PaymentSchedulesTable: React.FC<PaymentSchedulesTableProps> = ({ paymentSc
|
||||
// eslint-disable-next-line fabmanager/component-class-named-as-component
|
||||
<a href={link} target="_blank" className="download-button" rel="noreferrer">
|
||||
<i className="fas fa-download" />
|
||||
{t('app.shared.schedules_table.download')}
|
||||
{t('app.shared.payment_schedules_table.download')}
|
||||
</a>
|
||||
);
|
||||
};
|
||||
@ -107,7 +107,7 @@ const PaymentSchedulesTable: React.FC<PaymentSchedulesTableProps> = ({ paymentSc
|
||||
* Return the human-readable string for the status of the provided deadline.
|
||||
*/
|
||||
const formatState = (item: PaymentScheduleItem, schedule: PaymentSchedule): JSX.Element => {
|
||||
let res = t(`app.shared.schedules_table.state_${item.state}${item.state === 'pending' ? '_' + schedule.payment_method : ''}`);
|
||||
let res = t(`app.shared.payment_schedules_table.state_${item.state}${item.state === 'pending' ? '_' + schedule.payment_method : ''}`);
|
||||
if (item.state === PaymentScheduleItemState.Paid) {
|
||||
const key = `app.shared.schedules_table.method_${item.payment_method}`;
|
||||
res += ` (${t(key)})`;
|
||||
@ -132,10 +132,10 @@ const PaymentSchedulesTable: React.FC<PaymentSchedulesTableProps> = ({ paymentSc
|
||||
<thead>
|
||||
<tr>
|
||||
<th className="w-35" />
|
||||
<th className="w-200">{t('app.shared.schedules_table.schedule_num')}</th>
|
||||
<th className="w-200">{t('app.shared.schedules_table.date')}</th>
|
||||
<th className="w-120">{t('app.shared.schedules_table.price')}</th>
|
||||
{showCustomer && <th className="w-200">{t('app.shared.schedules_table.customer')}</th>}
|
||||
<th className="w-200">{t('app.shared.payment_schedules_table.schedule_num')}</th>
|
||||
<th className="w-200">{t('app.shared.payment_schedules_table.date')}</th>
|
||||
<th className="w-120">{t('app.shared.payment_schedules_table.price')}</th>
|
||||
{showCustomer && <th className="w-200">{t('app.shared.payment_schedules_table.customer')}</th>}
|
||||
<th className="w-200"/>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -159,9 +159,9 @@ const PaymentSchedulesTable: React.FC<PaymentSchedulesTableProps> = ({ paymentSc
|
||||
<table className="schedule-items-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th className="w-120">{t('app.shared.schedules_table.deadline')}</th>
|
||||
<th className="w-120">{t('app.shared.schedules_table.amount')}</th>
|
||||
<th className="w-200">{t('app.shared.schedules_table.state')}</th>
|
||||
<th className="w-120">{t('app.shared.payment_schedules_table.deadline')}</th>
|
||||
<th className="w-120">{t('app.shared.payment_schedules_table.amount')}</th>
|
||||
<th className="w-200">{t('app.shared.payment_schedules_table.state')}</th>
|
||||
<th className="w-200" />
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -25,7 +25,7 @@ export const SelectSchedule: React.FC<SelectScheduleProps> = ({ show, selected,
|
||||
return (
|
||||
<div className="select-schedule">
|
||||
{show && <div className={className || ''}>
|
||||
<label htmlFor="payment_schedule">{ t('app.shared.cart.monthly_payment') }</label>
|
||||
<label htmlFor="payment_schedule">{ t('app.shared.select_schedule.monthly_payment') }</label>
|
||||
<Switch checked={selected} id="payment_schedule" onChange={onChange} className="schedule-switch" />
|
||||
</div>}
|
||||
</div>
|
||||
|
@ -220,13 +220,13 @@ export const AbstractPaymentModal: React.FC<AbstractPaymentModalProps> = ({ isOp
|
||||
{errors}
|
||||
</div>}
|
||||
{hasPaymentScheduleInfo() && <div className="payment-schedule-info">
|
||||
<HtmlTranslate trKey="app.shared.payment.payment_schedule_html" options={{ DEADLINES: `${schedule.items.length}`, GATEWAY: gateway }} />
|
||||
<HtmlTranslate trKey="app.shared.abstract_payment_modal.payment_schedule_html" options={{ DEADLINES: `${schedule.items.length}`, GATEWAY: gateway }} />
|
||||
</div>}
|
||||
{hasCgv() && <div className="terms-of-sales">
|
||||
<input type="checkbox" id="acceptToS" name="acceptCondition" checked={tos} onChange={toggleTos} required />
|
||||
<label htmlFor="acceptToS">{ t('app.shared.payment.i_have_read_and_accept_') }
|
||||
<label htmlFor="acceptToS">{ t('app.shared.abstract_payment_modal.i_have_read_and_accept_') }
|
||||
<a href={cgv.custom_asset_file_attributes.attachment_url} target="_blank" rel="noreferrer">
|
||||
{ t('app.shared.payment._the_general_terms_and_conditions') }
|
||||
{ t('app.shared.abstract_payment_modal._the_general_terms_and_conditions') }
|
||||
</a>
|
||||
</label>
|
||||
</div>}
|
||||
@ -235,8 +235,8 @@ export const AbstractPaymentModal: React.FC<AbstractPaymentModalProps> = ({ isOp
|
||||
disabled={!canSubmit()}
|
||||
form={formId}
|
||||
className="validate-btn">
|
||||
{remainingPrice > 0 && t('app.shared.payment.confirm_payment_of_', { AMOUNT: FormatLib.price(remainingPrice) })}
|
||||
{remainingPrice === 0 && t('app.shared.payment.validate')}
|
||||
{remainingPrice > 0 && t('app.shared.abstract_payment_modal.confirm_payment_of_', { AMOUNT: FormatLib.price(remainingPrice) })}
|
||||
{remainingPrice === 0 && t('app.shared.abstract_payment_modal.validate')}
|
||||
</button>}
|
||||
{submitState && <div className="payment-pending">
|
||||
<div className="fa-2x">
|
||||
|
@ -80,10 +80,10 @@ const CardPaymentModal: React.FC<CardPaymentModalProps> = ({ isOpen, toggleModal
|
||||
return renderPayZenModal();
|
||||
case null:
|
||||
case undefined:
|
||||
onError(t('app.shared.payment_modal.online_payment_disabled'));
|
||||
onError(t('app.shared.card_payment_modal.online_payment_disabled'));
|
||||
return <div />;
|
||||
default:
|
||||
onError(t('app.shared.payment_modal.unexpected_error'));
|
||||
onError(t('app.shared.card_payment_modal.unexpected_error'));
|
||||
console.error(`[PaymentModal] Unimplemented gateway: ${gateway.value}`);
|
||||
return <div />;
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ export const LocalPaymentForm: React.FC<GatewayFormProps> = ({ onSubmit, onSucce
|
||||
const methodToOption = (value: scheduleMethod): selectOption => {
|
||||
if (!value) return { value, label: '' };
|
||||
|
||||
return { value, label: t(`app.admin.local_payment.method_${value}`) };
|
||||
return { value, label: t(`app.admin.local_payment_form.method_${value}`) };
|
||||
};
|
||||
|
||||
/**
|
||||
@ -77,7 +77,7 @@ export const LocalPaymentForm: React.FC<GatewayFormProps> = ({ onSubmit, onSucce
|
||||
try {
|
||||
const online = await SettingAPI.get(SettingName.OnlinePaymentModule);
|
||||
if (online.value !== 'true') {
|
||||
return onError(t('app.admin.local_payment.online_payment_disabled'));
|
||||
return onError(t('app.admin.local_payment_form.online_payment_disabled'));
|
||||
}
|
||||
return toggleOnlinePaymentModal();
|
||||
} catch (e) {
|
||||
@ -119,19 +119,19 @@ export const LocalPaymentForm: React.FC<GatewayFormProps> = ({ onSubmit, onSucce
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit} id={formId} className={`local-payment-form ${className || ''}`}>
|
||||
{!paymentSchedule && !isFreeOfCharge() && <p className="payment">{t('app.admin.local_payment.about_to_cash')}</p>}
|
||||
{!paymentSchedule && isFreeOfCharge() && <p className="payment">{t('app.admin.local_payment.about_to_confirm', { ITEM: mainItemType() })}</p>}
|
||||
{!paymentSchedule && !isFreeOfCharge() && <p className="payment">{t('app.admin.local_payment_form.about_to_cash')}</p>}
|
||||
{!paymentSchedule && isFreeOfCharge() && <p className="payment">{t('app.admin.local_payment_form.about_to_confirm', { ITEM: mainItemType() })}</p>}
|
||||
{paymentSchedule && <div className="payment-schedule">
|
||||
<div className="schedule-method">
|
||||
<label htmlFor="payment-method">{t('app.admin.local_payment.payment_method')}</label>
|
||||
<Select placeholder={ t('app.admin.local_payment.payment_method') }
|
||||
<label htmlFor="payment-method">{t('app.admin.local_payment_form.payment_method')}</label>
|
||||
<Select placeholder={ t('app.admin.local_payment_form.payment_method') }
|
||||
id="payment-method"
|
||||
className="method-select"
|
||||
onChange={handleUpdateMethod}
|
||||
options={buildMethodOptions()}
|
||||
value={methodToOption(method)} />
|
||||
{method === 'card' && <p>{t('app.admin.local_payment.card_collection_info')}</p>}
|
||||
{method === 'check' && <p>{t('app.admin.local_payment.check_collection_info', { DEADLINES: paymentSchedule.items.length })}</p>}
|
||||
{method === 'card' && <p>{t('app.admin.local_payment_form.card_collection_info')}</p>}
|
||||
{method === 'check' && <p>{t('app.admin.local_payment_form.check_collection_info', { DEADLINES: paymentSchedule.items.length })}</p>}
|
||||
{method === 'transfer' && <HtmlTranslate trKey="app.admin.local_payment.transfer_collection_info" options={{ DEADLINES: paymentSchedule.items.length }} />}
|
||||
</div>
|
||||
<div className="full-schedule">
|
||||
|
@ -76,7 +76,7 @@ const LocalPaymentModal: React.FC<LocalPaymentModalProps> = ({ isOpen, toggleMod
|
||||
isOpen={isOpen}
|
||||
toggleModal={toggleModal}
|
||||
logoFooter={logoFooter()}
|
||||
title={isFreeOfCharge() ? t('app.admin.local_payment.validate_cart') : t('app.admin.local_payment.offline_payment')}
|
||||
title={isFreeOfCharge() ? t('app.admin.local_payment_modal.validate_cart') : t('app.admin.local_payment_modal.offline_payment')}
|
||||
formId="local-payment-form"
|
||||
formClassName="local-payment-form"
|
||||
currentUser={currentUser}
|
||||
|
@ -139,13 +139,13 @@ const PayzenKeysForm: React.FC<PayzenKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
return (
|
||||
<div className="payzen-keys-form">
|
||||
<div className="payzen-keys-info">
|
||||
<HtmlTranslate trKey="app.admin.invoices.payment.payzen_keys_info_html" />
|
||||
<HtmlTranslate trKey="app.admin.invoices.payzen_keys_form.payzen_keys_info_html" />
|
||||
</div>
|
||||
<form name="payzenKeysForm">
|
||||
<fieldset>
|
||||
<legend>{t('app.admin.invoices.payment.client_keys')}</legend>
|
||||
<legend>{t('app.admin.invoices.payzen_keys_form.client_keys')}</legend>
|
||||
<div className="payzen-public-input">
|
||||
<label htmlFor="payzen_public_key">{ t('app.admin.invoices.payment.payzen.payzen_public_key') } *</label>
|
||||
<label htmlFor="payzen_public_key">{ t('app.admin.invoices.payzen_keys_form.payzen_public_key') } *</label>
|
||||
<FabInput id="payzen_public_key"
|
||||
icon={<i className="fas fa-info" />}
|
||||
defaultValue={settings.get(SettingName.PayZenPublicKey)}
|
||||
@ -158,11 +158,11 @@ const PayzenKeysForm: React.FC<PayzenKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend className={hasApiAddOn() ? 'with-addon' : ''}>
|
||||
<span>{t('app.admin.invoices.payment.api_keys')}</span>
|
||||
<span>{t('app.admin.invoices.payzen_keys_form.api_keys')}</span>
|
||||
{hasApiAddOn() && <span className={`fieldset-legend--addon ${restApiAddOnClassName || ''}`}>{restApiAddOn}</span>}
|
||||
</legend>
|
||||
<div className="payzen-api-user-input">
|
||||
<label htmlFor="payzen_username">{ t('app.admin.invoices.payment.payzen.payzen_username') } *</label>
|
||||
<label htmlFor="payzen_username">{ t('app.admin.invoices.payzen_keys_form.payzen_username') } *</label>
|
||||
<FabInput id="payzen_username"
|
||||
type="number"
|
||||
icon={<i className="fas fa-user-alt" />}
|
||||
@ -172,7 +172,7 @@ const PayzenKeysForm: React.FC<PayzenKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
required />
|
||||
</div>
|
||||
<div className="payzen-api-password-input">
|
||||
<label htmlFor="payzen_password">{ t('app.admin.invoices.payment.payzen.payzen_password') } *</label>
|
||||
<label htmlFor="payzen_password">{ t('app.admin.invoices.payzen_keys_form.payzen_password') } *</label>
|
||||
<FabInput id="payzen_password"
|
||||
icon={<i className="fas fa-key" />}
|
||||
defaultValue={settings.get(SettingName.PayZenPassword)}
|
||||
@ -181,7 +181,7 @@ const PayzenKeysForm: React.FC<PayzenKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
required />
|
||||
</div>
|
||||
<div className="payzen-api-endpoint-input">
|
||||
<label htmlFor="payzen_endpoint">{ t('app.admin.invoices.payment.payzen.payzen_endpoint') } *</label>
|
||||
<label htmlFor="payzen_endpoint">{ t('app.admin.invoices.payzen_keys_form.payzen_endpoint') } *</label>
|
||||
<FabInput id="payzen_endpoint"
|
||||
type="url"
|
||||
icon={<i className="fas fa-link" />}
|
||||
@ -191,7 +191,7 @@ const PayzenKeysForm: React.FC<PayzenKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
required />
|
||||
</div>
|
||||
<div className="payzen-api-hmac-input">
|
||||
<label htmlFor="payzen_hmac">{ t('app.admin.invoices.payment.payzen.payzen_hmac') } *</label>
|
||||
<label htmlFor="payzen_hmac">{ t('app.admin.invoices.payzen_keys_form.payzen_hmac') } *</label>
|
||||
<FabInput id="payzen_hmac"
|
||||
icon={<i className="fas fa-subscript" />}
|
||||
defaultValue={settings.get(SettingName.PayZenHmacKey)}
|
||||
|
@ -43,11 +43,11 @@ export const StripeConfirmModal: React.FC<StripeConfirmModalProps> = ({ isOpen,
|
||||
};
|
||||
|
||||
return (
|
||||
<FabModal title={t('app.shared.schedules_table.resolve_action')}
|
||||
<FabModal title={t('app.shared.stripe_confirm_modal.resolve_action')}
|
||||
isOpen={isOpen}
|
||||
toggleModal={toggleModal}
|
||||
onConfirm={onConfirmed}
|
||||
confirmButton={t('app.shared.schedules_table.ok_button')}
|
||||
confirmButton={t('app.shared.stripe_confirm_modal.ok_button')}
|
||||
preventConfirm={isPending}>
|
||||
{item && <StripeConfirm clientSecret={item.client_secret} onResponse={togglePending} />}
|
||||
</FabModal>
|
||||
|
@ -66,7 +66,7 @@ export const StripeForm: React.FC<GatewayFormProps> = ({ onSubmit, onSuccess, on
|
||||
if (response.error.statusText) {
|
||||
onError(response.error.statusText);
|
||||
} else {
|
||||
onError(`${t('app.shared.messages.payment_card_error')} ${response.error}`);
|
||||
onError(`${t('app.shared.stripe_form.payment_card_error')} ${response.error}`);
|
||||
}
|
||||
} else if ('requires_action' in response) {
|
||||
if (response.type === 'payment') {
|
||||
|
@ -123,11 +123,11 @@ const StripeKeysForm: React.FC<StripeKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
return (
|
||||
<div className="stripe-keys-form">
|
||||
<div className="stripe-keys-info">
|
||||
<HtmlTranslate trKey="app.admin.invoices.payment.stripe_keys_info_html" />
|
||||
<HtmlTranslate trKey="app.admin.invoices.stripe_keys_form.stripe_keys_info_html" />
|
||||
</div>
|
||||
<form name="stripeKeysForm">
|
||||
<div className="stripe-public-input">
|
||||
<label htmlFor="stripe_public_key">{ t('app.admin.invoices.payment.public_key') } *</label>
|
||||
<label htmlFor="stripe_public_key">{ t('app.admin.invoices.stripe_keys_form.public_key') } *</label>
|
||||
<FabInput id="stripe_public_key"
|
||||
icon={<i className="fa fa-info" />}
|
||||
defaultValue={publicKey}
|
||||
@ -138,7 +138,7 @@ const StripeKeysForm: React.FC<StripeKeysFormProps> = ({ onValidKeys, onInvalidK
|
||||
required />
|
||||
</div>
|
||||
<div className="stripe-secret-input">
|
||||
<label htmlFor="stripe_secret_key">{ t('app.admin.invoices.payment.secret_key') } *</label>
|
||||
<label htmlFor="stripe_secret_key">{ t('app.admin.invoices.stripe_keys_form.secret_key') } *</label>
|
||||
<FabInput id="stripe_secret_key"
|
||||
icon={<i className="fa fa-key" />}
|
||||
defaultValue={secretKey}
|
||||
|
@ -34,9 +34,9 @@ const DeletePlanCategory: React.FC<DeletePlanCategoryProps> = ({ onSuccess, onEr
|
||||
*/
|
||||
const onDeleteConfirmed = (): void => {
|
||||
PlanCategoryAPI.destroy(category.id).then(() => {
|
||||
onSuccess(t('app.admin.manage_plan_category.delete_category.success'));
|
||||
onSuccess(t('app.admin.delete_plan_category.success'));
|
||||
}).catch((error) => {
|
||||
onError(t('app.admin.manage_plan_category.delete_category.error') + error);
|
||||
onError(t('app.admin.delete_plan_category.error') + error);
|
||||
});
|
||||
toggleDeletionModal();
|
||||
};
|
||||
@ -44,13 +44,13 @@ const DeletePlanCategory: React.FC<DeletePlanCategoryProps> = ({ onSuccess, onEr
|
||||
return (
|
||||
<div className="delete-plan-category">
|
||||
<FabButton type='button' className="delete-button" icon={<i className="fa fa-trash" />} onClick={toggleDeletionModal} />
|
||||
<FabModal title={t('app.admin.manage_plan_category.delete_category.title')}
|
||||
<FabModal title={t('app.admin.delete_plan_category.title')}
|
||||
isOpen={deletionModal}
|
||||
toggleModal={toggleDeletionModal}
|
||||
closeButton={true}
|
||||
confirmButton={t('app.admin.manage_plan_category.delete_category.cta')}
|
||||
confirmButton={t('app.admin.delete_plan_category.cta')}
|
||||
onConfirm={onDeleteConfirmed}>
|
||||
<span>{t('app.admin.manage_plan_category.delete_category.confirm')}</span>
|
||||
<span>{t('app.admin.delete_plan_category.confirm')}</span>
|
||||
</FabModal>
|
||||
</div>
|
||||
);
|
||||
|
@ -63,7 +63,7 @@ const ManagePlanCategory: React.FC<ManagePlanCategoryProps> = ({ category, actio
|
||||
icon={<i className='fa fa-plus' />}
|
||||
className="create-button"
|
||||
onClick={toggleModal}>
|
||||
{t('app.admin.manage_plan_category.create_category.title')}
|
||||
{t('app.admin.manage_plan_category.create')}
|
||||
</FabButton>
|
||||
);
|
||||
case 'update':
|
||||
@ -77,7 +77,7 @@ const ManagePlanCategory: React.FC<ManagePlanCategoryProps> = ({ category, actio
|
||||
return (
|
||||
<div className='manage-plan-category'>
|
||||
{ toggleBtn() }
|
||||
<FabModal title={t(`app.admin.manage_plan_category.${action}_category.title`)}
|
||||
<FabModal title={t(`app.admin.manage_plan_category.${action}`)}
|
||||
isOpen={isOpen}
|
||||
toggleModal={toggleModal}
|
||||
onCreation={initCategoryCreation}
|
||||
|
@ -31,16 +31,16 @@ const PlanCategoryForm: React.FC<PlanCategoryFormProps> = ({ action, category, o
|
||||
switch (action) {
|
||||
case 'create':
|
||||
PlanCategoryAPI.create(data).then(() => {
|
||||
onSuccess(t('app.admin.manage_plan_category.create_category.success'));
|
||||
onSuccess(t('app.admin.plan_category_form.create.success'));
|
||||
}).catch((error) => {
|
||||
onError(t('app.admin.manage_plan_category.create_category.error') + error);
|
||||
onError(t('app.admin.plan_category_form.create.error') + error);
|
||||
});
|
||||
break;
|
||||
case 'update':
|
||||
PlanCategoryAPI.update(data).then(() => {
|
||||
onSuccess(t('app.admin.manage_plan_category.update_category.success'));
|
||||
onSuccess(t('app.admin.plan_category_form.update.success'));
|
||||
}).catch((error) => {
|
||||
onError(t('app.admin.manage_plan_category.update_category.error') + error);
|
||||
onError(t('app.admin.plan_category_form.update.error') + error);
|
||||
});
|
||||
break;
|
||||
}
|
||||
@ -48,15 +48,15 @@ const PlanCategoryForm: React.FC<PlanCategoryFormProps> = ({ action, category, o
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit(onSubmit)}>
|
||||
<FormInput id='name' register={register} rules={{ required: 'true' }} label={t('app.admin.manage_plan_category.name')} />
|
||||
<FormInput id='name' register={register} rules={{ required: 'true' }} label={t('app.admin.plan_category_form.name')} />
|
||||
|
||||
<FormRichText control={control} id="description" label={t('app.admin.manage_plan_category.description')} limit={100} />
|
||||
<FormRichText control={control} id="description" label={t('app.admin.plan_category_form.description')} limit={100} />
|
||||
|
||||
<FormInput id='weight' register={register} type='number' label={t('app.admin.manage_plan_category.significance')} />
|
||||
<FormInput id='weight' register={register} type='number' label={t('app.admin.plan_category_form.significance')} />
|
||||
<FabAlert level="info" className="significance-info">
|
||||
{t('app.admin.manage_plan_category.info')}
|
||||
{t('app.admin.plan_category_form.info')}
|
||||
</FabAlert>
|
||||
<FabButton type='submit'>{t(`app.admin.manage_plan_category.${action}_category.cta`)}</FabButton>
|
||||
<FabButton type='submit'>{t(`app.admin.plan_category_form.${action}.cta`)}</FabButton>
|
||||
</form>
|
||||
);
|
||||
};
|
||||
|
@ -105,7 +105,7 @@ const PlanCard: React.FC<PlanCardProps> = ({ plan, userId, subscribedPlanId, ope
|
||||
<div className="content">
|
||||
{canBeScheduled() && <div className="wrap-monthly">
|
||||
<div className="price">
|
||||
<div className="amount">{t('app.public.plans.AMOUNT_per_month', { AMOUNT: monthlyAmount() })}</div>
|
||||
<div className="amount">{t('app.public.plan_card.AMOUNT_per_month', { AMOUNT: monthlyAmount() })}</div>
|
||||
<span className="period">{duration()}</span>
|
||||
</div>
|
||||
</div>}
|
||||
@ -118,25 +118,25 @@ const PlanCard: React.FC<PlanCardProps> = ({ plan, userId, subscribedPlanId, ope
|
||||
</div>
|
||||
<div className="card-footer">
|
||||
{hasDescription() && <div className="plan-description" dangerouslySetInnerHTML={{ __html: plan.description }}/>}
|
||||
{hasAttachment() && <a className="info-link" href={ plan.plan_file_url } target="_blank" rel="noreferrer">{ t('app.public.plans.more_information') }</a>}
|
||||
{hasAttachment() && <a className="info-link" href={ plan.plan_file_url } target="_blank" rel="noreferrer">{ t('app.public.plan_card.more_information') }</a>}
|
||||
{mustLogin() && <div className="cta-button">
|
||||
<button className="subscribe-button" onClick={handleLoginRequest}>{t('app.public.plans.i_subscribe_online')}</button>
|
||||
<button className="subscribe-button" onClick={handleLoginRequest}>{t('app.public.plan_card.i_subscribe_online')}</button>
|
||||
</div>}
|
||||
{canSubscribeForMe() && <div className="cta-button">
|
||||
{!hasSubscribedToThisPlan() && <button className={`subscribe-button ${isSelected ? 'selected-card' : ''}`}
|
||||
onClick={handleSelectPlan}
|
||||
disabled={!_.isNil(subscribedPlanId)}>
|
||||
{t('app.public.plans.i_choose_that_plan')}
|
||||
{t('app.public.plan_card.i_choose_that_plan')}
|
||||
</button>}
|
||||
{hasSubscribedToThisPlan() && <button className="subscribe-button selected-card" disabled>
|
||||
{ t('app.public.plans.i_already_subscribed') }
|
||||
{ t('app.public.plan_card.i_already_subscribed') }
|
||||
</button>}
|
||||
</div>}
|
||||
{canSubscribeForOther() && <div className="cta-button">
|
||||
<button className={`subscribe-button ${isSelected ? 'selected-card' : ''}`}
|
||||
onClick={handleSelectPlan}
|
||||
disabled={_.isNil(userId)}>
|
||||
<span>{ t('app.public.plans.i_choose_that_plan') }</span>
|
||||
<span>{ t('app.public.plan_card.i_choose_that_plan') }</span>
|
||||
</button>
|
||||
</div>}
|
||||
</div>
|
||||
|
@ -14,7 +14,7 @@ interface ExtendedPriceFormProps {
|
||||
}
|
||||
|
||||
/**
|
||||
* A form component to create/edit a extended price.
|
||||
* A form component to create/edit an extended price.
|
||||
* The form validation must be created elsewhere, using the attribute form={formId}.
|
||||
*/
|
||||
export const ExtendedPriceForm: React.FC<ExtendedPriceFormProps> = ({ formId, onSubmit, price }) => {
|
||||
|
@ -21,7 +21,7 @@ interface ProfileFormOptionProps {
|
||||
}
|
||||
|
||||
/**
|
||||
* After first logged-in from a SSO, the user has two options:
|
||||
* After first logged-in from an SSO, the user has two options:
|
||||
* - complete his profile (*) ;
|
||||
* - bind his profile to his existing account ;
|
||||
* (*) This component handle the first case.
|
||||
|
@ -4,7 +4,7 @@
|
||||
border-collapse: separate;
|
||||
box-sizing: border-box;
|
||||
|
||||
label.label {
|
||||
label {
|
||||
padding: 6px 12px;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
@ -22,7 +22,7 @@
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
input.input {
|
||||
input {
|
||||
padding: 6px 12px;
|
||||
height: 38px;
|
||||
font-size: 16px;
|
||||
|
@ -34,7 +34,7 @@
|
||||
<ng-include src="'/admin/invoices/list.html'"></ng-include>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'app.admin.invoices.payment_schedules_list' | translate }}" ng-show="$root.modules.invoicing" index="4" class="payment-schedules-list">
|
||||
<uib-tab heading="{{ 'app.admin.invoices.payment_schedules' | translate }}" ng-show="$root.modules.invoicing" index="4" class="payment-schedules-list">
|
||||
<payment-schedules-list current-user="currentUser" on-error="onError" on-card-update-success="onCardUpdateSuccess" />
|
||||
</uib-tab>
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
<ng-include src="'/admin/invoices/list.html'"></ng-include>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'app.admin.invoices.payment_schedules_list' | translate }}" index="4" class="payment-schedules-list">
|
||||
<uib-tab heading="{{ 'app.admin.invoices.payment_schedules' | translate }}" index="4" class="payment-schedules-list">
|
||||
<payment-schedules-list current-user="currentUser" on-error="onError" on-card-update-success="onCardUpdateSuccess" />
|
||||
</uib-tab>
|
||||
</uib-tabset>
|
||||
|
@ -447,26 +447,29 @@ en:
|
||||
description: "Description"
|
||||
significance: "Significance"
|
||||
manage_plan_category:
|
||||
create: "New category"
|
||||
update: "Edit the category"
|
||||
plan_category_form:
|
||||
name: "Name"
|
||||
description: "Description"
|
||||
significance: "Significance"
|
||||
info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown."
|
||||
create_category:
|
||||
create:
|
||||
title: "New category"
|
||||
cta: "Create the category"
|
||||
success: "The new category was successfully created"
|
||||
error: "Unable to create the category: "
|
||||
update_category:
|
||||
update:
|
||||
title: "Edit the category"
|
||||
cta: "Validate"
|
||||
success: "The category was successfully updated"
|
||||
error: "Unable to update the category: "
|
||||
delete_category:
|
||||
title: "Delete a category"
|
||||
confirm: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore."
|
||||
cta: "Delete"
|
||||
success: "The category was successfully deleted"
|
||||
error: "Unable to delete the category: "
|
||||
delete_plan_category:
|
||||
title: "Delete a category"
|
||||
confirm: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore."
|
||||
cta: "Delete"
|
||||
success: "The category was successfully deleted"
|
||||
error: "Unable to delete the category: "
|
||||
#ajouter un code promotionnel
|
||||
coupons_new:
|
||||
add_a_coupon: "Add a coupon"
|
||||
@ -513,7 +516,7 @@ en:
|
||||
credit_note: "Credit note"
|
||||
display_more_invoices: "Display more invoices..."
|
||||
no_invoices_for_now: "No invoices for now."
|
||||
payment_schedules_list: "Payment schedules"
|
||||
payment_schedules: "Payment schedules"
|
||||
invoicing_settings: "Invoicing settings"
|
||||
warning_invoices_disabled: "Warning: invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT."
|
||||
change_logo: "Change logo"
|
||||
@ -748,20 +751,27 @@ en:
|
||||
end_date: "End date"
|
||||
vat_rate: "VAT rate"
|
||||
amount: "Total amount"
|
||||
payzen_keys_form:
|
||||
payzen_keys_info_html: "<p>To be able to collect online payments, you must configure the <a href='https://payzen.eu' target='_blank'>PayZen</a> identifiers and keys.</p><p>Retrieve them from <a href='https://secure.payzen.eu/vads-merchant/' target='_blank'>your merchant back office</a>.</p>"
|
||||
client_keys: "Client key"
|
||||
payzen_keys: "PayZen keys"
|
||||
payzen_username: "Username"
|
||||
payzen_password: "Password"
|
||||
payzen_endpoint: "REST API server name"
|
||||
payzen_hmac: "HMAC-SHA-256 key"
|
||||
stripe_keys_form:
|
||||
stripe_keys_info_html: "<p>To be able to collect online payments, you must configure the <a href='https://stripe.com' target='_blank'>Stripe</a> API keys.</p><p>Retrieve them from <a href='https://dashboard.stripe.com/account/apikeys' target='_blank'>your dashboard</a>.</p><p>Updating these keys will trigger a synchronization of all users on Stripe, this may take some time. You'll receive a notification when it's done.</p>"
|
||||
public_key: "Public key"
|
||||
secret_key: "Secret key"
|
||||
payment:
|
||||
payment_settings: "Payment settings"
|
||||
online_payment: "Online payment"
|
||||
online_payment_info_html: "You can enable your members to book directly online, paying by card. Alternatively, you can restrict the booking and payment processes for administrators and managers."
|
||||
enable_online_payment: "Enable online payment"
|
||||
stripe_keys: "Stripe keys"
|
||||
stripe_keys_info_html: "<p>To be able to collect online payments, you must configure the <a href='https://stripe.com' target='_blank'>Stripe</a> API keys.</p><p>Retrieve them from <a href='https://dashboard.stripe.com/account/apikeys' target='_blank'>your dashboard</a>.</p><p>Updating these keys will trigger a synchronization of all users on Stripe, this may take some time. You'll receive a notification when it's done.</p>"
|
||||
public_key: "Public key"
|
||||
secret_key: "Secret key"
|
||||
error_check_keys: "Error: please check your Stripe keys."
|
||||
stripe_keys_saved: "Stripe keys successfully saved."
|
||||
error_saving_stripe_keys: "Unable to save the Stripe keys. Please try again later."
|
||||
payzen_keys_info_html: "<p>To be able to collect online payments, you must configure the <a href='https://payzen.eu' target='_blank'>PayZen</a> identifiers and keys.</p><p>Retrieve them from <a href='https://secure.payzen.eu/vads-merchant/' target='_blank'>your merchant back office</a>.</p>"
|
||||
client_keys: "Client key"
|
||||
api_keys: "API keys"
|
||||
edit_keys: "Edit keys"
|
||||
currency: "Currency"
|
||||
@ -770,11 +780,6 @@ en:
|
||||
stripe_currency: "Stripe currency"
|
||||
gateway_configuration_error: "An error occurred while configuring the payment gateway: "
|
||||
payzen:
|
||||
payzen_keys: "PayZen keys"
|
||||
payzen_username: "Username"
|
||||
payzen_password: "Password"
|
||||
payzen_endpoint: "REST API server name"
|
||||
payzen_hmac: "HMAC-SHA-256 key"
|
||||
payzen_public_key: "Client public key"
|
||||
currency: "Currency"
|
||||
payzen_currency: "PayZen currency"
|
||||
@ -791,7 +796,7 @@ en:
|
||||
stripe: "Stripe"
|
||||
payzen: "PayZen"
|
||||
confirm_button: "Validate the gateway"
|
||||
payment_schedules:
|
||||
payment_schedules_list:
|
||||
filter_schedules: "Filter schedules"
|
||||
no_payment_schedules: "No payment schedules to display"
|
||||
load_more: "Load more"
|
||||
@ -1646,9 +1651,7 @@ en:
|
||||
report_will_be_destroyed: "Once the report has been processed, it will be deleted. This can't be undone, continue?"
|
||||
report_removed: "The report has been deleted"
|
||||
failed_to_remove: "An error occurred, unable to delete the report"
|
||||
local_payment:
|
||||
validate_cart: "Validate my cart"
|
||||
offline_payment: "Payment on site"
|
||||
local_payment_form:
|
||||
about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment."
|
||||
about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}."
|
||||
payment_method: "Payment method"
|
||||
@ -1659,6 +1662,9 @@ en:
|
||||
check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments."
|
||||
transfer_collection_info: "<p>By validating, you confirm that you set up {DEADLINES} bank direct debits, allowing you to collect all the monthly payments.</p><p><strong>Please note:</strong> the bank transfers are not automatically handled by Fab-manager.</p>"
|
||||
online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card."
|
||||
local_payment_modal:
|
||||
validate_cart: "Validate my cart"
|
||||
offline_payment: "Payment on site"
|
||||
check_list_setting:
|
||||
save: 'Save'
|
||||
customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved."
|
||||
|
@ -128,7 +128,7 @@ en:
|
||||
download_the_invoice: "Download the invoice"
|
||||
download_the_credit_note: "Download the refund invoice"
|
||||
no_invoices_for_now: "No invoices for now."
|
||||
payment_schedules:
|
||||
payment_schedules_dashboard:
|
||||
no_payment_schedules: "No payment schedules to display"
|
||||
load_more: "Load more"
|
||||
card_updated_success: "Your card was successfully updated"
|
||||
|
@ -150,15 +150,16 @@ en:
|
||||
#next events summary on the home page
|
||||
fablab_s_next_events: "Fablab's next events"
|
||||
every_events: "Every events"
|
||||
from_date_to_date: "From {START} to {END}"
|
||||
event_card:
|
||||
on_the_date: "On the {DATE}"
|
||||
from_date_to_date: "From {START} to {END}"
|
||||
from_time_to_time: "From {START} to {END}"
|
||||
all_day: "All day"
|
||||
still_available: "Available place(s): "
|
||||
event_full: "Event full"
|
||||
without_reservation: "Without reservation"
|
||||
free_admission: "Free admission"
|
||||
full_price: "Full price: "
|
||||
event_full: "Event full"
|
||||
still_available: "Available place(s): "
|
||||
all_day: "All day"
|
||||
#projects gallery
|
||||
projects_list:
|
||||
the_fablab_projects: "The Fab Lab projects"
|
||||
@ -244,16 +245,17 @@ en:
|
||||
unauthorized_operation: "Unauthorized operation"
|
||||
confirmation_required: "Confirmation required"
|
||||
the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users: "The training can't be deleted because it's already reserved by some users."
|
||||
plan_card:
|
||||
AMOUNT_per_month: "{AMOUNT} / month"
|
||||
i_subscribe_online: "I subscribe online"
|
||||
more_information: "More information"
|
||||
i_choose_that_plan: "I choose that plan"
|
||||
i_already_subscribed: "I already subscribed"
|
||||
#summary of the subscriptions
|
||||
plans:
|
||||
subscriptions: "Subscriptions"
|
||||
i_choose_that_plan: "I choose that plan"
|
||||
i_subscribe_online: "I subscribe online"
|
||||
i_already_subscribed: "I already subscribed"
|
||||
more_information: "More information"
|
||||
your_subscription_expires_on_the_DATE: "Your subscription expires on the {DATE}"
|
||||
no_plans: "No plans are available for your group"
|
||||
AMOUNT_per_month: "{AMOUNT} / month"
|
||||
my_group: "My group"
|
||||
his_group: "User's group"
|
||||
he_wants_to_change_group: "Change group"
|
||||
|
@ -21,7 +21,6 @@ en:
|
||||
messages:
|
||||
you_will_lose_any_unsaved_modification_if_you_quit_this_page: "You will lose any unsaved modification if you quit this page"
|
||||
you_will_lose_any_unsaved_modification_if_you_reload_this_page: "You will lose any unsaved modification if you reload this page"
|
||||
payment_card_error: "A problem has occurred with your credit card:"
|
||||
payment_card_declined: "Your card was declined."
|
||||
change_group:
|
||||
title: "{OPERATOR, select, self{My group} other{User's group}}"
|
||||
@ -29,15 +28,22 @@ en:
|
||||
cancel: "Cancel"
|
||||
validate: "Validate group change"
|
||||
success: "Group successfully changed"
|
||||
stripe_form:
|
||||
payment_card_error: "A problem occurred with your payment card:"
|
||||
#text editor
|
||||
text_editor:
|
||||
text_placeholder: "Type something…"
|
||||
link_placeholder: "Paste link…"
|
||||
url_placeholder: "Paste url…"
|
||||
new_tab: "Open in a new tab"
|
||||
add_link: "Insert a link"
|
||||
add_video: "Embed a video"
|
||||
add_image: "Insert an image"
|
||||
fab_text_editor:
|
||||
text_placeholder: "Type something…"
|
||||
menu_bar:
|
||||
link_placeholder: "Paste link…"
|
||||
url_placeholder: "Paste url…"
|
||||
new_tab: "Open in a new tab"
|
||||
add_link: "Insert a link"
|
||||
add_video: "Embed a video"
|
||||
add_image: "Insert an image"
|
||||
#modal dialog
|
||||
fab_modal:
|
||||
close: "Close"
|
||||
fab_socials:
|
||||
follow_us: "Follow us"
|
||||
networks_update_success: "Social networks update successful"
|
||||
@ -161,7 +167,7 @@ en:
|
||||
start_typing: "Start typing..."
|
||||
member_not_validated: "Attention:</br> The member has not validated."
|
||||
#payment modal
|
||||
payment:
|
||||
abstract_payment_modal:
|
||||
online_payment: "Online payment"
|
||||
i_have_read_and_accept_: "I have read, and accept "
|
||||
_the_general_terms_and_conditions: "the general terms and conditions."
|
||||
@ -405,6 +411,15 @@ en:
|
||||
default_places: "Default maximum tickets"
|
||||
default_places_is_required: "Default maximum tickets is required."
|
||||
disable_space: "Disable space"
|
||||
payment_schedule_summary:
|
||||
your_payment_schedule: "Your payment schedule"
|
||||
NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}"
|
||||
first_debit: "First debit on the day of the order."
|
||||
monthly_payment_NUMBER: "{NUMBER}{NUMBER, plural, =1{st} =2{nd} =3{rd} other{th}} monthly payment: "
|
||||
debit: "Debit on the day of the order."
|
||||
view_full_schedule: "View the complete payment schedule"
|
||||
select_schedule:
|
||||
monthly_payment: "Monthly payment"
|
||||
#shopping cart module for reservations
|
||||
cart:
|
||||
summary: "Summary"
|
||||
@ -422,13 +437,6 @@ en:
|
||||
cost_of_the_subscription: "Cost of the subscription"
|
||||
subscription_price: "Subscription price"
|
||||
you_ve_just_selected_a_subscription_html: "You've just selected a <strong>subscription</strong>:"
|
||||
monthly_payment: "Monthly payment"
|
||||
your_payment_schedule: "Your payment schedule"
|
||||
monthly_payment_NUMBER: "{NUMBER}{NUMBER, plural, =1{st} =2{nd} =3{rd} other{th}} monthly payment: "
|
||||
NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}"
|
||||
first_debit: "First debit on the day of the order."
|
||||
debit: "Debit on the day of the order."
|
||||
view_full_schedule: "View the complete payment schedule"
|
||||
confirm_and_pay: "Confirm and pay"
|
||||
you_have_settled_the_following_TYPE: "You have settled the following {TYPE, select, Machine{machine slots} Training{training} other{elements}}:"
|
||||
you_have_settled_a_: "You have settled a"
|
||||
@ -483,12 +491,15 @@ en:
|
||||
what_to_do: "What do you want to do?"
|
||||
tour: "Start the feature tour"
|
||||
guide: "Open the user's manual"
|
||||
stripe_confirm_modal:
|
||||
resolve_action: "Resolve the action"
|
||||
ok_button: "OK"
|
||||
# 2nd factor authentication for card payments
|
||||
stripe_confirm:
|
||||
pending: "Pending for action..."
|
||||
success: "Thank you, your card setup is complete. The payment will be proceeded shortly."
|
||||
# the summary table of all payment schedules
|
||||
schedules_table:
|
||||
payment_schedules_table:
|
||||
schedule_num: "Schedule #"
|
||||
date: "Date"
|
||||
price: "Price"
|
||||
@ -524,7 +535,7 @@ en:
|
||||
confirm_bank_transfer: "Confirm the bank transfer"
|
||||
confirm_bank_transfer_body: "You must confirm the receipt of {AMOUNT} for the deadline of {DATE}. By confirming the bank transfer, an invoice will be generated for this due date."
|
||||
confirm_cancel_subscription: "You're about to cancel this payment schedule and the related subscription. Are you sure?"
|
||||
payment_modal:
|
||||
card_payment_modal:
|
||||
online_payment_disabled: "Online payment is not available. Please contact the FabLab's reception directly."
|
||||
unexpected_error: "An error occurred. Please report this issue to the Fab-Manager's team."
|
||||
update_card_modal:
|
||||
|
@ -25,7 +25,7 @@
|
||||
"@typescript-eslint/parser": "^5.17.0",
|
||||
"eslint": "~8.12.0",
|
||||
"eslint-config-standard": "~17.0.0-1",
|
||||
"eslint-plugin-fabmanager": "^0.5.3",
|
||||
"eslint-plugin-fabmanager": "^0.5.5",
|
||||
"eslint-plugin-html-erb": "^1.0.1",
|
||||
"eslint-plugin-import": "~2.25.4",
|
||||
"eslint-plugin-n": "^15.1.0",
|
||||
|
@ -4082,10 +4082,10 @@ eslint-plugin-es@^4.1.0:
|
||||
eslint-utils "^2.0.0"
|
||||
regexpp "^3.0.0"
|
||||
|
||||
eslint-plugin-fabmanager@^0.5.3:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-fabmanager/-/eslint-plugin-fabmanager-0.5.3.tgz#28576314182943c999c4a42d4d9ff8a1a9eefa82"
|
||||
integrity sha512-lubHoF0oSiCn1MaByyB3N7YS1QU0t+mxirDILlkPA/9m/puSF32AvMGd2ztKzYdYfPIOQlgHIO+dUEYBTRTc0A==
|
||||
eslint-plugin-fabmanager@^0.5.5:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-fabmanager/-/eslint-plugin-fabmanager-0.5.5.tgz#675ab9e34fed0d92a3f290d1c38ba377d43d3a77"
|
||||
integrity sha512-5rXy6UHYkT5Ql0m4nQZ0X+JgxYUMJqppG1ECQqMlp2IqBgJGaHePdcIXdXe8i0pXRfF7VmlIL0pN3ZaOxkm6sw==
|
||||
dependencies:
|
||||
requireindex "^1.2.0"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user