Se añade cantidad en articulos a añadir
Co-authored-by: darranz <darranz@users.noreply.github.com>
This commit is contained in:
parent
6503b9da9f
commit
355fc25095
@ -9,13 +9,26 @@ import { IListArticles_Response_DTO, MoneyValue } from "@shared/contexts";
|
|||||||
import { ColumnDef, Row } from "@tanstack/react-table";
|
import { ColumnDef, Row } from "@tanstack/react-table";
|
||||||
import { t } from "i18next";
|
import { t } from "i18next";
|
||||||
import { PackagePlusIcon } from "lucide-react";
|
import { PackagePlusIcon } from "lucide-react";
|
||||||
import { useMemo } from "react";
|
import { useMemo, useState } from "react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
export const CatalogPickerDataTable = ({ onSelect }: { onSelect: (data: unknown) => void }) => {
|
export const CatalogPickerDataTable = ({
|
||||||
|
onSelect,
|
||||||
|
}: {
|
||||||
|
onSelect: (data: unknown, quantity: number) => void;
|
||||||
|
}) => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { pagination, globalFilter, isFiltered } = useDataTableContext();
|
const { pagination, globalFilter, isFiltered } = useDataTableContext();
|
||||||
|
|
||||||
|
const [quantities, setQuantities] = useState<number[]>([]);
|
||||||
|
|
||||||
|
const handleQuantity = (index: number, quantity: number) => {
|
||||||
|
setQuantities((prev) => {
|
||||||
|
prev[index] = quantity;
|
||||||
|
return prev;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const { data, isPending, isError, error } = useCatalogList({
|
const { data, isPending, isError, error } = useCatalogList({
|
||||||
pagination: {
|
pagination: {
|
||||||
pageIndex: pagination.pageIndex,
|
pageIndex: pagination.pageIndex,
|
||||||
@ -48,6 +61,26 @@ export const CatalogPickerDataTable = ({ onSelect }: { onSelect: (data: unknown)
|
|||||||
return <div className='text-right'>{price.toFormat()}</div>;
|
return <div className='text-right'>{price.toFormat()}</div>;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "quantity" as const,
|
||||||
|
accessorKey: "quantity",
|
||||||
|
header: () => <div className='text-right'>{t("catalog.list.columns.quantity")}</div>,
|
||||||
|
cell: ({ row: { index } }) => {
|
||||||
|
return (
|
||||||
|
<input
|
||||||
|
type='number'
|
||||||
|
name='quantity'
|
||||||
|
defaultValue={1}
|
||||||
|
min={1}
|
||||||
|
value={quantities[index]}
|
||||||
|
onChange={(event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
handleQuantity(index, +event.target.value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "row-actions",
|
id: "row-actions",
|
||||||
header: () => null,
|
header: () => null,
|
||||||
@ -58,7 +91,7 @@ export const CatalogPickerDataTable = ({ onSelect }: { onSelect: (data: unknown)
|
|||||||
className='h-8 gap-1'
|
className='h-8 gap-1'
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
onSelect && onSelect(row.original);
|
onSelect && onSelect(row.original, quantities[row.index]);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<PackagePlusIcon className='h-3.5 w-3.5' />
|
<PackagePlusIcon className='h-3.5 w-3.5' />
|
||||||
|
|||||||
@ -214,12 +214,12 @@ export const QuoteDetailsCardEditor = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const handleAppendCatalogArticle = useCallback(
|
const handleAppendCatalogArticle = useCallback(
|
||||||
(article: any) => {
|
(article: any, quantity: number = 1) => {
|
||||||
console.log(article);
|
console.log(article);
|
||||||
fieldActions.append({
|
fieldActions.append({
|
||||||
...article,
|
...article,
|
||||||
quantity: {
|
quantity: {
|
||||||
amount: 100,
|
amount: 100 * quantity,
|
||||||
scale: Quantity.DEFAULT_SCALE,
|
scale: Quantity.DEFAULT_SCALE,
|
||||||
},
|
},
|
||||||
unit_price: article.retail_price,
|
unit_price: article.retail_price,
|
||||||
|
|||||||
@ -318,9 +318,9 @@ export const QuoteEdit = () => {
|
|||||||
|
|
||||||
<div className='flex items-center justify-center gap-2 md:hidden'>
|
<div className='flex items-center justify-center gap-2 md:hidden'>
|
||||||
<Button variant='outline' size='sm'>
|
<Button variant='outline' size='sm'>
|
||||||
{t("quotes.create.buttons.discard")}
|
{t("common.discard")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button size='sm'>{t("quotes.create.buttons.save_quote")}</Button>
|
<Button size='sm'>{t("quotes.edit.buttons.save_quote")}</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export const BackHistoryButton = () => {
|
|||||||
return (
|
return (
|
||||||
<Button variant='outline' size='icon' className='h-7 w-7' onClick={() => navigate(-1)}>
|
<Button variant='outline' size='icon' className='h-7 w-7' onClick={() => navigate(-1)}>
|
||||||
<ChevronLeftIcon className='w-4 h-4' />
|
<ChevronLeftIcon className='w-4 h-4' />
|
||||||
<span className='sr-only'>{t("quotes.common.back")}</span>
|
<span className='sr-only'>{t("common.back")}</span>
|
||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -119,7 +119,8 @@
|
|||||||
"columns": {
|
"columns": {
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"points": "Points",
|
"points": "Points",
|
||||||
"retail_price": "Retail price"
|
"retail_price": "Retail price",
|
||||||
|
"quantity": "quantity"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -201,7 +202,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"edit": {
|
"edit": {
|
||||||
"title": "Quote"
|
"title": "Quote",
|
||||||
|
"buttons": {
|
||||||
|
"save_quote": "Save quote"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"downloading_dialog": {
|
"downloading_dialog": {
|
||||||
"title": "Downloading quote",
|
"title": "Downloading quote",
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"save_close": "Guardar y Cerrar",
|
"save_close": "Guardar y Cerrar",
|
||||||
"accept": "Aceptar",
|
"accept": "Aceptar",
|
||||||
"discard": "Decartar",
|
"discard": "Descartar",
|
||||||
"hide": "Ocultar",
|
"hide": "Ocultar",
|
||||||
"back": "Volver",
|
"back": "Volver",
|
||||||
"upload": "Cargar",
|
"upload": "Cargar",
|
||||||
@ -119,7 +119,8 @@
|
|||||||
"columns": {
|
"columns": {
|
||||||
"description": "Descripción",
|
"description": "Descripción",
|
||||||
"points": "Puntos",
|
"points": "Puntos",
|
||||||
"retail_price": "PVP"
|
"retail_price": "PVP",
|
||||||
|
"quantity": "Cantidad"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -201,7 +202,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"edit": {
|
"edit": {
|
||||||
"title": "Cotización"
|
"title": "Cotización",
|
||||||
|
"buttons": {
|
||||||
|
"save_quote": "Guardar cotización"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"downloading_dialog": {
|
"downloading_dialog": {
|
||||||
"title": "Descargando cotización",
|
"title": "Descargando cotización",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user