fix: fixed map and client list
This commit is contained in:
parent
fc729c6b77
commit
ee3bb84269
11 changed files with 44 additions and 32 deletions
2
prisma/migrations/20251120094202_009/migration.sql
Normal file
2
prisma/migrations/20251120094202_009/migration.sql
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Cliente" ALTER COLUMN "sede_url" SET DATA TYPE TEXT;
|
||||||
|
|
@ -42,7 +42,7 @@ model Cliente {
|
||||||
partita_iva String @db.VarChar(255)
|
partita_iva String @db.VarChar(255)
|
||||||
telefono String @db.VarChar(255)
|
telefono String @db.VarChar(255)
|
||||||
sede String @db.VarChar(255)
|
sede String @db.VarChar(255)
|
||||||
sede_url String @db.VarChar(255)
|
sede_url String
|
||||||
contratto String @db.VarChar(255)
|
contratto String @db.VarChar(255)
|
||||||
lat Float
|
lat Float
|
||||||
lon Float
|
lon Float
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { PrismaClient } from "@/generated/prisma";
|
import { Modello, PrismaClient } from "@/generated/prisma";
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function GET(request: Request) {
|
||||||
const prisma = new PrismaClient();
|
const prisma = new PrismaClient();
|
||||||
|
|
@ -16,9 +16,24 @@ export async function GET(request: Request) {
|
||||||
return Response.json({ clients });
|
return Response.json({ clients });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function extractLatLonFromGmapsUrl(url: string) {
|
||||||
|
// Usa una regex per cercare la latitudine e la longitudine nell'URL
|
||||||
|
const regex = /@(-?\d+\.\d+),(-?\d+\.\d+)/;
|
||||||
|
const match = url.match(regex);
|
||||||
|
|
||||||
|
if (match) {
|
||||||
|
const lat = parseFloat(match[1]);
|
||||||
|
const lon = parseFloat(match[2]);
|
||||||
|
return [lat, lon]; // Restituisce un array con latitudine e longitudine
|
||||||
|
} else {
|
||||||
|
return [0, 0]; // Se non trova latitudine e longitudine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
const prisma = new PrismaClient();
|
const prisma = new PrismaClient();
|
||||||
const data = await request.json();
|
const data = await request.json();
|
||||||
|
const [lat, lon] = extractLatLonFromGmapsUrl(data.sede_url);
|
||||||
|
|
||||||
await prisma.cliente.create({
|
await prisma.cliente.create({
|
||||||
data: {
|
data: {
|
||||||
|
|
@ -29,8 +44,12 @@ export async function POST(request: Request) {
|
||||||
sede: data.sede,
|
sede: data.sede,
|
||||||
sede_url: data.sede_url,
|
sede_url: data.sede_url,
|
||||||
telefono: data.telefono,
|
telefono: data.telefono,
|
||||||
registratori: {
|
lat: lat,
|
||||||
|
lon: lon,
|
||||||
|
/*registratori: {
|
||||||
create: {
|
create: {
|
||||||
|
id: "80E1758414",
|
||||||
|
modello: Modello.FORM100,
|
||||||
interventi: {
|
interventi: {
|
||||||
create: {
|
create: {
|
||||||
data: new Date("2025-10-30"),
|
data: new Date("2025-10-30"),
|
||||||
|
|
@ -39,7 +58,7 @@ export async function POST(request: Request) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},*/
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ export default function Page() {
|
||||||
async function getClienti() {
|
async function getClienti() {
|
||||||
const req = await fetch(`/api/clienti`);
|
const req = await fetch(`/api/clienti`);
|
||||||
const data = await req.json();
|
const data = await req.json();
|
||||||
console.log(data.clients);
|
|
||||||
setClienti(data.clients);
|
setClienti(data.clients);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -26,7 +25,10 @@ export default function Page() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div id="map" className="w-full h-full border rounded-md m-0 p-0">
|
<div id="map" className="w-full h-full border rounded-md m-0 p-0">
|
||||||
<MapWithNoSSR highlight={client} clienti={clienti} />
|
<MapWithNoSSR
|
||||||
|
highlight={clienti?.find((cliente) => cliente.id == +(client || -1))}
|
||||||
|
clienti={clienti}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,10 +155,6 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
|
||||||
setClientPathname(pathname);
|
setClientPathname(pathname);
|
||||||
}, [pathname]);
|
}, [pathname]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
console.log();
|
|
||||||
}, [clientPathname]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Sidebar
|
<Sidebar
|
||||||
collapsible="icon"
|
collapsible="icon"
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ const Map = ({
|
||||||
highlight,
|
highlight,
|
||||||
clienti,
|
clienti,
|
||||||
}: {
|
}: {
|
||||||
highlight?: string;
|
highlight?: Cliente;
|
||||||
clienti: Array<Cliente>;
|
clienti: Array<Cliente>;
|
||||||
}) => {
|
}) => {
|
||||||
const positions = [
|
const positions = [
|
||||||
|
|
@ -55,7 +55,7 @@ const Map = ({
|
||||||
<MapContainer
|
<MapContainer
|
||||||
center={
|
center={
|
||||||
highlight
|
highlight
|
||||||
? positions.find((client) => client.name == highlight)?.position
|
? [highlight.lat, highlight.lon]
|
||||||
: [45.54157745559809, 10.211896906975962]
|
: [45.54157745559809, 10.211896906975962]
|
||||||
}
|
}
|
||||||
zoom={13}
|
zoom={13}
|
||||||
|
|
@ -74,6 +74,7 @@ const Map = ({
|
||||||
draggable={false}
|
draggable={false}
|
||||||
animate={false}
|
animate={false}
|
||||||
icon={customMarker}
|
icon={customMarker}
|
||||||
|
key={client.id}
|
||||||
>
|
>
|
||||||
<Popup className="">
|
<Popup className="">
|
||||||
<div className="flex flex-row gap-5">
|
<div className="flex flex-row gap-5">
|
||||||
|
|
@ -108,9 +109,7 @@ const Map = ({
|
||||||
)
|
)
|
||||||
) : (
|
) : (
|
||||||
<Marker
|
<Marker
|
||||||
position={
|
position={[highlight.lat, highlight.lon]}
|
||||||
positions.find((client) => client.name == highlight)?.position
|
|
||||||
}
|
|
||||||
draggable={false}
|
draggable={false}
|
||||||
animate={false}
|
animate={false}
|
||||||
icon={customMarker}
|
icon={customMarker}
|
||||||
|
|
@ -119,7 +118,7 @@ const Map = ({
|
||||||
<div className="flex flex-row gap-5">
|
<div className="flex flex-row gap-5">
|
||||||
<div>
|
<div>
|
||||||
<span className="block text-sm font-bold">
|
<span className="block text-sm font-bold">
|
||||||
{positions.find((client) => client.name == highlight)?.name}
|
{highlight.ragione_sociale}
|
||||||
</span>
|
</span>
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
<span className="text-xs font-semibold">P.IVA</span>
|
<span className="text-xs font-semibold">P.IVA</span>
|
||||||
|
|
@ -129,13 +128,7 @@ const Map = ({
|
||||||
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<a
|
<a href={highlight.sede_url} target="blank">
|
||||||
href={
|
|
||||||
positions.find((client) => client.name == highlight)
|
|
||||||
?.sede_url
|
|
||||||
}
|
|
||||||
target="blank"
|
|
||||||
>
|
|
||||||
<Button variant="outline">
|
<Button variant="outline">
|
||||||
<MapIcon className="size-4" />
|
<MapIcon className="size-4" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "prisma-client-58455549b989c60e3bedecbaad5fb747da20ec4980d09c51c40211ff854da52b",
|
"name": "prisma-client-5f7d234f39789de56f24e3f97fcb730daf5c78fb0ef54bab42a661559a87fb78",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"types": "index.d.ts",
|
"types": "index.d.ts",
|
||||||
"browser": "default.js",
|
"browser": "default.js",
|
||||||
|
|
|
||||||
BIN
src/generated/prisma/query_engine-windows.dll.node.tmp396
Normal file
BIN
src/generated/prisma/query_engine-windows.dll.node.tmp396
Normal file
Binary file not shown.
|
|
@ -195,8 +195,8 @@ const config = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Modello {\n FORM100\n FORM200\n FORM200PLUS\n FORM500\n}\n\nmodel Intervento {\n id Int @id @default(autoincrement())\n id_registratore String\n data DateTime @db.Date\n lavoro String @db.Text\n fattura Boolean @db.Boolean\n registratore Registratore @relation(fields: [id_registratore], references: [id])\n}\n\nmodel Registratore {\n id String @id\n id_cliente Int\n modello Modello?\n data_acquisto DateTime? @db.Date\n ultima_verifica DateTime? @db.Date\n prossima_verifica DateTime? @db.Date\n cliente Cliente @relation(fields: [id_cliente], references: [id])\n interventi Intervento[]\n}\n\nmodel Cliente {\n id Int @id @default(autoincrement())\n ragione_sociale String @unique @db.VarChar(255)\n email String @db.VarChar(255)\n partita_iva String @db.VarChar(255)\n telefono String @db.VarChar(255)\n sede String @db.VarChar(255)\n sede_url String @db.VarChar(255)\n contratto String @db.VarChar(255)\n lat Float\n lon Float\n registratori Registratore[]\n}\n",
|
"inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Modello {\n FORM100\n FORM200\n FORM200PLUS\n FORM500\n}\n\nmodel Intervento {\n id Int @id @default(autoincrement())\n id_registratore String\n data DateTime @db.Date\n lavoro String @db.Text\n fattura Boolean @db.Boolean\n registratore Registratore @relation(fields: [id_registratore], references: [id])\n}\n\nmodel Registratore {\n id String @id\n id_cliente Int\n modello Modello?\n data_acquisto DateTime? @db.Date\n ultima_verifica DateTime? @db.Date\n prossima_verifica DateTime? @db.Date\n cliente Cliente @relation(fields: [id_cliente], references: [id])\n interventi Intervento[]\n}\n\nmodel Cliente {\n id Int @id @default(autoincrement())\n ragione_sociale String @unique @db.VarChar(255)\n email String @db.VarChar(255)\n partita_iva String @db.VarChar(255)\n telefono String @db.VarChar(255)\n sede String @db.VarChar(255)\n sede_url String\n contratto String @db.VarChar(255)\n lat Float\n lon Float\n registratori Registratore[]\n}\n",
|
||||||
"inlineSchemaHash": "3424ce1a172605bbf2b32e4c6ada582172d780cc98a6e12f826a26c0cc5b9555",
|
"inlineSchemaHash": "9bd9d1485d1021de6ddd08a2040ad878357151b96b361e965ef2ca00c0bca296",
|
||||||
"copyEngine": true
|
"copyEngine": true
|
||||||
}
|
}
|
||||||
config.dirname = '/'
|
config.dirname = '/'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue