fix: fixed map and client list

This commit is contained in:
Mouad Lahlal 2025-11-20 10:55:03 +01:00
parent fc729c6b77
commit ee3bb84269
11 changed files with 44 additions and 32 deletions

View file

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Cliente" ALTER COLUMN "sede_url" SET DATA TYPE TEXT;

View file

@ -42,7 +42,7 @@ model Cliente {
partita_iva String @db.VarChar(255)
telefono String @db.VarChar(255)
sede String @db.VarChar(255)
sede_url String @db.VarChar(255)
sede_url String
contratto String @db.VarChar(255)
lat Float
lon Float

View file

@ -1,4 +1,4 @@
import { PrismaClient } from "@/generated/prisma";
import { Modello, PrismaClient } from "@/generated/prisma";
export async function GET(request: Request) {
const prisma = new PrismaClient();
@ -16,9 +16,24 @@ export async function GET(request: Request) {
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) {
const prisma = new PrismaClient();
const data = await request.json();
const [lat, lon] = extractLatLonFromGmapsUrl(data.sede_url);
await prisma.cliente.create({
data: {
@ -29,8 +44,12 @@ export async function POST(request: Request) {
sede: data.sede,
sede_url: data.sede_url,
telefono: data.telefono,
registratori: {
lat: lat,
lon: lon,
/*registratori: {
create: {
id: "80E1758414",
modello: Modello.FORM100,
interventi: {
create: {
data: new Date("2025-10-30"),
@ -39,7 +58,7 @@ export async function POST(request: Request) {
},
},
},
},
},*/
},
});

View file

@ -17,7 +17,6 @@ export default function Page() {
async function getClienti() {
const req = await fetch(`/api/clienti`);
const data = await req.json();
console.log(data.clients);
setClienti(data.clients);
}
@ -26,7 +25,10 @@ export default function Page() {
return (
<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>
);
}

View file

@ -155,10 +155,6 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
setClientPathname(pathname);
}, [pathname]);
useEffect(() => {
console.log();
}, [clientPathname]);
return (
<Sidebar
collapsible="icon"

View file

@ -14,7 +14,7 @@ const Map = ({
highlight,
clienti,
}: {
highlight?: string;
highlight?: Cliente;
clienti: Array<Cliente>;
}) => {
const positions = [
@ -55,7 +55,7 @@ const Map = ({
<MapContainer
center={
highlight
? positions.find((client) => client.name == highlight)?.position
? [highlight.lat, highlight.lon]
: [45.54157745559809, 10.211896906975962]
}
zoom={13}
@ -74,6 +74,7 @@ const Map = ({
draggable={false}
animate={false}
icon={customMarker}
key={client.id}
>
<Popup className="">
<div className="flex flex-row gap-5">
@ -108,9 +109,7 @@ const Map = ({
)
) : (
<Marker
position={
positions.find((client) => client.name == highlight)?.position
}
position={[highlight.lat, highlight.lon]}
draggable={false}
animate={false}
icon={customMarker}
@ -119,7 +118,7 @@ const Map = ({
<div className="flex flex-row gap-5">
<div>
<span className="block text-sm font-bold">
{positions.find((client) => client.name == highlight)?.name}
{highlight.ragione_sociale}
</span>
<div className="flex gap-2">
<span className="text-xs font-semibold">P.IVA</span>
@ -129,13 +128,7 @@ const Map = ({
<Tooltip>
<TooltipTrigger asChild>
<a
href={
positions.find((client) => client.name == highlight)
?.sede_url
}
target="blank"
>
<a href={highlight.sede_url} target="blank">
<Button variant="outline">
<MapIcon className="size-4" />
</Button>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
{
"name": "prisma-client-58455549b989c60e3bedecbaad5fb747da20ec4980d09c51c40211ff854da52b",
"name": "prisma-client-5f7d234f39789de56f24e3f97fcb730daf5c78fb0ef54bab42a661559a87fb78",
"main": "index.js",
"types": "index.d.ts",
"browser": "default.js",

View file

@ -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",
"inlineSchemaHash": "3424ce1a172605bbf2b32e4c6ada582172d780cc98a6e12f826a26c0cc5b9555",
"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": "9bd9d1485d1021de6ddd08a2040ad878357151b96b361e965ef2ca00c0bca296",
"copyEngine": true
}
config.dirname = '/'