浏览代码

Import Facebook Formulaires

Mathieu Moulin 2 年之前
父节点
当前提交
2be1626b22
共有 3 个文件被更改,包括 450 次插入4 次删除
  1. 0 0
      data/facebook_leads/.gitkeep
  2. 12 2
      src/send/devis_form.inc.php
  3. 438 2
      src/send/facebook_devis.inc.php

+ 0 - 0
data/facebook_leads/.gitkeep


+ 12 - 2
src/send/devis_form.inc.php

@@ -143,7 +143,7 @@ function devis_form_send($id, $options=NULL)
         }
         $societe = [
             //'rowid' => NULL,
-            'nom' => $a['firstname'].' '.$a['lastname'],
+            'nom' => $a['lastname'].' '.$a['firstname'],
             'name_alias' => NULL,
             'entity' => 1,
             'ref_ext' => NULL,
@@ -249,6 +249,16 @@ function devis_form_send($id, $options=NULL)
         }
     };
 
+    $origin = 'SRC_PS_DEVIS';
+    $sql = 'SELECT c.rowid
+        FROM `'.DB_P_PREFIX.'c_input_reason` c
+        WHERE cl.`code` = "'.$origin.'"';
+    $q = DB::d_select($sql);
+    if ($q->num_rows)
+        list($fk_origin) = $q->fetch_row();
+    else
+        $fk_origin = 0;
+
     $propal = [
         //'rowid' => NULL,
         'ref' => '(PROV)',
@@ -292,7 +302,7 @@ function devis_form_send($id, $options=NULL)
         'fk_shipping_method' => NULL,
         'fk_warehouse' => NULL,
         'fk_availability' => 0,
-        'fk_input_reason' => 0,
+        'fk_input_reason' => $fk_origin,
         'fk_incoterms' => 0,
         'location_incoterms' => '',
         'import_key' => NULL,

+ 438 - 2
src/send/facebook_devis.inc.php

@@ -2,9 +2,445 @@
 
 //var_dump($_GET); var_dump($_POST); var_dump($_FILES);
 
+
+class csv_file
+{
+	const FOLDER = '../data/facebook_leads';
+	
+	const FIELDS = [
+		'23851183027400742' => [
+			'id',
+			'created_time',
+			'ad_id',
+			'ad_name',
+			'adset_id',
+			'adset_name',
+			'campaign_id',
+			'campaign_name',
+			'form_id',
+			'form_name',
+			'is_organic',
+			'platform',
+			'dimensions_de_votre_piscine_?',
+			'forme_de_votre_piscine_?',
+			'présence_d\'un_escalier_?',
+			'votre_traitement_d\'eau_?',
+			'quel_type_de_volet_vous_intéresse_?',
+			'nom_de_famille',
+			'prénom',
+			'numéro_de_téléphone',
+			'adresse',
+			'ville',
+			'code_postal',
+			'e-mail',
+		],
+	];
+
+	Const PROPAL_ORIGIN = 'SRC_FB_FORM';
+	protected static $fk_origin;
+
+	static function __init()
+	{
+		$sql = 'SELECT i.rowid
+			FROM `'.DB_D_PREFIX.'c_input_reason` i
+			WHERE i.`code` = "'.static::PROPAL_ORIGIN.'"
+				AND i.active=1';
+		//echo $sql;
+		$q = DB::d_select($sql);
+		if ($q->num_rows)
+			list(static::$fk_origin) = $q->fetch_row();
+	}
+
+	static function file_read($filename)
+	{
+		$lines = [];
+
+		$file = fopen($filename, 'r');
+		while (!feof($file) ) {
+			$lines[] = fgetcsv($file, NULL, ';');
+		}
+		fclose($file);
+
+		return $lines;
+	}
+
+	static function file_import($filename)
+	{
+		$newfilename = static::FOLDER.'/'.time().'.csv';
+		move_uploaded_file($filename, $newfilename);
+		var_dump($newfilename);
+
+		$lines = static::file_read($newfilename);
+		if (empty($lines)) {
+			echo '<p>Fichier vide</p>';
+			return;
+		}
+		$cols = array_shift($lines);
+		var_dump($cols);
+		if (empty($lines)) {
+			echo '<p>Tableau vide</p>';
+			return;
+		}
+		//var_dump($lines);
+
+		$adset_id = $lines[0][4];
+		if (empty(static::FIELDS[$adset_id])) {
+			echo '<p>Paramétrage inconnu</p>';
+			return;
+		}
+
+		if ($cols !== static::FIELDS[$adset_id]) {
+			echo '<p>Colonnes non conformes</p>';
+			return;
+		}
+
+		foreach($lines as $line) {
+			static::line_import($line);
+		}
+
+	}
+
+	static function line_import($line)
+	{
+		//var_dump($line);
+		if (empty($line)) {
+			echo '<p>Ligne vide</p>';
+			return;
+		}
+		$adset_id = $line[4];
+
+		$row = [];
+		foreach(static::FIELDS[$adset_id] as $i=>$name) {
+			$row[$name] = $line[$i];
+		}
+
+		// Recherche import déjà effectué
+
+		$sql = 'SELECT 1
+			FROM '.DB_D_PREFIX.'propal_extrafields p2
+			WHERE p2.fk_origin_id="'.$row['id'].'"';
+		$q = DB::D_select($sql);
+		if($q->num_rows) {
+			echo '<p>Déjà importé : ID '.$row['id'].'</p>';
+			return;
+		}
+
+		// Recherche client déjà présent
+
+		$sql = 'SELECT c.*
+			FROM '.DB_D_PREFIX.'societe c
+			WHERE c.email LIKE "%'.$row['e-mail'].'%"
+			LIMIT 1';
+		$q = DB::D_select($sql);
+		if($societe=$q->fetch_assoc())
+			var_dump($societe);
+
+		// Recherche adresse déjà présente
+
+		$sql = 'SELECT c.*
+			FROM '.DB_D_PREFIX.'socpeople c
+			WHERE c.email LIKE "%'.$row['e-mail'].'%"
+			LIMIT 1';
+		$q = DB::D_select($sql);
+		if($socpeople=$q->fetch_assoc()) {
+			var_dump($socpeople);
+			if (empty($societe)) {
+				$societe = ['rowid'=>$socpeople['fk_soc']];
+			}
+		}
+
+		// Création Client
+
+		$ts = date('Y-m-d H:i:s');
+		$date = substr($ts, 0, 10);
+
+		if (empty($societe)) {
+			if (!empty($row['pays']) && is_string($row['pays'])) {
+				$sql = 'SELECT c.iso_code
+					FROM `'.DB_P_PREFIX.'country` c
+					INNER JOIN  `'.DB_P_PREFIX.'country_lang` cl ON cl.id_country=c.id_country
+					WHERE cl.`name` LIKE "'.DB::string_escape($row['pays']).'"';
+				$q = DB::p_select($sql);
+				if ($q->num_rows) {
+					list($code_pays) = $q->fetch_row();
+					$sql = 'SELECT rowid
+						FROM `'.DB_D_PREFIX.'c_country` c
+						WHERE c.`code` LIKE "'.DB::string_escape($code_pays).'"';
+					$q = DB::d_select($sql);
+					if ($q->num_rows)
+						list($fk_pays) = $q->fetch_row();
+					else
+						$fk_pays = 1;
+				}
+				else
+					$fk_pays = 1;
+			}
+			else {
+				$fk_pays = 1;
+			}
+			$societe = [
+				//'rowid' => NULL,
+				'nom' => $row['nom_de_famille'].' '.$row['prénom'],
+				'name_alias' => NULL,
+				'entity' => 1,
+				'ref_ext' => NULL,
+				'ref_int' => NULL,
+				'statut' => 0,
+				'parent' => NULL,
+				'status' => 1,
+				'code_client' => NULL,
+				'code_fournisseur' => NULL,
+				'code_compta' => NULL,
+				'code_compta_fournisseur' => NULL,
+				'address' => $row['adresse'],
+				'zip' => $row['code_postal'],
+				'town' => $row['ville'],
+				'fk_departement' => NULL,
+				'fk_pays' => $fk_pays,
+				'fk_account' => NULL,
+				'phone' => $row['numéro_de_téléphone'],
+				'fax' => NULL,
+				'url' => NULL,
+				'email' => $row['e-mail'],
+				'socialnetworks' => NULL,
+				'skype' => NULL,
+				'twitter' => NULL,
+				'facebook' => NULL,
+				'linkedin' => NULL,
+				'instagram' => NULL,
+				'snapchat' => NULL,
+				'googleplus' => NULL,
+				'youtube' => NULL,
+				'whatsapp' => NULL,
+				'fk_effectif' => NULL,
+				'fk_typent' => 0,
+				'fk_forme_juridique' => NULL,
+				'fk_currency' => NULL,
+				'siren' => '',
+				'siret' => NULL,
+				'ape' => NULL,
+				'idprof4' => '',
+				'idprof5' => '',
+				'idprof6' => '',
+				'tva_intra' => '',
+				'capital' => NULL,
+				'fk_stcomm' => 0,
+				'note_private' => NULL,
+				'note_public' => NULL,
+				'model_pdf' => NULL,
+				'prefix_comm' => NULL,
+				'client' => 1,
+				'fournisseur' => 0,
+				'supplier_account' => NULL,
+				'fk_prospectlevel' => '',
+				'fk_incoterms' => 0,
+				'location_incoterms' => NULL,
+				'customer_bad' => 0,
+				'customer_rate' => 0,
+				'supplier_rate' => 0,
+				'remise_client' => 0,
+				'remise_supplier' => 0,
+				'mode_reglement' => NULL,
+				'cond_reglement' => NULL,
+				'mode_reglement_supplier' => NULL,
+				'cond_reglement_supplier' => NULL,
+				'fk_shipping_method' => NULL,
+				'tva_assuj' => 1,
+				'localtax1_assuj' => NULL,
+				'localtax1_value' => 0,
+				'localtax2_assuj' => NULL,
+				'localtax2_value' => 0,
+				'barcode' => NULL,
+				'fk_barcode_type' => 0,
+				'price_level' => NULL,
+				'outstanding_limit' => NULL,
+				'order_min_amount' => NULL,
+				'supplier_order_min_amount' => NULL,
+				'default_lang' => NULL,
+				'logo' => NULL,
+				'logo_squarred' => NULL,
+				'canvas' => NULL,
+				'webservices_url' => NULL,
+				'webservices_key' => NULL,
+				'tms' => $ts,
+				'datec' => $ts,
+				'fk_user_creat' => sync::D_K_USER,
+				'fk_user_modif' => sync::D_K_USER,
+				'fk_multicurrency' => 0,
+				'multicurrency_code' => '',
+				'import_key' => NULL,
+				'transport_mode' => NULL,
+				'transport_mode_supplier' => NULL,
+				'fk_warehouse' => NULL,
+				'accountancy_code_sell' => NULL,
+				'accountancy_code_buy' => NULL,
+			];
+			$societe_extrafields = [
+				'p_lastname' => $row['nom_de_famille'],
+				'p_firstname' => $row['prénom'],
+				'p_company' => NULL,
+			];
+			var_dump($societe);
+			if ($id = DB::d_insert_row('societe', $societe)) {
+				$societe['rowid'] = $id;
+			}
+		};
+
+		/*
+			'dimensions_de_votre_piscine_?' => string '9x4,5' (length=5)
+			'forme_de_votre_piscine_?' => string 'rectangle' (length=9)
+			'présence_d'un_escalier_?' => string 'oui,_situé_sur_la_largeur_du_bassin' (length=36)
+			'votre_traitement_d'eau_?' => string 'electrolyseur_au_sel' (length=20)
+			'quel_type_de_volet_vous_intéresse_?' => string 'hors-sol' (length=8)
+		*/
+
+		$ref_client = 'Volet Piscine';
+		$demande_fields = [
+			'dimensions_de_votre_piscine_?',
+			'forme_de_votre_piscine_?',
+			'présence_d\'un_escalier_?',
+			'votre_traitement_d\'eau_?',
+			'quel_type_de_volet_vous_intéresse_?',
+		];
+		$demande = '';
+		foreach ($demande_fields as $f)
+			$demande .= $f.' : '.$row[$f]."<br />\r\n";
+
+		$propal = [
+			//'rowid' => NULL,
+			'ref' => '(PROV)',
+			'entity' => 1,
+			'ref_ext' => NULL,
+			'ref_int' => NULL,
+			'ref_client' => $ref_client,
+			'fk_soc' => $societe['rowid'],
+			'fk_projet' => NULL,
+			'tms' => $ts,
+			'datec' => $ts,
+			'datep' => $date,
+			'fin_validite' => NULL,
+			'date_valid' => NULL,
+			'date_signature' => NULL,
+			'date_cloture' => NULL,
+			'fk_user_author' => sync::D_K_USER,
+			'fk_user_modif' => NULL,
+			'fk_user_valid' => NULL,
+			'fk_user_signature' => NULL,
+			'fk_user_cloture' => NULL,
+			'fk_statut' => 0,
+			'price' => 0,
+			'remise_percent' => NULL,
+			'remise_absolue' => NULL,
+			'remise' => 0,
+			'total_ht' => 0,
+			'total_tva' => 0,
+			'localtax1' => 0,
+			'localtax2' => 0,
+			'total_ttc' => 0,
+			'fk_account' => NULL,
+			'fk_currency' => NULL,
+			'fk_cond_reglement' => NULL,
+			'fk_mode_reglement' => NULL,
+			'note_private' => NULL,
+			'note_public' => '',
+			'model_pdf' => 'azur',
+			'last_main_doc' => NULL,
+			'date_livraison' => NULL,
+			'fk_shipping_method' => NULL,
+			'fk_warehouse' => NULL,
+			'fk_availability' => 0,
+			'fk_input_reason' => static::$fk_origin,
+			'fk_incoterms' => 0,
+			'location_incoterms' => '',
+			'import_key' => NULL,
+			'extraparams' => NULL,
+			'fk_delivery_address' => NULL,
+			'fk_multicurrency' => 0,
+			'multicurrency_code' => 'EUR',
+			'multicurrency_tx' => 1,
+			'multicurrency_total_ht' => 0,
+			'multicurrency_total_tva' => 0,
+			'multicurrency_total_ttc' => 0,
+		];
+		$propal_extrafields = [
+			//'rowid' => NULL//
+			'tms' => $ts,
+			'fk_object' => NULL,
+			'fk_origin_id' => $row['id'],
+		];
+		var_dump($propal);
+		$propal_line = [
+			//'rowid' => NULL,
+			'fk_propal' => NULL,
+			'fk_parent_line' => NULL,
+			'fk_product' => NULL,
+			'label' => 'Votre demande',
+			'description' => $demande,
+			'fk_remise_except' => NULL,
+			'vat_src_code' => '',
+			'tva_tx' => 0,
+			'localtax1_tx' => 0,
+			'localtax1_type' => 0,
+			'localtax2_tx' => 0,
+			'localtax2_type' => 0,
+			'qty' => 0,
+			'remise_percent' => 0,
+			'remise' => 0,
+			'price' => NULL,
+			'subprice' => 0,
+			'total_ht' => 0,
+			'total_tva' => 0,
+			'total_localtax1' => 0,
+			'total_localtax2' => 0,
+			'total_ttc' => 0,
+			'product_type' => 9,
+			'date_start' => NULL,
+			'date_end' => NULL,
+			'info_bits' => 0,
+			'buy_price_ht' => 0,
+			'fk_product_fournisseur_price' => NULL,
+			'special_code' => 1790,
+			'rang' => 1,
+			'fk_unit' => NULL,
+			'fk_multicurrency' => NULL,
+			'multicurrency_code' => 'EUR',
+			'multicurrency_subprice' => 0,
+			'multicurrency_total_ht' => 0,
+			'multicurrency_total_tva' => 0,
+			'multicurrency_total_ttc' => 0,
+		];
+		var_dump($propal_line);
+	
+		if ($id = DB::d_insert_row('propal', $propal)) {
+			$propal['rowid'] = $id;
+			$propal['ref'] = '(PROV'.$id.')';
+			DB::d_update_row('propal', ['ref' => '(PROV'.$id.')'], ['rowid'=>$id]);
+	
+			$propal_line['fk_propal'] = $id;
+			DB::d_insert_row('propaldet', $propal_line);
+	
+			$propal_extrafields['fk_object'] = $id;
+			DB::d_insert_row('propal_extrafields', $propal_extrafields);
+	
+			// Fichiers joint
+			if (!empty($row['fileupload']) && file_exists(P_FOLDER_ROOT.'/upload/'.$row['fileupload'])) {
+				if (!file_exists(D_FOLDER_ROOT.'/documents/propale/'.$propal['ref'])) {
+					mkdir(D_FOLDER_ROOT.'/documents/propale/'.$propal['ref'], 0777);
+					chmod(D_FOLDER_ROOT.'/documents/propale/'.$propal['ref'], 0777);
+				}
+				copy(P_FOLDER_ROOT.'/upload/'.$row['fileupload'], D_FOLDER_ROOT.'/documents/propale/'.$propal['ref'].'/'.$propal['ref'].'-'.$row['fileupload']);
+				chmod(D_FOLDER_ROOT.'/documents/propale/'.$propal['ref'].'/'.$propal['ref'].'-'.$row['fileupload'], 0666);
+			}
+		}
+
+		var_dump($row);
+	}
+}
+
+csv_file::__init();
+
 if (isset($_GET['file_upload']) && !empty($_FILES['facebook_file'])) {
-	$file = $_FILES['facebook_file'];
-	var_dump($file);
+	csv_file::file_import($_FILES['facebook_file']['tmp_name']);
 }
 
 ?>