<?php
/**
* Created by PhpStorm.
*/
namespace App\Services;
use App\Entity\AvoirFactureFinance;
use App\Entity\DocUpload;
use App\Entity\Etap1;
use App\Entity\Etap160;
use App\Entity\Etap2;
use App\Entity\Etap3;
use App\Entity\Etap4;
use App\Entity\Etap5;
use App\Entity\Etap6;
use App\Entity\Etap7;
use App\Entity\Etap8;
use App\Entity\Etap9;
use App\Entity\Etap10;
use App\Entity\Etap11;
use App\Entity\Etap12;
use App\Entity\Etap13;
use App\Entity\Etap14;
use App\Entity\Etap15;
use App\Entity\Etap16;
use App\Entity\Etap17;
use App\Entity\Etap18;
use App\Entity\Etap19;
use App\Entity\Etap20;
use App\Entity\Etap21;
use App\Entity\Etap22;
use App\Entity\Etaps;
use App\Entity\EtapsCategory;
use App\Entity\FactureFinance;
use App\Entity\Avoir;
use App\Entity\Fournisseur;
use App\Entity\FournisseurProject;
use App\Entity\Project;
use App\Entity\ProjectEdit;
use App\Entity\ProjectFactureFinance;
use App\Entity\Rib;
use App\Entity\Spv;
use App\Entity\User;
use App\Form\AvoirType;
use App\Form\FactureFinanceType;
use App\Form\ProjectEditType;
use App\Form\ProjectType;
use App\Form\UserType;
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
use Kunnu\Dropbox\Exceptions\DropboxClientException;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Spipu\Html2Pdf\Html2Pdf;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Twig\Environment;
use App\Entity\Centrale;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class FournisseurService
{
private $em;
private $trans;
private $params;
private $security;
private $session;
private $twig;
private $notification;
public function __construct(
Environment $twig,
SessionInterface $session,
Security $security,
ParameterBagInterface $params,
EntityManagerInterface $em,
TranslatorInterface $trans,
ValidatorInterface $validator,
FlashBagInterface $flashBag,
UserPasswordEncoderInterface $passwordEncoder,
Notifications $notifications,
FormFactoryInterface $form,
RouterInterface $router
) {
$this->em = $em;
$this->trans = $trans;
$this->params = $params;
$this->security = $security;
$this->session = $session;
$this->twig = $twig;
$this->validator = $validator;
$this->form = $form;
$this->flashBag = $flashBag;
$this->passwordEncoder = $passwordEncoder;
$this->notification = $notifications;
$this->router = $router;
}
public function importAuto(){
$path = '/altarea/fournisseurs';
$ftp_server="162.19.120.192";
$ftp_user_name="altarea-prod";
$ftp_user_pass="E_AeX_red2xi2vf1";
$dateJour = new \DateTime('now', new \DateTimeZone('Europe/Paris'));
$dateJour->modify('-3 days');
$conn_id = ftp_ssl_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
$contents = ftp_mlsd($conn_id, $path);
$results = array();
foreach ($contents as $content) {
if((int)($dateJour->format('Ymd').'000000') < (int)$content['modify']){
$results[] = array('name' => $content['name'], 'timestamp' => $content['modify']);
}
}
usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; });
$file = null;
$files = [];
ftp_close($conn_id);
if($results) {
foreach ($results as $result) {
$conn_id = ftp_ssl_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
$name = $result['name'];
$namePos = strpos($name, 'ERPI-');
if ($namePos !== false) {
if (ftp_get($conn_id, $this->params->get('fournisseur_altarea_import_directory') . "/" . $name, $path . '/' . $name, FTP_BINARY)) {
$file = $this->params->get('fournisseur_altarea_import_directory') . "/" . $name;
$files[]=$file;
} else {
return false;
}
}
ftp_close($conn_id);
}
}
if($files){
foreach ($files as $item){
if($item && file_exists($item)){
$array = [];
$flag = true;
$i = 0;
$header = [];
$fichier = file($item);
foreach ($fichier as $line_num => $line) {
// if($line_num == 0 ){
// continue;
// }
$colonnes = explode('|',$line);
if($flag) {
$header = [];
foreach ($colonnes as $key1 => $cell) {
$header[] = trim($cell);
}
$flag = false;
continue;
}
foreach ($colonnes as $key => $cell) {
$array[$i][$header[$key]] = trim(htmlspecialchars($cell));
}
$i++ ;
}
if($array){
foreach ($array as $item){
$fournisseur = null;
$isModif = true;
if(isset($item['CodeFournisseur']) && $item['CodeFournisseur']){
$fournisseurs = $this->em->getRepository(Fournisseur::class)->findNotArchiveByCode($item['CodeFournisseur']);
if(!$fournisseurs){
if(isset($item['Adresse messagerie 1']) && $item['Adresse messagerie 1']){
$fournisseurs = $this->em->getRepository(Fournisseur::class)->findBy(['email'=>$item['Adresse messagerie 1']]);
}
}
}
if($fournisseurs) {
foreach ($fournisseurs as $fournisseur) {
$this->updateOrAddFournissuerByFichier($item, $fournisseur);
}
}else{
$fournisseur = new Fournisseur();
$isModif = false;
$this->updateOrAddFournissuerByFichier($item, $fournisseur);
}
}
}
}
}
}
}
private function updateOrAddFournissuerByFichier($item,$fournisseur){
if($fournisseur->getName()){
}else{
if(isset($item['Raison sociale']) && $item['Raison sociale']){$fournisseur->setName($item['Raison sociale']);}
}
if(isset($item['CodeFournisseur']) && $item['CodeFournisseur']){$fournisseur->setCodeFournisseur($item['CodeFournisseur']);}
if(isset($item['Adresse messagerie 1']) && $item['Adresse messagerie 1']){$fournisseur->setEmail($item['Adresse messagerie 1']);}
if(isset($item['Code pays ISO']) && $item['Code pays ISO']){$fournisseur->setCountryCode($item['Code pays ISO']);}
if(isset($item['Code postal']) && $item['Code postal']){$fournisseur->setCodePostal($item['Code postal']);}
if(isset($item['Ville']) && $item['Ville']){$fournisseur->setCity($item['Ville']);}
if(isset($item['Rue ou voie']) && $item['Rue ou voie']){$fournisseur->setRueVoie($item['Rue ou voie']);}
if(isset($item['Téléphone 1']) && $item['Téléphone 1']){$fournisseur->setTel($item['Téléphone 1']);}
if(isset($item['Complément Siret']) && $item['Complément Siret']){$fournisseur->setComplementSiret($item['Complément Siret']);}
if(isset($item['Boite postale ou Commune']) && $item['Boite postale ou Commune']){$fournisseur->setBoitePostaleCommune($item['Boite postale ou Commune']);}
if(isset($item['CodeBlocage']) && $item['CodeBlocage']){
$fournisseur->setCodeBlocage($item['CodeBlocage']);
}
if(isset($item['Code NAF (APE)']) && $item['Code NAF (APE)']){$fournisseur->setCodeNaf($item['Code NAF (APE)']);}
if(isset($item["Complément d'adresse"]) && $item["Complément d'adresse"]){$fournisseur->setComplementAdresse($item["Complément d'adresse"]);}
if(isset($item['Complément Identification']) && $item['Complément Identification']){$fournisseur->setComplementIdenetification($item['Complément Identification']);}
if(isset($item['Devise']) && $item['Devise']){$fournisseur->setDevise($item['Devise']);}
if(isset($item['Forme juridique']) && $item['Forme juridique']){$fournisseur->setFormuleJuridique($item['Forme juridique']);}
if(isset($item['Inscription au RCS ou RM']) && $item['Inscription au RCS ou RM']){$fournisseur->setRcsRm($item['Inscription au RCS ou RM']);}
if(isset($item['Téléphone 2']) && $item['Téléphone 2']){$fournisseur->setTel2($item['Téléphone 2']);}
if(isset($item['Télécopie']) && $item['Télécopie']){$fournisseur->setTelecopie($item['Télécopie']);}
if(isset($item['Numéro de TVA intracommunautaire']) && $item['Numéro de TVA intracommunautaire']){$fournisseur->setTvaIntracommunautaire($item['Numéro de TVA intracommunautaire']);}
if(isset($item['Code mode reglt']) && $item['Code mode reglt']){$fournisseur->setCodeModeReglt($item['Code mode reglt']);}
if(isset($item['ReverseFactoring']) && $item['ReverseFactoring']){$fournisseur->setReverseFactoring($item['ReverseFactoring']);}
if(isset($item['TVA Débit']) && $item['TVA Débit']){$fournisseur->setTvaDebit($item['TVA Débit']);}
$fournisseur->setIsFlux(true);
$fournisseur->setIsEnabled(true);
$this->em->persist($fournisseur);
$this->em->flush();
if(isset($item['IBAN']) && $item['IBAN']){
$ribs = $this->em->getRepository(Rib::class)->findBy(['fournisseur'=>$fournisseur->getId()]);
$rib = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur'=>$fournisseur->getId(),'iban'=>$item['IBAN']]);
if(!$rib){
$rib = new Rib();
}
$rib->setFournisseur($fournisseur);
$rib->setIsDefault(true);
if(isset($item['Code BIC']) && $item['Code BIC']){ $rib->setBic($item['Code BIC']);}
if(isset($item['IBAN']) && $item['IBAN']){ $rib->setIban($item['IBAN']);}
if(isset($item['Clé RIB']) && $item['Clé RIB']){ $rib->setCleRib($item['Clé RIB']);}
if(isset($item['Code guichet']) && $item['Code guichet']){ $rib->setCodeGuichet($item['Code guichet']);}
if(isset($item['Code banque']) && $item['Code banque']){ $rib->setCodeBanque($item['Code banque']);}
if(isset($item['Numéro de compte']) && $item['Numéro de compte']){ $rib->setNumeroCompte($item['Numéro de compte']);}
if(isset($item['Domiciliée à']) && $item['Domiciliée à']){ $rib->setDomiiciliee($item['Domiciliée à']);}
if(isset($item['RIB Actif'])){
if(trim($item['RIB Actif']) == 'O'){
if($ribs){
foreach ($ribs as $ribItem){
$ribItem->setIsDefault(false);
$this->em->persist($ribItem);
$this->em->flush();
}
}
$rib->setIsActive(true);
$rib->setIsDefault(true);
}elseif ($item['RIB Actif'] == 'N'){
$rib->setIsActive(false);
$rib->setIsDefault(false);
}
}
$this->em->persist($rib);
$this->em->flush();
}
}
public function checkFournisseurRibActive($fournisseur){
$isActive = false;
if($fournisseur){
$ribs = $this->em->getRepository(Rib::class)->findBy(['fournisseur'=>$fournisseur->getId()]);
if($fournisseur->getIsFlux()){
foreach ($ribs as $rib){
if($rib->getIsActive()){
$isActive = true;
}
}
}else{
if($ribs){
$isActive = false;
}
}
}
return $isActive;
}
public function importAutoManuel(){
$files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040210-30-17.txt";
$files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040211-13-02.txt";
$files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040212-05-05.txt";
$files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040212-10-14.txt";
$files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040215-00-22.txt";
$files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040218-00-25.txt";
foreach ($files as $file) {
if ($file && file_exists($file)) {
$array = [];
$flag = true;
$i = 0;
$header = [];
$fichier = file($file);
foreach ($fichier as $line_num => $line) {
// if($line_num == 0 ){
// continue;
// }
$colonnes = explode('|', $line);
if ($flag) {
$header = [];
foreach ($colonnes as $key1 => $cell) {
$header[] = trim($cell);
}
$flag = false;
continue;
}
foreach ($colonnes as $key => $cell) {
$array[$i][$header[$key]] = trim(htmlspecialchars($cell));
}
$i++;
}
if ($array) {
foreach ($array as $item) {
$fournisseur = null;
$isModif = true;
if (isset($item['CodeFournisseur']) && $item['CodeFournisseur']) {
$fournisseurs = $this->em->getRepository(Fournisseur::class)->findNotArchiveByCode($item['CodeFournisseur']);
if (!$fournisseurs) {
if (isset($item['Adresse messagerie 1']) && $item['Adresse messagerie 1']) {
$fournisseurs = $this->em->getRepository(Fournisseur::class)->findBy(['email' => $item['Adresse messagerie 1']]);
}
}
}
if ($fournisseurs) {
foreach ($fournisseurs as $fournisseur) {
$this->updateOrAddFournissuerByFichier($item, $fournisseur);
}
} else {
$fournisseur = new Fournisseur();
$isModif = false;
$this->updateOrAddFournissuerByFichier($item, $fournisseur);
}
}
}
}
}
}
public function getUserNotaire(){
$notaires = $this->em->getRepository(User::class)->getNotaires();
return $notaires ;
}
public function getUserByTitreIntervenant($titre){
$fournisseurProjects = $this->em->getRepository(FournisseurProject::class)->getFournisseurProjectByTitre($titre);
$fournisseurs = [];
if($fournisseurProjects){
foreach ($fournisseurProjects as $fournisseurProject){
$fournisseurs[] = $fournisseurProject;
}
}
return $fournisseurs ;
}
}