Files
CdsConnector/src/Helper/Hiltes.php
Marko d661a2cbbc
Some checks failed
continuous-integration/drone/push Build is failing
add authentication
2023-11-10 15:12:34 +01:00

448 lines
19 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Helper;
use App\Entity\Order;
use App\Repository\OrderRepository;
use Doctrine\Common\Collections\Criteria;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
class Hiltes
{
// init file system
protected $fsObject;
protected $current_dir_path;
protected $apiKey;
protected $hiltesApiHash = '';
protected $hiltesUsr;
protected $hiltesPass;
protected $hiltesApiUrl;
public function __construct(private OrderRepository $orderRepository)
{
$this->fsObject = new Filesystem();
$this->current_dir_path = getcwd();
$this->hiltesApiUrl = $_ENV['HILTES_API_URL'];
$this->hiltesUsr = $_ENV['HILTES_API_USER'];
$this->hiltesPass = $_ENV['HILTES_API_PASS'];
}
public function import()
{
$finder = new Finder();
$finder->files()->in($this->current_dir_path . "/hiltes/h2c/");
foreach ($finder as $file) {
$contents = $file->getContents();
var_dump($contents);
}
}
/**
* @param string $data
* @return void
*/
public function export(string $data)
{
try {
$new_file_path = $this->current_dir_path . "/hiltes/c2h/" . $this->createFileName();
if (!$this->fsObject->exists($new_file_path)) {
$this->fsObject->touch($new_file_path);
$this->fsObject->chmod($new_file_path, 0777);
$this->fsObject->dumpFile($new_file_path, $data);
}
} catch (IOExceptionInterface $exception) {
echo "Error creating file at" . $exception->getPath();
}
}
/**
* Aufbau des Dateinamens:
* WU + Datum(TTMM) + Fortlaufendenummer (x2) + “.“ +Filialnummer(x4)
* Beispieldateiname : WU220401.0001
*/
public function createFileName(): string
{
$date = date('dm');
$number = '01';
$filial = '0001';
return 'WU' . $date . $number . '.' . $filial;
}
public function createRequest($orderData)
{
dump($orderData);
$data = array();
$this->loginToHiltes('', '');
$order = $this->orderRepository->findOneBy(array('orderId' => $orderData->getOrderId()));
dump($order);
/**
* @var Order
*/
if ($order) {
//foreach ($orders as $order) {
// if ($order->getStatus() > 0) continue;
$tA = $order->getData();#json_decode($order->getData());
#$tA['orderdate'] = "2023-08-30T12:05:24.000Z";
dump($tA);
#dd($order->getData());
#dd(array(
# 'orderdate'=> $tA['orderdate'],
# 'time'=> strtotime($tA['orderdate']),
# 'gmdate '=> gmdate ('d-m-Y\TH:i:s.v\Z',strtotime($tA['orderdate'])),
#));
#*** Umkonvertieren des Datumstings *****************
$tA['orderdate'] = gmdate('Y-m-d\TH:i:s.v\Z', $tA['orderdate'] ? strtotime($tA['orderdate']) : time());
#****
$arr = array(
'SalesDate' => $tA['orderdate'],
"BranchNumber" => 8, #Die Filialnummer
"ShopNumber" => 1, #Die Shopnummer
"DistributionChannel" => 5, #Der Vertriebskanal
'SaleList' => array(),
'CustomerList' => array(),
);
#*** Items ***************
if (!empty($tA['data']) && is_array($tA['data'])) {
# Noch nötig
# "CalculatedSellingPrice" => 0, #X Kalkulierter Verkaufspreis
# "AchievedSalesPrice" => 0, #X Erzielter Verkaufspreis
$tSalNr = array();
foreach ($tA['data'] as $v) {
$SalesNumber = (!empty($v['gtin']) ? $v['gtin'] : $v['sku']);
if (preg_match('/^([0-9]+)_/', $SalesNumber, $tP)) {
$SalesNumber = $tP[1];
}
if (isset($tSalNr[$SalesNumber])) {
$tSalNr[$SalesNumber]++;
$SalesNumber .= $tSalNr[$SalesNumber];
} else {
$tSalNr[$SalesNumber] = 0;
}
#dump($SalesNumber);
#********
$v['CalculatedSellingPrice'] = 100.00;
$v['AchievedSalesPrice'] = 90.00;
$arr['SaleList'][] = array(
"SalesLabel" => 'Ean',#$v['sku'],#X
"SalesLabelNumber" => $SalesNumber,#X
"SalesGoodsGroupNumber" => 0,
"SizeDescription" => '',#"string",
"CustomerNumber" => 0,
"TypeOfEstate" => 0,
"Amount" => $v['menge'],#X
"CalculatedSellingPrice" => $v['CalculatedSellingPrice'], #X Kalkulierter Verkaufspreis
"AchievedSalesPrice" => $v['AchievedSalesPrice'], #X Erzielter Verkaufspreis
"TransactionType" => "Sale", #X Die Vorgangsart Sale=Verkauf Exchange=Umtausch / Storno
"ReceiptNumber" => 0, #Die Belegnummer
"DateOfSale" => $tA['orderdate'],#X das Verkaufsdatum mit Verkaufszeit
"PaymentMethod" => 'Invoice',#X "CreditCard",
"Currency" => 'EUR',#X "string",
"Unit" => "Piece",#X
"DistributionChannel" => 5,
);
}
}
#*** Kundne *******************************
$arr['CustomerList'][] = array(
"CustomerNumber" => $tA['kundennummer'], # Fake Daten
"Surname" => 'MAX',#"string",
"Forename" => 'MUSTERMANN',#"string",
"AddressCity" => 'ERFURT',#"string",
"AddressZipCode" => '99084', "string",
"AddressStreet" => 'MusterStrasse 22',#"string",
"AddressCountry" => 'DE',#"string",
#*** Nicht nötig
#"CardNumber" => 0,
#"SalutionNumber" => 0,
#"PostOfficeBox" => '',#"string",
#"PostOfficeBoxZipCode" => '',#"string",
#"Title" => '',#"string",
#"PhoneNumber1" => '',#"string",
#"PhoneNumber2" => '',#"string",
#"FaxNumber" => '',#"string",
#"BirthDay" => '',#"2023-09-14T11:54:26.708Z",
#"Gender" => 'Male',
#"EmailAddress" => '',#"string",
#"Discount" => 0,
#"Limit" => 0,
#"LockMark" => 'Unblocked',
#"DubiousMark" => 'Undubious',
#"DubiousText" => '',#"string",
#"DirectDebit" => '',#true,
#"BankName1" => '',#"string",
#"BankAccountNumber1" => '',#"string",
#"BankCodeNumber1" => '',#"string",
#"BankName2" => '',#"string",
#"BankAccountNumber2" => '',#"string",
#"BankCodeNumber2" => '',#"string",
#"BankName3" => '',#"string",
#"BankAccountNumber3" => '',#"string",
#"BankCodeNumber3" => '',#"string",
#"CreditcardNumber1" => '',#"string",
#"CreditcardNumber2" => '',#"string",
#"CreditcardNumber3" => '',#"string",
#"CreditcardNumber4" => '',#"string",
#"ChangeIndicator" => '',#true,
#"Newsletter" => '',#true,
#"Password" => '',#"string",
#"AdBan" => '',#true
);
dd($arr);
$data = $this->createJson($arr);
// }
return $this->sendOrderToHiltes($data);
}
}
/**
* @param $usr
* @param $pass
* @return bool
*/
public function loginToHiltes($usr, $pass): bool
{
$url = $this->hiltesApiUrl . '/api/Authentication/authenticate';
$param = array(
'Username' => (!empty($usr) ? $usr : $this->hiltesUsr),
'Password' => (!empty($pass) ? $pass : $this->hiltesPass),
# 'parse_mode' => 'html',
# 'disable_notification' => $disable_notification,
# 'text' => $message_text
);
$r = $this->sendToHiltes($url, $param);
$t = json_decode($r, true);
if ($t['Success']) {
$this->hiltesApiHash = $t['Data'];
return true;
} else {
dump($r);
dump('Login Error ' . __LINE__);
return false;
}
}
public function sendToHiltes($url, $param, $auth = false)
{
if ($auth) {
#var_export($this->hiltesApiHash);
#var_export($url);
#var_export($param);
}
$ch = curl_init($url);
if ($auth) {
$authorization = "Authorization: Bearer " . $this->hiltesApiHash;
} else {
$authorization = false;
}
#dump($param);
# Setup request to send json via POST.
$payload = json_encode($param);
#dump($payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', $authorization));
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
# Return response instead of printing.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# Send request.
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
public function createJson($data)
{
$arr = array(
'File' => array(
"BranchNumber" => $data['BranchNumber'], #Die Filialnummer
"ShopNumber" => $data['ShopNumber'], #Die Shopnummer
"SalesDate" => $data['SalesDate'], #Das Umsatzdatu
"DistributionChannel" => $data['DistributionChannel'] #Der Vertriebskanal
),
'SaleList' => array(),
'CustomerList' => array(),
);
#*** Sale List
if (!empty($data['SaleList'])) {
foreach ($data['SaleList'] as $v) {
$arr['SaleList'][] = array(
"SalesLabel" => $v['SalesLabel'], #Das Etikettkennzeichen
"SalesLabelNumber" => $v['SalesLabelNumber'], #Etikettennummer
"SalesGoodsGroupNumber" => $v['SalesGoodsGroupNumber'],
#"SizeDescription" => $v['SizeDescription'],
#"CustomerNumber" => $v['CustomerNumber'],
#"TypeOfEstate" => $v['TypeOfEstate'],
"Amount" => $v['Amount'],
"CalculatedSellingPrice" => $v['CalculatedSellingPrice'],
"AchievedSalesPrice" => $v['AchievedSalesPrice'],
"TransactionType" => $v['TransactionType'],
#"ReceiptNumber" => $v['ReceiptNumber'],
"DateOfSale" => $data['SalesDate'],#"2023-09-14T11:54:26.708Z",
"PaymentMethod" => $v['PaymentMethod'],
"Currency" => $v['Currency'],
"Unit" => $v['Unit'],
"DistributionChannel" => $v['DistributionChannel']
);
}
}
#*** Sale List
if (true) {
foreach ($data['CustomerList'] as $v) {
$arr['CustomerList'][] = array(
"CustomerNumber" => $v['CustomerNumber'],
#"CardNumber" => $v['CardNumber'],
#"SalutionNumber" => $v['SalutionNumber'],
"Surname" => $v['Surname'],
"Forename" => $v['Forename'],
"AddressCity" => $v['AddressCity'],
"AddressZipCode" => $v['AddressZipCode'],
"AddressStreet" => $v['AddressStreet'],
"AddressCountry" => $v['AddressCountry'],
#"PostOfficeBox" => $v['PostOfficeBox'],
#"PostOfficeBoxZipCode" => $v['PostOfficeBoxZipCode'],
#"Title" => $v['Title'],
#"PhoneNumber1" => $v['PhoneNumber1'],
#"PhoneNumber2" => $v['PhoneNumber2'],
#"FaxNumber" => $v['FaxNumber'],#"string",
#"BirthDay" => $v['BirthDay'],
#"Gender" => $v['Gender'],
#"EmailAddress" => $v['EmailAddress'],
#"Discount" => $v['Discount'],
#"Limit" => $v['Limit'],
#"LockMark" => $v['LockMark'],
#"DubiousMark" => $v['DubiousMark'],
#"DubiousText" => $v['DubiousText'],
#"DirectDebit" => $v['DirectDebit'],
#"BankName1" => $v['BankName1'],#"string",
#"BankAccountNumber1" => $v['BankAccountNumber1'],#"string",
#"BankCodeNumber1" => $v['BankCodeNumber1'],#"string",
#"BankName2" => $v['BankName2'],#"string",
#"BankAccountNumber2" => $v['BankAccountNumber2'],#"string",
#"BankCodeNumber2" => $v['BankCodeNumber2'],#"string",
#"BankName3" => $v['BankName3'],#"string",
#"BankAccountNumber3" => $v['BankAccountNumber3'],#"string",
#"BankCodeNumber3" => $v['BankCodeNumber3'],#"string",
#"CreditcardNumber1" => $v['CreditcardNumber1'],#"string",
#"CreditcardNumber2" => $v['CreditcardNumber2'],#"string",
#"CreditcardNumber3" => $v['CreditcardNumber3'],#"string",
#"CreditcardNumber4" => $v['CreditcardNumber4'],#"string",
#"ChangeIndicator" => $v['ChangeIndicator'],
#"Newsletter" => $v['Newsletter'],
#"Password" => $v['Password'],
#"AdBan" => $v['AdBan']
);
}
}
#dump($arr);
return $arr;
}
public function sendOrderToHiltes($data)
{
$url = $this->hiltesApiUrl . '/api/WebSale/import';
$param = $data;
dump($param);
$r = $this->sendToHiltes($url, $param, true);
$t = json_decode($r, true);
if ($t['Success']) {
return true;
} else {
dump($r);
return false;
}
}
public function checkData($data)
{
$umsatz = [
'EtikettKz' => 'E', // E = EAN, I = Ident, W = Warengruppe
'Etikettnummer' => $data['sku'], // mit führenden Nullen bei Satzart „W“ die Warengruppennummer
'Warengruppennummer' => '0000', // mit führenden Nullen
'Groessenbez' => '',
'Kundennummer' => '00000000000000000000',
'Nachlassart' => '0',
'Menge' => '00000000000000000000', //7 Vor und 2 Nachkommastellen (Darstellung ohne Komma mit führenden Nullen).
'Kalk-VkPreis' => '00000000000000000000', //7 Vor und 2 Nachkommastellen (Darstellung ohne Komma mit führenden Nullen).
'Vorgangsart' => 'v', // u = Umtausch, v = Verkauf
'Belegnummer' => '00000000000000000000', // mit führenden Nullen
'Verkaufsdatum' => '00000000', // YYYYMMTT
'Verkaufszeit' => '000000', // HHMM
'Zahlungsart' => 2, // 1 = Kreditkarte, 2 = Rechnung, 3 = Lastschrift, 4 = Gutschein, 5 = Gutschrift, 6 = Mischzahlung
'Währung' => 'EUR', // EUR
'Einheit' => 'S', // S= Stück, M = Meter
'Vertriebskanal' => '0000', // Vertriebskanäle werden über das Stammdatenprogramm angelegt und müssen mit der hinterlegten Nummer aus dem Webshop übergeben werden
];
$kunde = [
'Kunden-Nummer' => '00000000000000000000', // mit führenden Nullen
'Kartennummer' => '00000000000000000000', // mit führenden Nullen
'Nachname' => '00000000000000000000', // mit führenden Nullen
'Vorname' => '00000000000000000000', // mit führenden Nullen
'Ort' => '00000000000000000000', // mit führenden Nullen
'PLZ' => '00000000000000000000', // mit führenden Nullen
'Straße' => '00000000000000000000', // mit führenden Nullen
'Land' => '00000000000000000000', // mit führenden Nullen
'Postfach' => '00000000000000000000', // mit führenden Nullen
'PostfachPLZ' => '00000000000000000000', // mit führenden Nullen
'Titel' => '00000000000000000000', // mit führenden Nullen
'Telefon1' => '00000000000000000000', // mit führenden Nullen
'Telefon2' => '00000000000000000000', // mit führenden Nullen
'Telefax' => '00000000000000000000', // mit führenden Nullen
'Geburtsdatum' => '00000000', // YYYYMMDD
'Geschlecht' => '00000000000000000000', // s = sonstiges, m = männlich, w = weiblich
'Email' => '00000000000000000000', // mit führenden Nullen
'Rabatt' => '00000000000000000000', // mit führenden Nullen
'Limit' => '00000000000000000000', // mit führenden Nullen
'Sperr Kennzeichen' => '0', // 0 = nicht gesperrt, 1 = gesperrt
'Dubios Kennzeichen' => '0', // 0 = nicht dubios, 1 = dubios
'Bankeinzug' => '0', // 0 = kein Bankeinzug, 1 = Bankeinzug
'BankName1' => '00000000000000000000', // mit führenden Nullen
'Konto1' => '00000000000000000000', // mit führenden Nullen
'BLZ1' => '00000000000000000000', // mit führenden Nullen
'BankName2' => '00000000000000000000', // mit führenden Nullen
'Konto2' => '00000000000000000000', // mit führenden Nullen
'BLZ2' => '00000000000000000000', // mit führenden Nullen
'BankName3' => '00000000000000000000', // mit führenden Nullen
'Konto3' => '00000000000000000000', // mit führenden Nullen
'BLZ3' => '00000000000000000000', // mit führenden Nullen
'Kreditkartennummer Kreditkarte1' => '', // mit führenden Nullen
'Kreditkartennummer Kreditkarte2' => '', // mit führenden Nullen
'Kreditkartennummer Kreditkarte3' => '', // mit führenden Nullen
'Kreditkartennummer Kreditkarte4' => '', // mit führenden Nullen
'Änderungskennzeichen' => '0', // 0 = Kunde ist OK, 1 = Änderung
'Newsletter' => '0', // 0 = kein Newsletter, 1 = Newsletter
'Passwort' => '', //
'Werbesperre' => '0', // 0 = keine Werbung, 1 = Werbung
];
}
}