Compare commits
3 commits
2a68f4f90d
...
6e4a9a74bd
Author | SHA1 | Date | |
---|---|---|---|
|
6e4a9a74bd | ||
|
3eafdcb7dd | ||
|
ddc5f1ae3c |
12 changed files with 84 additions and 80 deletions
|
@ -78,7 +78,7 @@ export interface CustomerResponse {
|
||||||
|
|
||||||
export async function getCustomers(
|
export async function getCustomers(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: CustomerQuery
|
options: CustomerQuery
|
||||||
): Promise<CustomerResponse> {
|
): Promise<CustomerResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -88,11 +88,7 @@ export async function getCustomers(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/Customer?${searchParams.toString()}`,
|
`${host}/api/Aperture/Customer?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
60
demo/demo.ts
60
demo/demo.ts
|
@ -15,17 +15,29 @@ import {
|
||||||
getPriceLists,
|
getPriceLists,
|
||||||
} from "../index.js";
|
} from "../index.js";
|
||||||
|
|
||||||
// TODO: hacerlo input
|
const hostInput = document.querySelector<HTMLInputElement>("#host")!;
|
||||||
const HOST = "http://sutty.vm:4001";
|
const userInput = document.querySelector<HTMLInputElement>("#user")!;
|
||||||
|
const passInput = document.querySelector<HTMLInputElement>("#pass")!;
|
||||||
|
|
||||||
const tokenInput = document.querySelector<HTMLInputElement>("#token-input")!;
|
const tokenInput = document.querySelector<HTMLInputElement>("#token-input")!;
|
||||||
|
|
||||||
if (localStorage.token) {
|
function headers() {
|
||||||
tokenInput.value = localStorage.token;
|
const h = new Headers();
|
||||||
|
|
||||||
|
h.set("content-type", "application/json");
|
||||||
|
|
||||||
|
if (tokenInput.value) {
|
||||||
|
h.set("accesstoken", tokenInput.value);
|
||||||
|
} else {
|
||||||
|
const basic = btoa(`${userInput.value}:${passInput.value}`);
|
||||||
|
h.set("authorization", `Basic ${basic}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function token() {
|
return h;
|
||||||
return tokenInput.value;
|
}
|
||||||
|
|
||||||
|
function host() {
|
||||||
|
return hostInput.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
function clear(el: Node) {
|
function clear(el: Node) {
|
||||||
|
@ -88,34 +100,34 @@ function setupForm(selector: string, listener: (event: Event) => Promise<any>) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
setupForm("#token", () => dummy(HOST, token()));
|
setupForm("#token", () => {
|
||||||
setupForm("#save-token", async () => {
|
console.log(headers());
|
||||||
localStorage.token = token();
|
return dummy(host(), headers());
|
||||||
});
|
});
|
||||||
setupForm("#productos", () => getProductos(HOST, token(), {}));
|
setupForm("#productos", () => getProductos(host(), headers(), {}));
|
||||||
setupForm("#publicaciones", () => getPublications(HOST, token(), {}));
|
setupForm("#publicaciones", () => getPublications(host(), headers(), {}));
|
||||||
setupForm("#price", (event) =>
|
setupForm("#price", (event) =>
|
||||||
getPrices(HOST, token(), {
|
getPrices(host(), headers(), {
|
||||||
filter: (event.target! as any).filter.value,
|
filter: (event.target! as any).filter.value,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setupForm("#stock", (event) =>
|
setupForm("#stock", (event) =>
|
||||||
getStocks(HOST, token(), {
|
getStocks(host(), headers(), {
|
||||||
filter: (event.target! as any).filter.value,
|
filter: (event.target! as any).filter.value,
|
||||||
warehouseCode: (event.target! as any).warehouseCode.value,
|
warehouseCode: (event.target! as any).warehouseCode.value,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setupForm("#price-by-customer", (event) =>
|
setupForm("#price-by-customer", (event) =>
|
||||||
getPricesByCustomer(HOST, token(), {
|
getPricesByCustomer(host(), headers(), {
|
||||||
filter: (event.target! as any).filter.value,
|
filter: (event.target! as any).filter.value,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setupForm("#price-list", (event) =>
|
setupForm("#price-list", (event) =>
|
||||||
getPriceLists(HOST, token(), {
|
getPriceLists(host(), headers(), {
|
||||||
filter: (event.target! as any).filter.value,
|
filter: (event.target! as any).filter.value,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setupForm("#customers", () => getCustomers(HOST, token(), {}));
|
setupForm("#customers", () => getCustomers(host(), headers(), {}));
|
||||||
|
|
||||||
let customer: Customer | null = null;
|
let customer: Customer | null = null;
|
||||||
|
|
||||||
|
@ -123,7 +135,7 @@ setupForm("#pedido-customer", async (event) => {
|
||||||
const cuit = (event.target! as any).cuit.value;
|
const cuit = (event.target! as any).cuit.value;
|
||||||
if (cuit.length === 0) throw new Error("No pusiste un CUIT.");
|
if (cuit.length === 0) throw new Error("No pusiste un CUIT.");
|
||||||
|
|
||||||
const customers = await getCustomers(HOST, token(), {
|
const customers = await getCustomers(host(), headers(), {
|
||||||
customer: {
|
customer: {
|
||||||
type: TipoDeDocumento.CUIT,
|
type: TipoDeDocumento.CUIT,
|
||||||
number: cuit,
|
number: cuit,
|
||||||
|
@ -160,17 +172,23 @@ setupForm("#pedido-item", async (event) => {
|
||||||
const sku = (event.target! as any).sku.value;
|
const sku = (event.target! as any).sku.value;
|
||||||
if (sku.length === 0) throw new Error("No pusiste un SKU.");
|
if (sku.length === 0) throw new Error("No pusiste un SKU.");
|
||||||
|
|
||||||
const productosResponse = await getProductos(HOST, token(), { filter: sku });
|
const productosResponse = await getProductos(host(), headers(), {
|
||||||
|
filter: sku,
|
||||||
|
});
|
||||||
if (productosResponse.Data.length !== 1)
|
if (productosResponse.Data.length !== 1)
|
||||||
throw new Error("Encontré más de un producto.");
|
throw new Error("Encontré más de un producto.");
|
||||||
|
|
||||||
const preciosDelClienteResponse = await getPricesByCustomer(HOST, token(), {
|
const preciosDelClienteResponse = await getPricesByCustomer(
|
||||||
|
host(),
|
||||||
|
headers(),
|
||||||
|
{
|
||||||
SKUCode: sku,
|
SKUCode: sku,
|
||||||
customer: {
|
customer: {
|
||||||
type: customer.DocumentType,
|
type: customer.DocumentType,
|
||||||
number: customer.DocumentNumber,
|
number: customer.DocumentNumber,
|
||||||
},
|
},
|
||||||
});
|
}
|
||||||
|
);
|
||||||
if (preciosDelClienteResponse.Data.length !== 1)
|
if (preciosDelClienteResponse.Data.length !== 1)
|
||||||
throw new Error("Encontré más de un producto.");
|
throw new Error("Encontré más de un producto.");
|
||||||
|
|
||||||
|
@ -216,5 +234,5 @@ setupForm("#pedido", async () => {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
return await order(HOST, token(), orderJson);
|
return await order(host(), headers(), orderJson);
|
||||||
});
|
});
|
||||||
|
|
|
@ -31,6 +31,15 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<label for="host">Host: </label>
|
||||||
|
<input id="host" name="host" value="http://sutty.vm:4001" />
|
||||||
|
|
||||||
|
<label for="user">User: </label>
|
||||||
|
<input id="user" name="user" />
|
||||||
|
|
||||||
|
<label for="pass">Pass: </label>
|
||||||
|
<input id="pass" name="pass" value="" />
|
||||||
|
|
||||||
<label for="token-input">Access token: </label>
|
<label for="token-input">Access token: </label>
|
||||||
<input id="token-input" name="token" />
|
<input id="token-input" name="token" />
|
||||||
|
|
||||||
|
@ -56,7 +65,11 @@
|
||||||
|
|
||||||
<form id="price">
|
<form id="price">
|
||||||
<button>Conseguir precios</button>
|
<button>Conseguir precios</button>
|
||||||
<input name="filter" type="text" placeholder="Filtro por lista de precios (ID, opcional)" />
|
<input
|
||||||
|
name="filter"
|
||||||
|
type="text"
|
||||||
|
placeholder="Filtro por lista de precios (ID, opcional)"
|
||||||
|
/>
|
||||||
<p class="status"></p>
|
<p class="status"></p>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
@ -75,7 +88,11 @@
|
||||||
<form id="stock">
|
<form id="stock">
|
||||||
<button>Conseguir stock</button>
|
<button>Conseguir stock</button>
|
||||||
<input name="filter" type="text" placeholder="Filtro por ID (opcional)" />
|
<input name="filter" type="text" placeholder="Filtro por ID (opcional)" />
|
||||||
<input name="warehouseCode" type="text" placeholder="Filtro por código de deposito (opcional)" />
|
<input
|
||||||
|
name="warehouseCode"
|
||||||
|
type="text"
|
||||||
|
placeholder="Filtro por código de deposito (opcional)"
|
||||||
|
/>
|
||||||
<p class="status"></p>
|
<p class="status"></p>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
6
dummy.ts
6
dummy.ts
|
@ -1,9 +1,7 @@
|
||||||
export async function dummy(host: string, token: string) {
|
export async function dummy(host: string, headers: HeadersInit) {
|
||||||
const res = await fetch(`${host}/api/Aperture/dummy`, {
|
const res = await fetch(`${host}/api/Aperture/dummy`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers,
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
if (!json.isOk) {
|
if (!json.isOk) {
|
||||||
|
|
9
order.ts
9
order.ts
|
@ -66,6 +66,8 @@ export interface OrderItemDto {
|
||||||
Quantity: number;
|
Quantity: number;
|
||||||
UnitPrice: number;
|
UnitPrice: number;
|
||||||
DiscountPercentage?: number;
|
DiscountPercentage?: number;
|
||||||
|
SelectMeasureUnit?: string;
|
||||||
|
MeasureCode?: string;
|
||||||
}
|
}
|
||||||
export interface ShippingDto {
|
export interface ShippingDto {
|
||||||
ShippingID: number;
|
ShippingID: number;
|
||||||
|
@ -112,15 +114,12 @@ export interface OrderResponse {}
|
||||||
|
|
||||||
export async function order(
|
export async function order(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
order: OrderDto
|
order: OrderDto
|
||||||
): Promise<OrderResponse> {
|
): Promise<OrderResponse> {
|
||||||
const res = await fetch(`${host}/api/Aperture/order`, {
|
const res = await fetch(`${host}/api/Aperture/order`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers,
|
||||||
accesstoken: token,
|
|
||||||
"content-type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify(order),
|
body: JSON.stringify(order),
|
||||||
});
|
});
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@suttyweb/hyperpop",
|
"name": "@suttyweb/hyperpop",
|
||||||
"version": "0.2.0",
|
"version": "0.3.0",
|
||||||
"description": "Un cliente de API de https://github.com/TangoSoftware/ApiTiendas",
|
"description": "Un cliente de API de https://github.com/TangoSoftware/ApiTiendas",
|
||||||
"license": "SEE LICENSE IN LICENSE",
|
"license": "SEE LICENSE IN LICENSE",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
8
price.ts
8
price.ts
|
@ -24,7 +24,7 @@ export interface PriceResponse {
|
||||||
|
|
||||||
export async function getPrices(
|
export async function getPrices(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: PriceQuery
|
options: PriceQuery
|
||||||
): Promise<PriceResponse> {
|
): Promise<PriceResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -37,11 +37,7 @@ export async function getPrices(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/Price?${searchParams.toString()}`,
|
`${host}/api/Aperture/Price?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
|
@ -28,7 +28,7 @@ export interface PreciosResponse {
|
||||||
|
|
||||||
export async function getPricesByCustomer(
|
export async function getPricesByCustomer(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: PriceByCustomerQuery
|
options: PriceByCustomerQuery
|
||||||
): Promise<PreciosResponse> {
|
): Promise<PreciosResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -44,11 +44,7 @@ export async function getPricesByCustomer(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/PriceByCustomer?${searchParams.toString()}`,
|
`${host}/api/Aperture/PriceByCustomer?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
|
@ -23,7 +23,7 @@ export interface PriceListResponse {
|
||||||
|
|
||||||
export async function getPriceLists(
|
export async function getPriceLists(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: PriceListQuery
|
options: PriceListQuery
|
||||||
): Promise<PriceListResponse> {
|
): Promise<PriceListResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -33,11 +33,7 @@ export async function getPriceLists(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/PriceList?${searchParams.toString()}`,
|
`${host}/api/Aperture/PriceList?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
|
@ -50,7 +50,7 @@ export interface ProductosResponse {
|
||||||
// https://github.com/TangoSoftware/ApiTiendas#art%C3%ADculos
|
// https://github.com/TangoSoftware/ApiTiendas#art%C3%ADculos
|
||||||
export async function getProductos(
|
export async function getProductos(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: ProductosQuery
|
options: ProductosQuery
|
||||||
): Promise<ProductosResponse> {
|
): Promise<ProductosResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -63,11 +63,7 @@ export async function getProductos(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/Product?${searchParams.toString()}`,
|
`${host}/api/Aperture/Product?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
|
@ -23,7 +23,7 @@ export interface PublicationsResponse {
|
||||||
// https://github.com/TangoSoftware/ApiTiendas#art%C3%ADculos
|
// https://github.com/TangoSoftware/ApiTiendas#art%C3%ADculos
|
||||||
export async function getPublications(
|
export async function getPublications(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: PublicationsQuery
|
options: PublicationsQuery
|
||||||
): Promise<PublicationsResponse> {
|
): Promise<PublicationsResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -39,11 +39,7 @@ export async function getPublications(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/Publications?${searchParams.toString()}`,
|
`${host}/api/Aperture/Publications?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
8
stock.ts
8
stock.ts
|
@ -23,7 +23,7 @@ export interface StockResponse {
|
||||||
// https://github.com/TangoSoftware/ApiTiendas#saldos-de-stock
|
// https://github.com/TangoSoftware/ApiTiendas#saldos-de-stock
|
||||||
export async function getStocks(
|
export async function getStocks(
|
||||||
host: string,
|
host: string,
|
||||||
token: string,
|
headers: HeadersInit,
|
||||||
options: StockQuery
|
options: StockQuery
|
||||||
): Promise<StockResponse> {
|
): Promise<StockResponse> {
|
||||||
let searchParams = new URLSearchParams();
|
let searchParams = new URLSearchParams();
|
||||||
|
@ -36,11 +36,7 @@ export async function getStocks(
|
||||||
}
|
}
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${host}/api/Aperture/Stock?${searchParams.toString()}`,
|
`${host}/api/Aperture/Stock?${searchParams.toString()}`,
|
||||||
{
|
{ headers }
|
||||||
headers: {
|
|
||||||
accesstoken: token,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
console.debug(json);
|
console.debug(json);
|
||||||
|
|
Loading…
Reference in a new issue