Skip to content

Commit

Permalink
Premium ⇒ OSS (#401)
Browse files Browse the repository at this point in the history
* Premium ⇒ OSS

* Diverses corrections

* Dernières corrections

---------

Co-authored-by: Donovan Lambert <[email protected]>
  • Loading branch information
polosson and Donov4n authored Dec 14, 2023
1 parent 2ca6c21 commit 7225f0c
Show file tree
Hide file tree
Showing 399 changed files with 19,590 additions and 4,720 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
.AppleDouble
.LSOverride

# - Minitatures
# - Miniatures
._*

# - Fichiers qui peuvent apparaître à la racine de volumes.
Expand Down
24 changes: 21 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,28 @@ Ce projet adhère au principe du [Semantic Versioning](https://semver.org/spec/v
(il sera toutefois supprimé dans une future version, pensez à mettre à jour vos
`settings.json` si vous ne disposez pas d'une offre SaaS)
- Ajoute une commande permettant d'envoyer un e-mail de test via la console (Premium).
- L'import de bénéficiaires en masse est maintenant possible depuis un fichier CSV (Premium #305).
- Corrige l'affichage des disponibilités des techniciens à l'étape 3 de la modification d'événement (Premium #361).
- L'import de bénéficiaires en masse est maintenant possible depuis un fichier CSV (Premium).
- Corrige l'affichage des disponibilités des techniciens à l'étape 3 de la modification d'événement.
- Ajoute un endpoint `/healthcheck` (désactivé par défaut) pour vérifier l'état de l'instance,
et la date de dernière modification de son matériel, événements ou réservations (Premium #357).
et la date de dernière modification de son matériel, événements ou réservations.
- Corrige le champ de recherche des demandes de réservations.
- Permet la modification du matériel des réservations jusqu'au dernier jour de sortie (Premium).
- Prise en charge des inventaires de départ des événements et réservations.
- Corrige un souci lors de la sauvegarde d'une unité de matériel avec une référence déjà
existante pour le même matériel (l'erreur de sauvegarde faisait penser à un bug de l'application).
- Il est maintenant possible de chercher dans les événements par lieu.
- Prise en charge des retour à la ligne dans l'affichage de description des matériels.
- Corrige l'affichage et le tri des quantités cassées dans le matériel.
- Ajoute une page permettant de consulter les informations d'un bénéficiaire, son historique de commandes,
ainsi que la liste des devis et factures qui lui ont été adressés.
- Corrige la duplication d'événement lorsque des unités de l'événement d'origine sont
déjà utilisées au même moment que dans le nouvel événement (Premium).
- Corrige la duplication d'événement lorsque des techniciens de l'événement d'origine sont
déjà mobilisés au même moment que dans le nouvel événement (voir #346).
- Améliore les sélecteurs de dates, notamment en permettant de choisir des périodes pré-définies quand
c'est utile (par exemple dans les filtres de période matériels et techniciens).
- Corrige un problème de performance lors de la récupération des réservations et événements liés
aux matériels et bénéficiaires. La récupération se fait maintenant de manière séquentielle (voir #387).

## 0.22.2 (2023-08-11)

Expand Down
303 changes: 0 additions & 303 deletions CONTRIBUTING.md

This file was deleted.

4 changes: 2 additions & 2 deletions bin/release
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ chmod 777 src/install
echo -e "\e[1m\e[34m-> Installation des dépendances back-end...\e[0m"
query=(
'del(."require-dev")'
'del(.autoload."psr-4"."Robert2\\Tests\\")'
'del(.autoload."psr-4"."Robert2\\Fixtures\\")'
'del(.autoload."psr-4"."Loxya\\Tests\\")'
'del(.autoload."psr-4"."Loxya\\Fixtures\\")'
'del(.scripts."create-migration")'
'del(.scripts."lint")'
'del(.scripts."lint:fix")'
Expand Down
6 changes: 5 additions & 1 deletion client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"moment": "2.29.4",
"p-defer": "3.0.0",
"p-queue": "6.6.2",
"papaparse": "5.4.1",
"portal-vue": "2.1.7",
"status-code-enum": "~1.0.0",
"style-object-to-css-string": "1.0.1",
Expand All @@ -42,7 +43,8 @@
"vue2-datepicker": "3.11.1",
"vuex": "3.6.2",
"vuex-i18n": "1.13.1",
"warning": "4.0.3"
"warning": "4.0.3",
"zod": "3.22.4"
},
"devDependencies": {
"@babel/core": "7.21.4",
Expand All @@ -55,6 +57,7 @@
"@types/jest": "29",
"@types/js-cookie": "3.0",
"@types/lodash": "4",
"@types/papaparse": "5.3.7",
"@types/tinycolor2": "1",
"@vue/babel-preset-app": "4.5.15",
"@vue/cli-plugin-babel": "4.5.13",
Expand All @@ -75,6 +78,7 @@
"sass": "1.62.0",
"sass-loader": "10.2.0",
"stylelint": "14.1.0",
"type-fest": "4.4.0",
"typescript": "5.0.4",
"vue-cli-plugin-svg": "0.1.3",
"vue-cli-plugin-yaml": "1.0.2",
Expand Down
17 changes: 0 additions & 17 deletions client/src/globals/types/composition.d.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,9 @@
import type { VNode } from 'vue';
import type {
ComponentPropsOptions,
EmitsOptions,
SetupContext,
} from '@vue/composition-api';

module '@vue/composition-api' {
export type Render = () => VNode | null;

export type ImplicitProps = {
key?: string | number,
};

// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
type ComponentReturnType = Record<string, unknown> | Render | void;

export interface Component<
Props = Record<string, never>,
ReturnType extends ComponentReturnType = Render,
> {
(props: Props & ImplicitProps, ctx: SetupContext): ReturnType;
props?: ComponentPropsOptions<Omit<Props, `on${string}`>>;
emits?: EmitsOptions;
}
}
2 changes: 2 additions & 0 deletions client/src/globals/types/vendors/vue-js-modal.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'vue-js-modal';

declare module 'vue-js-modal' {
export type OnCloseEvent<Params extends Record<string, any>> = {
/** Le nom de la modale (créé dynamiquement par vue-js-modal). */
Expand Down
66 changes: 45 additions & 21 deletions client/src/globals/types/vendors/vue-tables-2.d.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,31 @@
declare module 'vue-tables-2-premium' {
import type { VNode } from 'vue';
import type { CreateElement, VNode, VNodeClass } from 'vue';
import type { PaginationParams } from '@/stores/api/@types';

//
// - Common types
//

type BaseTableOptions = {
type ColumnVisibility =
| `${'min' | 'not' | 'max'}_mobile`
| `${'min' | 'not' | 'max'}_mobileP`
| `${'min' | 'not' | 'max'}_mobileL`
| `${'min' | 'not' | 'max'}_tablet`
| `${'min' | 'not' | 'max'}_tabletP`
| `${'min' | 'not' | 'max'}_tabletL`
| `${'min' | 'not' | 'max'}_desktop`
| `${'min' | 'not' | 'max'}_desktopLarge`
| `${'min' | 'not' | 'max'}_desktopHuge`;

type ColumnsVisibility = Record<string, ColumnVisibility>;

type TemplateRenderFunction<Data = any> = (
(h: CreateElement, row: Data, index: number) => JSX.Element | string | null
);

type RowClickEventPayload<Data = any> = { row: Data, event: PointerEvent, index: number };

type BaseTableOptions<Data> = {
headings?: Record<string, string>,
initialPage?: number,
perPage?: number,
Expand All @@ -16,14 +35,17 @@ declare module 'vue-tables-2-premium' {
filterByColumn?: boolean,
columnsDropdown?: boolean,
preserveState?: boolean,
columnsDisplay?: Record<string, string>, // - Voir https://matanya.gitbook.io/vue-tables-2/columns-visibility
saveState?: boolean,
columnsDisplay?: ColumnsVisibility,
columnsClasses?: Record<string, string>,
templates?: Record<string, TemplateRenderFunction<Data>>,
rowClassCallback(row: Data): VNodeClass,
};

interface BaseTableInstance {
interface BaseTableInstance<Data> {
name: string;
columns: string[];
data: Array<Record<string, unknown>>;
data: Data[];
filtersCount: number;
openChildRows: number[];
selectedRows: number[] | undefined;
Expand All @@ -39,7 +61,7 @@ declare module 'vue-tables-2-premium' {
resetCustomFilters(): void;
setLoadingState(): void;
$refs: {
table: BaseTableInstance,
table: BaseTableInstance<Data>,
};
}

Expand All @@ -53,38 +75,40 @@ declare module 'vue-tables-2-premium' {
// - Client component specific types
//

export type ClientCustomFilter<TData> = {
export type ClientCustomFilter<Data> = {
name: string,
callback(item: TData, identifier: number | string | boolean): boolean,
callback(item: Data, identifier: number | string | boolean): boolean,
};

export type CustomSortFunction<TData> = (ascending: boolean) => (a: TData, b: TData) => number;
export type CustomSortFunction<Data> = (ascending: boolean) => (a: Data, b: Data) => number;

export type ClientTableOptions<TData, TFilter> = BaseTableOptions & {
initFilters: TFilter,
customSorting?: Record<string, CustomSortFunction<TData>>,
customFilters?: ClientCustomFilter[],
export type ClientTableOptions<Data = any, Filters = any> = BaseTableOptions<Data> & {
initFilters: Filters,
customSorting?: Record<string, CustomSortFunction<Data>>,
customFilters?: Array<ClientCustomFilter<Data>>,
};

export interface ClientTableInstance extends BaseTableInstance {
filteredData: Array<Record<string, unknown>>;
allFilteredData: Array<Record<string, unknown>>;
export interface ClientTableInstance<Data = any> extends BaseTableInstance<Data> {
filteredData: Data[];
allFilteredData: Data[];
}

//
// - Server component specific types
//

export type RequestFunction<TData> = (pagination: PaginationParams) => Promise<{ data: TData } | undefined>;
export type RequestFunction<Data = any> = (pagination: PaginationParams) => (
Promise<{ data: Data } | undefined>
);

export type ServerTableOptions<TData> = BaseTableOptions & {
export type ServerTableOptions<Data = any> = BaseTableOptions<Data> & {
customFilters?: string[],
requestFunction?: RequestFunction<TData>,
requestFunction?: RequestFunction<Data>,
};

export interface ServerTableInstance extends BaseTableInstance {
export interface ServerTableInstance<Data = any> extends BaseTableInstance<Data> {
setRequestParams(params: Record<string, unknown>): void;
getData(): any;
geData(): Data[];
getQueryParams(): Record<string, unknown>;
}
}
26 changes: 18 additions & 8 deletions client/src/globals/types/vendors/vue.d.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,34 @@
declare module 'vue' {
import type { VueConstructor as VueConstructorCore } from 'vue';
import 'vue';

export type { VNode } from 'vue';
declare module 'vue' {
import type { ComponentOptions, VueConstructor } from 'vue';
import type { DefaultData, DefaultComputed, DefaultMethods } from 'vue/types/options';

export type ComponentRef<T extends abstract new (...args: any) => any> = (
| InstanceType<T>
| undefined
);

export interface VueConstructor extends VueConstructorCore {
$router: any;
$route: any;
}
export type RawComponent<Props, Methods = DefaultMethods<Vue>> = (
& ComponentOptions<Vue, DefaultData<Vue>, Methods, DefaultComputed, Props>
& VueConstructor
);

export type VNodeClass =
| string
| number
| null
| undefined
| boolean
| Record<string, boolean>
| VNodeClass[];
}

declare module 'vue/types/options' {
import type {
VNode,
CreateElement,
RenderContext,
VNode,
ComponentOptions as CoreComponentOptions,
} from 'vue';

Expand Down
106 changes: 106 additions & 0 deletions client/src/globals/types/vendors/vue2-datepicker.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
declare module 'vue2-datepicker' {
import type { RawComponent } from 'vue';

export type Translations = {
days?: string[],
months?: string[],
yearFormat: string,
monthFormat: string,
monthBeforeYear: boolean,
formatLocale: {
months: string[],
monthsShort: string[],
weekdays: string[],
weekdaysShort: string[],
weekdaysMin: string[],
firstDayOfWeek: number,
firstWeekContainsDate: number,
meridiem(h: number, _: number, isLowercase: boolean): boolean,
meridiemParse: RegExp,
isPM(input: string): boolean,
},
};

export type Shortcuts = {
text: string,
onClick(): any,
};

export type TimePickerOptions = {
start: string,
step: string,
end: string,
format: string,
};

export type Formatter = {
stringify(date: Date | null | undefined, format: string): string,
parse(value: string | null | undefined, format: string): Date | null,
getWeek?(value: Date, options: { firstDayOfWeek?: number, firstWeekContainsDate?: number }): number,
};

export type DatePickerEmit = (value: Date | [Date, Date] | null | [null, null]) => void;
export type DatePickerSlotParams = { emit: DatePickerEmit };

const Datepicker: RawComponent<{
type?: 'date' | 'datetime' | 'year' | 'month' | 'time' | 'week',
range?: boolean,
format?: string,
formatter?: Formatter,
valueType?: 'date' | 'timestamp' | 'format' | string,
defaultValue?: Date,
lang?: Translations,
placeholder?: string,
editable?: boolean,
clearable?: boolean,
confirm?: boolean,
confirmText?: string,
multiple?: boolean,
disabled?: boolean,
disabledDate?(date: Date, currentValue: Date[]): boolean,
disabledTime?(date: Date): boolean,
appendToBody?: boolean,
inline?: boolean,
inputClass?: string,
inputAttr?(): Record<string, any>,
open?: boolean,
defaultPanel?: 'year' | 'month',
popupStyle?(): Record<string, any>,
popupClass?: string,
shortcuts?: Shortcuts[],
titleFormat?: string,
partialUpdate?: boolean,
rangeSeparator?: string,
showWeekNumber?: boolean,
hourStep?: number,
minuteStep?: number,
secondStep?: number,
hourOptions?: number[],
minuteOptions?: number[],
secondOptions?: number[],
showHour?: boolean,
showMinute?: boolean,
showSecond?: boolean,
use12h?: boolean,
showTimeHeader?: boolean,
timeTitleFormat?: string,
timePickerOptions?: TimePickerOptions,
prefixClass?: string,
scrollDuration?: number,
}>;

export default Datepicker;
}

declare module 'vue2-datepicker/locale/es/fr' {
import type { Translations } from 'vue2-datepicker';

const translations: Translations;
export default translations;
}
declare module 'vue2-datepicker/locale/es/en' {
import type { Translations } from 'vue2-datepicker';

const translations: Translations;
export default translations;
}
Loading

0 comments on commit 7225f0c

Please sign in to comment.