Ausstellen
This commit is contained in:
192
src/lib/server/invoice.ts
Normal file
192
src/lib/server/invoice.ts
Normal file
@@ -0,0 +1,192 @@
|
||||
import { getAusweisartFromId } from "#components/Ausweis/types.js";
|
||||
import moment from "moment";
|
||||
import { createLexOfficeCustomer } from "./lexoffice.js";
|
||||
import { Enums, prisma, Rechnung, VerbrauchsausweisWohnen } from "./prisma.js";
|
||||
import { LEX_OFFICE_API_KEY, PRICES } from "#lib/constants.js";
|
||||
|
||||
export function createLineItem(name: string, preis: number, steuer: number) {
|
||||
return {
|
||||
"type": "custom",
|
||||
"name": name,
|
||||
"description": "",
|
||||
"quantity": 1,
|
||||
"lineItemAmount": preis,
|
||||
"unitName": name,
|
||||
"unitPrice": {
|
||||
"currency": "EUR",
|
||||
"grossAmount": preis,
|
||||
"taxRatePercentage": steuer
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function addedServicesNeu(data: any, rechnung: Rechnung, steuer: number){
|
||||
if (rechnung.services.includes(Enums.Service.Qualitaetsdruck)){
|
||||
data["lineItems"].push(createLineItem('Zusatzservice Postversand', 9, steuer))
|
||||
}
|
||||
if (rechnung.services.includes(Enums.Service.Aushang)){
|
||||
data["lineItems"].push(createLineItem('Zusatzservice Aushang', 10, steuer))
|
||||
}
|
||||
if (rechnung.services.includes(Enums.Service.SameDay)){
|
||||
data["lineItems"].push(createLineItem('Zusatzservice Same Day Service', 29, steuer))
|
||||
}
|
||||
if (rechnung.services.includes(Enums.Service.Telefonberatung)){
|
||||
data["lineItems"].push(createLineItem('Zusatzservice Telefonische Beratung', 75, steuer))
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstellt eine Rechnung in LexOffice und gibt die ID zurück.
|
||||
* Die Preise basieren auf den in der Konstante `__PRICES__` definierten Preisen.
|
||||
* @param Ausweis ausweis
|
||||
* @param Rechnung $rechnung
|
||||
* @return array
|
||||
* @throws Error
|
||||
*/
|
||||
export async function createInvoice(ausweis: VerbrauchsausweisWohnen, rechnung: Rechnung) {
|
||||
if (!ausweis.benutzer_id) {
|
||||
throw new Error("Benutzer ist nicht vorhanden")
|
||||
}
|
||||
|
||||
const user = await prisma.benutzer.findUnique({
|
||||
where: {
|
||||
id: ausweis.benutzer_id
|
||||
}
|
||||
})
|
||||
|
||||
if (!user) {
|
||||
throw new Error("Nutzer existiert nicht!");
|
||||
} else if (user.lex_office_id == null) {
|
||||
// User has no valid lex_id
|
||||
const lex_office_id = await createLexOfficeCustomer(user);
|
||||
|
||||
user.lex_office_id = lex_office_id;
|
||||
|
||||
await prisma.benutzer.update({
|
||||
where: {
|
||||
id: user.id
|
||||
},
|
||||
data: {
|
||||
lex_office_id: user.lex_office_id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const ausweisart = getAusweisartFromId(ausweis.id);
|
||||
|
||||
let data = {
|
||||
"voucherDate": moment().format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
|
||||
"taxConditions": {
|
||||
"taxType": "gross"
|
||||
},
|
||||
"shippingConditions": {
|
||||
"shippingType": "none"
|
||||
},
|
||||
"address": {
|
||||
"contactId": user.lex_office_id,
|
||||
"name": rechnung.empfaenger,
|
||||
"street": rechnung.strasse,
|
||||
"city": rechnung.ort,
|
||||
"zip": rechnung.plz,
|
||||
"countryCode": "DE",
|
||||
"supplement": rechnung.zusatzzeile
|
||||
},
|
||||
"lineItems": [],
|
||||
"totalPrice": {
|
||||
"currency": "EUR",
|
||||
"totalGrossAmount": rechnung.betrag,
|
||||
},
|
||||
"title": "Rechnung",
|
||||
"introduction": "Ihren Energieausweis (Ausweis ID {ausweis.id}) stellen wir Ihnen hiermit in Rechnung",
|
||||
"remark": "Vielen Dank für Ihren Einkauf."
|
||||
};
|
||||
|
||||
if (rechnung.status == Enums.Rechnungsstatus.paid) {
|
||||
const types = {
|
||||
[Enums.Bezahlmethoden.paypal]: "PayPal",
|
||||
[Enums.Bezahlmethoden.creditcard]: "Kreditkarte",
|
||||
[Enums.Bezahlmethoden.sofort]: "Sofortüberweisung",
|
||||
[Enums.Bezahlmethoden.giropay]: "Giropay",
|
||||
};
|
||||
|
||||
const type = types[rechnung.bezahlmethode];
|
||||
|
||||
data["introduction"] = `Vielen Dank für Ihren Einkauf (Ausweis ID ${ausweis.id}). Ihre Rechnung haben sie bereits mit ${type} bezahlt.`;
|
||||
}
|
||||
|
||||
const tax_rate = 19;
|
||||
|
||||
if (rechnung.betrag == 15) {
|
||||
// Korrektur alleinstehend
|
||||
data["lineItems"].push(createLineItem("Service Korrektur anfordern", rechnung.betrag, 19));
|
||||
} else if (rechnung.betrag == 476) {
|
||||
data["lineItems"].push(createLineItem("GEG Berechnung Wohngebäude", rechnung.betrag, 19));
|
||||
} else if (rechnung.betrag > 400 && rechnung.betrag != 476) {
|
||||
data["lineItems"].push(createLineItem("Bedarfsausweis Gewerbe", rechnung.betrag, 19));
|
||||
} else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
if (ausweis.ausweistyp == Enums.AusweisTyp.Standard) {
|
||||
data["lineItems"].push(createLineItem(`Verbrauchsausweis Online (ID ${ausweis.id})`, PRICES.VerbrauchsausweisWohnen.Standard, 19));
|
||||
} else if (ausweis.ausweistyp == Enums.AusweisTyp.Beratung) {
|
||||
data["lineItems"].push(createLineItem(`Verbrauchsausweis Online (Vorprüfung negativ) (ID ${ausweis.id})`, PRICES.VerbrauchsausweisWohnen.Beratung, 19));
|
||||
} else if (ausweis.ausweistyp == Enums.AusweisTyp.Offline) {
|
||||
data["lineItems"].push(createLineItem(`Verbrauchsausweis Offline (ID ${ausweis.id})`, PRICES.VerbrauchsausweisWohnen.Offline, 19));
|
||||
}
|
||||
} else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
if (ausweis.ausweistyp == Enums.AusweisTyp.Standard) {
|
||||
data["lineItems"].push(createLineItem(`Bedarfsausweis Online (ID ${ausweis.id})`, PRICES.VerbrauchsausweisWohnen.Standard, 19));
|
||||
} else if (ausweis.ausweistyp == Enums.AusweisTyp.Beratung) {
|
||||
data["lineItems"].push(createLineItem(`Bedarfsausweis Online (Vorprüfung negativ) (ID ${ausweis.id})`, PRICES.VerbrauchsausweisWohnen.Beratung, 19));
|
||||
} else if (ausweis.ausweistyp == Enums.AusweisTyp.Offline) {
|
||||
data["lineItems"].push(createLineItem(`Bedarfsausweis Offline (ID ${ausweis.id})`, PRICES.VerbrauchsausweisWohnen.Offline, 19));
|
||||
}
|
||||
} else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
if (ausweis.ausweistyp == Enums.AusweisTyp.Standard) {
|
||||
data["lineItems"].push(createLineItem(`Verbrauchsausweis Nichtwohngebäude Online (ID ${ausweis.id})`, PRICES.VerbrauchsausweisGewerbe.Standard, 19));
|
||||
} else if (ausweis.ausweistyp == Enums.AusweisTyp.Beratung) {
|
||||
data["lineItems"].push(createLineItem(`Verbrauchsausweis Nichtwohngebäude Online (Vorprüfung negativ) (ID ${ausweis.id})`, PRICES.VerbrauchsausweisGewerbe.Beratung, 19));
|
||||
} else if (ausweis.ausweistyp == Enums.AusweisTyp.Offline) {
|
||||
data["lineItems"].push(createLineItem(`Verbrauchsausweis Nichtwohngebäude Offline (ID ${ausweis.id})`, PRICES.VerbrauchsausweisGewerbe.Offline, 19));
|
||||
}
|
||||
}
|
||||
|
||||
data = addedServicesNeu(data, rechnung, 19);
|
||||
|
||||
|
||||
const response = await fetch("https://api.lexoffice.io/v1/invoices?finalize=true", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
Accept: `application/json`,
|
||||
Authorization: `Bearer ${LEX_OFFICE_API_KEY}`,
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
|
||||
if (response.status == 400) {
|
||||
throw new Error("Fehler beim Absenden der Request.")
|
||||
}
|
||||
|
||||
const invoice = await response.json()
|
||||
|
||||
// Wir müssen den Ausweis nun wieder abfragen, um die erstellte Rechnungsnummer zu bekommen.
|
||||
const response_id = invoice["id"];
|
||||
|
||||
const request = await fetch(`https://api.lexoffice.io/v1/invoices/${response_id}`, {
|
||||
method: "POSGETT",
|
||||
headers: {
|
||||
Accept: `application/json`,
|
||||
Authorization: `Bearer ${LEX_OFFICE_API_KEY}`,
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
|
||||
const abfrage_response = await request.json()
|
||||
|
||||
return {
|
||||
id: invoice["id"],
|
||||
voucherNumber: abfrage_response["voucherNumber"]
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { LEX_OFFICE_API_KEY } from "#lib/constants.js";
|
||||
import { Aufnahme, BedarfsausweisWohnen, Benutzer, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma";
|
||||
import { prisma } from "#lib/server/prisma";
|
||||
import { Aufnahme, BedarfsausweisWohnen, Benutzer, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import moment from "moment";
|
||||
|
||||
export function lexOfficeAnfrageSenden(ausweis: VerbrauchsausweisWohnen | BedarfsausweisWohnen | VerbrauchsausweisGewerbe, options: {
|
||||
export async function lexOfficeAnfrageSenden(ausweis: VerbrauchsausweisWohnen | BedarfsausweisWohnen | VerbrauchsausweisGewerbe, options: {
|
||||
bezeichnung: string,
|
||||
positionstext: string,
|
||||
preis: number,
|
||||
@@ -103,149 +103,149 @@ export function lexOfficeAnfrageSenden(ausweis: VerbrauchsausweisWohnen | Bedarf
|
||||
throw new Error(`Ein Fehler ist aufgetreten: ${pdfResult.message}`);
|
||||
}
|
||||
|
||||
$pdf_id = $render_response["documentFileId"];
|
||||
// $pdf_id = $render_response["documentFileId"];
|
||||
|
||||
db()->execute("UPDATE Angebotsanfragen SET
|
||||
Adresse_Objekt = :Adresse_Objekt,
|
||||
PLZ_Objekt = :PLZ_Objekt,
|
||||
Ort_Objekt = :Ort_Objekt,
|
||||
Dienstleistung = :Dienstleistung,
|
||||
Empfaengerrechnung = :Empfaengerrechnung,
|
||||
Zusatzzeilerechnung = :Zusatzzeilerechnung,
|
||||
Adresse = :Adresse,
|
||||
PLZ = :PLZ,
|
||||
Ort = :Ort,
|
||||
Anlass = :Anlass,
|
||||
Baujahrheizung = :Baujahrheizung,
|
||||
Baujahrgebaeude = :Baujahrgebaeude,
|
||||
Baujahrklima = :Baujahrklima,
|
||||
Gebaeudetyp = :Gebaeudetyp,
|
||||
Nutzflaeche = :Nutzflaeche,
|
||||
Sanierungsstatus = :Sanierungsstatus,
|
||||
Nachricht = :Nachricht,
|
||||
Datei = :Datei,
|
||||
Rolle = :Rolle,
|
||||
Email = :Email,
|
||||
Angebotspreis = :Angebotspreis,
|
||||
Rabatt = :Rabatt,
|
||||
`Status` = 'Verschickt',
|
||||
lex_office_id = :lex_office_id,
|
||||
Textanschreiben = :Textanschreiben,
|
||||
Positionstext = :Positionstext
|
||||
WHERE Auftragsnummer = :Auftragsnummer", [
|
||||
"Adresse_Objekt": $_POST["gebaeude_strasse"],
|
||||
"PLZ_Objekt": $_POST["gebaeude_plz"],
|
||||
"Ort_Objekt": $_POST["gebaeude_ort"],
|
||||
"Dienstleistung": $_POST["dienstleistung"],
|
||||
"Empfaengerrechnung": $_POST["rechnung_empfaenger"],
|
||||
"Zusatzzeilerechnung": $_POST["rechnung_zusatzzeile"],
|
||||
"Adresse": $_POST["rechnung_strasse"],
|
||||
"PLZ": $_POST["rechnung_plz"],
|
||||
"Ort": $_POST["rechnung_ort"],
|
||||
"Anlass": $_POST["anlass"],
|
||||
"Baujahrheizung": $_POST["baujahr_heizung"],
|
||||
"Baujahrgebaeude": $_POST["baujahr_gebaeude"],
|
||||
"Baujahrklima": $_POST["baujahr_klimaanlage"],
|
||||
"Gebaeudetyp": $_POST["gebaeudetyp"],
|
||||
"Nutzflaeche": $_POST["nutzflaeche"],
|
||||
"Sanierungsstatus": $_POST["sanierungsstatus"],
|
||||
"Nachricht": $_POST["nachricht"],
|
||||
"Datei": $dateien,
|
||||
"Rolle": $_POST["rolle"],
|
||||
"Email": $_POST["email"],
|
||||
"Angebotspreis": $_POST["Angebotspreis"],
|
||||
"Rabatt": $_POST["Rabatt"],
|
||||
"lex_office_id": $lex_office_id,
|
||||
"Textanschreiben": $_POST["Textanschreiben"],
|
||||
"Positionstext": $_POST["Positionstext"],
|
||||
"Auftragsnummer": $_POST["Auftragsnummer"]
|
||||
]);
|
||||
// db()->execute("UPDATE Angebotsanfragen SET
|
||||
// Adresse_Objekt = :Adresse_Objekt,
|
||||
// PLZ_Objekt = :PLZ_Objekt,
|
||||
// Ort_Objekt = :Ort_Objekt,
|
||||
// Dienstleistung = :Dienstleistung,
|
||||
// Empfaengerrechnung = :Empfaengerrechnung,
|
||||
// Zusatzzeilerechnung = :Zusatzzeilerechnung,
|
||||
// Adresse = :Adresse,
|
||||
// PLZ = :PLZ,
|
||||
// Ort = :Ort,
|
||||
// Anlass = :Anlass,
|
||||
// Baujahrheizung = :Baujahrheizung,
|
||||
// Baujahrgebaeude = :Baujahrgebaeude,
|
||||
// Baujahrklima = :Baujahrklima,
|
||||
// Gebaeudetyp = :Gebaeudetyp,
|
||||
// Nutzflaeche = :Nutzflaeche,
|
||||
// Sanierungsstatus = :Sanierungsstatus,
|
||||
// Nachricht = :Nachricht,
|
||||
// Datei = :Datei,
|
||||
// Rolle = :Rolle,
|
||||
// Email = :Email,
|
||||
// Angebotspreis = :Angebotspreis,
|
||||
// Rabatt = :Rabatt,
|
||||
// `Status` = 'Verschickt',
|
||||
// lex_office_id = :lex_office_id,
|
||||
// Textanschreiben = :Textanschreiben,
|
||||
// Positionstext = :Positionstext
|
||||
// WHERE Auftragsnummer = :Auftragsnummer", [
|
||||
// "Adresse_Objekt": $_POST["gebaeude_strasse"],
|
||||
// "PLZ_Objekt": $_POST["gebaeude_plz"],
|
||||
// "Ort_Objekt": $_POST["gebaeude_ort"],
|
||||
// "Dienstleistung": $_POST["dienstleistung"],
|
||||
// "Empfaengerrechnung": $_POST["rechnung_empfaenger"],
|
||||
// "Zusatzzeilerechnung": $_POST["rechnung_zusatzzeile"],
|
||||
// "Adresse": $_POST["rechnung_strasse"],
|
||||
// "PLZ": $_POST["rechnung_plz"],
|
||||
// "Ort": $_POST["rechnung_ort"],
|
||||
// "Anlass": $_POST["anlass"],
|
||||
// "Baujahrheizung": $_POST["baujahr_heizung"],
|
||||
// "Baujahrgebaeude": $_POST["baujahr_gebaeude"],
|
||||
// "Baujahrklima": $_POST["baujahr_klimaanlage"],
|
||||
// "Gebaeudetyp": $_POST["gebaeudetyp"],
|
||||
// "Nutzflaeche": $_POST["nutzflaeche"],
|
||||
// "Sanierungsstatus": $_POST["sanierungsstatus"],
|
||||
// "Nachricht": $_POST["nachricht"],
|
||||
// "Datei": $dateien,
|
||||
// "Rolle": $_POST["rolle"],
|
||||
// "Email": $_POST["email"],
|
||||
// "Angebotspreis": $_POST["Angebotspreis"],
|
||||
// "Rabatt": $_POST["Rabatt"],
|
||||
// "lex_office_id": $lex_office_id,
|
||||
// "Textanschreiben": $_POST["Textanschreiben"],
|
||||
// "Positionstext": $_POST["Positionstext"],
|
||||
// "Auftragsnummer": $_POST["Auftragsnummer"]
|
||||
// ]);
|
||||
|
||||
// Die Auftragsnummer abfragen
|
||||
// // Die Auftragsnummer abfragen
|
||||
|
||||
$curl_nummer = curl_init();
|
||||
// $curl_nummer = curl_init();
|
||||
|
||||
curl_setopt_array($curl_nummer, [
|
||||
CURLOPT_URL: "https://api.lexoffice.io/v1/quotations/$lex_office_id",
|
||||
CURLOPT_RETURNTRANSFER: true,
|
||||
CURLOPT_ENCODING: "",
|
||||
CURLOPT_MAXREDIRS: 10,
|
||||
CURLOPT_TIMEOUT: 30,
|
||||
CURLOPT_HTTP_VERSION: CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST: "GET",
|
||||
CURLOPT_HTTPHEADER: [
|
||||
"Accept: application/json",
|
||||
"Authorization: Bearer " . LEX_OFFICE_API_KEY
|
||||
]
|
||||
]);
|
||||
// curl_setopt_array($curl_nummer, [
|
||||
// CURLOPT_URL: "https://api.lexoffice.io/v1/quotations/$lex_office_id",
|
||||
// CURLOPT_RETURNTRANSFER: true,
|
||||
// CURLOPT_ENCODING: "",
|
||||
// CURLOPT_MAXREDIRS: 10,
|
||||
// CURLOPT_TIMEOUT: 30,
|
||||
// CURLOPT_HTTP_VERSION: CURL_HTTP_VERSION_1_1,
|
||||
// CURLOPT_CUSTOMREQUEST: "GET",
|
||||
// CURLOPT_HTTPHEADER: [
|
||||
// "Accept: application/json",
|
||||
// "Authorization: Bearer " . LEX_OFFICE_API_KEY
|
||||
// ]
|
||||
// ]);
|
||||
|
||||
$nummer_response = curl_exec($curl_nummer);
|
||||
$nummer_response = json_decode($nummer_response, true);
|
||||
$err = curl_error($curl_nummer);
|
||||
// $nummer_response = curl_exec($curl_nummer);
|
||||
// $nummer_response = json_decode($nummer_response, true);
|
||||
// $err = curl_error($curl_nummer);
|
||||
|
||||
curl_close($curl_nummer);
|
||||
// curl_close($curl_nummer);
|
||||
|
||||
// Und die Mail verschicken
|
||||
// // Und die Mail verschicken
|
||||
|
||||
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
|
||||
// $mail = new PHPMailer\PHPMailer\PHPMailer(true);
|
||||
|
||||
$mail->IsSMTP();
|
||||
$mail->Host = "smtp.ionos.de";
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = 'info@online-energieausweis.org';
|
||||
$mail->Password = 'Katendeich5a2024!';
|
||||
// $mail->IsSMTP();
|
||||
// $mail->Host = "smtp.ionos.de";
|
||||
// $mail->SMTPAuth = true;
|
||||
// $mail->Username = 'info@online-energieausweis.org';
|
||||
// $mail->Password = 'Katendeich5a2024!';
|
||||
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->Encoding = 'base64';
|
||||
$mail->setFrom("info@online-energieausweis.org", "IB Cornelsen",0);
|
||||
$mail->addAddress($_POST["email"], $_POST["vorname"] . " " . $_POST["name"]);
|
||||
$mail->addCC("jens.cornelsen@ib-cornelsen.de", "Jens Cornelsen");
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = "{$nummer_response["voucherNumber"]} - {$_POST["Angebotsbezeichnung"]}";
|
||||
// $mail->CharSet = 'UTF-8';
|
||||
// $mail->Encoding = 'base64';
|
||||
// $mail->setFrom("info@online-energieausweis.org", "IB Cornelsen",0);
|
||||
// $mail->addAddress($_POST["email"], $_POST["vorname"] . " " . $_POST["name"]);
|
||||
// $mail->addCC("jens.cornelsen@ib-cornelsen.de", "Jens Cornelsen");
|
||||
// $mail->isHTML(true);
|
||||
// $mail->Subject = "{$nummer_response["voucherNumber"]} - {$_POST["Angebotsbezeichnung"]}";
|
||||
|
||||
|
||||
// carriage return type (RFC)
|
||||
$eol = "<br>";
|
||||
$anrede = "Sehr geehrte" . ($_POST["anrede"] == "Herr" ? "r " : " ") . $_POST["anrede"];
|
||||
// // carriage return type (RFC)
|
||||
// $eol = "<br>";
|
||||
// $anrede = "Sehr geehrte" . ($_POST["anrede"] == "Herr" ? "r " : " ") . $_POST["anrede"];
|
||||
|
||||
$message = "$anrede {$_POST["name"]},{$eol}{$eol}";
|
||||
$message .= "vielen Dank für Ihre Anfrage. Im Anhang finden Sie das ausgearbeitete Angebot als PDF-Dokument.{$eol}{$eol}";
|
||||
$message .= "Mit freundlichen Grüßen,$eol";
|
||||
$message .= "Jens Cornelsen$eol";
|
||||
$message .= "--{$eol}IB Cornelsen{$eol}Katendeich 5A{$eol}21035 Hamburg{$eol}{$eol}www.ib-cornelsen.de{$eol}{$eol}Fon 040 209339858{$eol}Fax 040 209339859";
|
||||
$mail->Body = $message;
|
||||
// $message = "$anrede {$_POST["name"]},{$eol}{$eol}";
|
||||
// $message .= "vielen Dank für Ihre Anfrage. Im Anhang finden Sie das ausgearbeitete Angebot als PDF-Dokument.{$eol}{$eol}";
|
||||
// $message .= "Mit freundlichen Grüßen,$eol";
|
||||
// $message .= "Jens Cornelsen$eol";
|
||||
// $message .= "--{$eol}IB Cornelsen{$eol}Katendeich 5A{$eol}21035 Hamburg{$eol}{$eol}www.ib-cornelsen.de{$eol}{$eol}Fon 040 209339858{$eol}Fax 040 209339859";
|
||||
// $mail->Body = $message;
|
||||
|
||||
$curl_pdf = curl_init();
|
||||
// $curl_pdf = curl_init();
|
||||
|
||||
curl_setopt_array($curl_pdf, [
|
||||
CURLOPT_URL: "https://api.lexoffice.io/v1/files/$pdf_id",
|
||||
CURLOPT_RETURNTRANSFER: true,
|
||||
CURLOPT_ENCODING: "",
|
||||
CURLOPT_MAXREDIRS: 10,
|
||||
CURLOPT_TIMEOUT: 30,
|
||||
CURLOPT_HTTP_VERSION: CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST: "GET",
|
||||
CURLOPT_HTTPHEADER: [
|
||||
"Accept: application/pdf",
|
||||
"Authorization: Bearer " . LEX_OFFICE_API_KEY
|
||||
]
|
||||
]);
|
||||
// curl_setopt_array($curl_pdf, [
|
||||
// CURLOPT_URL: "https://api.lexoffice.io/v1/files/$pdf_id",
|
||||
// CURLOPT_RETURNTRANSFER: true,
|
||||
// CURLOPT_ENCODING: "",
|
||||
// CURLOPT_MAXREDIRS: 10,
|
||||
// CURLOPT_TIMEOUT: 30,
|
||||
// CURLOPT_HTTP_VERSION: CURL_HTTP_VERSION_1_1,
|
||||
// CURLOPT_CUSTOMREQUEST: "GET",
|
||||
// CURLOPT_HTTPHEADER: [
|
||||
// "Accept: application/pdf",
|
||||
// "Authorization: Bearer " . LEX_OFFICE_API_KEY
|
||||
// ]
|
||||
// ]);
|
||||
|
||||
$response = curl_exec($curl_pdf);
|
||||
$err = curl_error($curl_pdf);
|
||||
// $response = curl_exec($curl_pdf);
|
||||
// $err = curl_error($curl_pdf);
|
||||
|
||||
$HOME = dirname($ROOT);
|
||||
// $HOME = dirname($ROOT);
|
||||
|
||||
curl_close($curl_pdf);
|
||||
$fp = fopen("$HOME/{$PERSISTENT_FOLDER}/angebote/$pdf_id.pdf", "w+");
|
||||
fwrite($fp, $response);
|
||||
fclose($fp);
|
||||
// curl_close($curl_pdf);
|
||||
// $fp = fopen("$HOME/{$PERSISTENT_FOLDER}/angebote/$pdf_id.pdf", "w+");
|
||||
// fwrite($fp, $response);
|
||||
// fclose($fp);
|
||||
|
||||
$mail->addAttachment("$HOME/{$PERSISTENT_FOLDER}/angebote/$pdf_id.pdf", "Angebot.pdf");
|
||||
// $mail->addAttachment("$HOME/{$PERSISTENT_FOLDER}/angebote/$pdf_id.pdf", "Angebot.pdf");
|
||||
|
||||
$mail->send();
|
||||
// $mail->send();
|
||||
|
||||
echo "Alles wurde abgesendet! Du kannst die Webseite nun verlassen.";
|
||||
// echo "Alles wurde abgesendet! Du kannst die Webseite nun verlassen.";
|
||||
}
|
||||
|
||||
export async function createLexOfficeCustomer(user: Benutzer) {
|
||||
|
||||
@@ -18,6 +18,8 @@ import { BASE_URI } from "#lib/constants.js";
|
||||
import { getAnsichtsausweis, getDatenblatt } from "#lib/server/ausweis.js";
|
||||
import { PutObjectCommand } from "@aws-sdk/client-s3";
|
||||
import { s3Client } from "#lib/s3.js";
|
||||
import { createInvoice } from "#lib/server/invoice.js";
|
||||
import { tryCatch } from "#lib/tryCatch.js";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
@@ -125,27 +127,24 @@ export const GET = defineApiRoute({
|
||||
});
|
||||
}
|
||||
|
||||
// TODO
|
||||
// SECTION: Rechnung erstellen (LexOffice)
|
||||
// Wir wollen die Rechnung an lex office versenden, und uns die ID von da holen.
|
||||
// Falls die Rechnung bereits existiert ist das nicht nötig.
|
||||
// if (!$rechnung->lex_office_id) {
|
||||
// [$lex_office_id, $renr] = createInvoice($ausweis, $rechnung);
|
||||
// sleep(1); // TODO: Nach der Umstellung von LexOffice auf etwas anderes MUSS das hier unbedingt entfernt werden!
|
||||
if (!rechnung.lex_office_id) {
|
||||
const [result, error] = await tryCatch(createInvoice(ausweis, rechnung));
|
||||
|
||||
// if (!$lex_office_id || !$renr) {
|
||||
// die("Bei der Erstellung der Rechnung ist etwas schiefgelaufen - Möglicherweise ist etwas mit LexOffice?");
|
||||
// }
|
||||
if (error) {
|
||||
return
|
||||
}
|
||||
|
||||
// $rechnung->lex_office_id = $lex_office_id;
|
||||
// $rechnung->rechnungsnummer = $renr;
|
||||
// $rechnung->save();
|
||||
// }
|
||||
const { id, voucherNumber } = result;
|
||||
|
||||
// TODO
|
||||
// if ($ausweis->erledigt != 2) {$ausweis->erstellungsdatum = date("Y-m-d H:i:s");}
|
||||
// $ausweis->erledigt = 2;
|
||||
// $ausweis->save();
|
||||
await prisma.rechnung.update({
|
||||
where: {
|
||||
id: rechnung.id
|
||||
},
|
||||
data: {
|
||||
lex_office_id: id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const pdfAusweis = await getAnsichtsausweis(
|
||||
ausweis,
|
||||
|
||||
@@ -3,6 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { adminMiddleware, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { hashPassword } from "#lib/password.js";
|
||||
import { createLexOfficeCustomer } from "#lib/server/lexoffice.js";
|
||||
import { sendRegisterMail } from "#lib/server/mail/registrierung.js";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
@@ -117,6 +118,17 @@ export const PUT = defineApiRoute({
|
||||
}
|
||||
})
|
||||
|
||||
const lex_office_id = await createLexOfficeCustomer(user);
|
||||
|
||||
await prisma.benutzer.update({
|
||||
where: {
|
||||
id: user.id
|
||||
},
|
||||
data: {
|
||||
lex_office_id
|
||||
}
|
||||
})
|
||||
|
||||
await sendRegisterMail(user)
|
||||
|
||||
return { id }
|
||||
|
||||
Reference in New Issue
Block a user