Exemplo n.º 1
0
 /**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
 public function store(CreateDevisRequest $request)
 {
     /** Début function extraction partie string **/
     function strafter($string, $substring)
     {
         $pos = strpos($string, $substring);
         if ($pos === false) {
             return $string;
         } else {
             return substr($string, $pos + strlen($substring));
         }
     }
     function strbefore($string, $substring)
     {
         $pos = strpos($string, $substring);
         if ($pos === false) {
             return $string;
         } else {
             return substr($string, 0, $pos);
         }
     }
     /** Fin function extraction partie string **/
     $data = $request->all();
     $modules = $request->input('module_id');
     foreach ($modules as $key => $value) {
         if (strpos($value, '.') === false) {
             $produit = Produit::findOrFail($value);
             $modules_produit = $produit->modules;
             if ($data['produit_quantite'][$key] != 0) {
                 foreach ($modules_produit as $module) {
                     if ($module->type_module == 'Base') {
                         $data['module_id'][] = $module->id . '.' . $value;
                         $data['produit_quantite'][] = $data['produit_quantite'][$key];
                         $data['produit_remise'][] = $data['produit_remise'][$key];
                         $data['service_duree'][] = $data['service_duree'][$key];
                     }
                 }
             }
         }
     }
     $modules = $data['module_id'];
     foreach ($modules as $key => $value) {
         if (!empty($value)) {
             if (strpos($value, '.') !== false) {
                 $produit = Produit::findOrfail(strafter($value, '.'));
                 $dv_prefix = $produit->prefix_produit;
                 $dv_suffix = $produit->suffix_produit;
                 $devis_number = DB::table('devis')->select('num_devis')->where('num_devis', 'like', '%DV-' . $dv_prefix . '%')->orderBy('id', 'desc')->first();
                 if (empty($devis_number)) {
                     $dv_num = 'DV-' . $dv_prefix . '-' . date('y') . date('m') . $dv_suffix;
                 } else {
                     foreach ($devis_number as $dnvalue) {
                         $last_dv_number = $dnvalue;
                     }
                     $lg = strlen('DV-' . $dv_prefix . '-') + 4;
                     $inc_devis_number = substr($last_dv_number, $lg) + 1;
                     $dv_num = 'DV-' . $dv_prefix . '-' . date('y') . date('m') . $inc_devis_number;
                 }
                 $module_id = strbefore($value, '.');
                 $produit_id = strafter($value, '.');
                 $produit_quantite = $data['produit_quantite'][$key];
                 $produit_remise = $data['produit_remise'][$key];
                 $service_duree = $data['service_duree'][$key];
                 $ligne[$key] = ['module_id' => $module_id, 'produit_id' => $produit_id, 'service_duree' => $service_duree, 'devis_id' => $dv_num, 'produit_quantite' => $produit_quantite, 'produit_remise' => $produit_remise];
                 $devi_module[$key] = ['module_id' => $module_id, 'produit_id' => $produit_id, 'devis_id' => $dv_num, 'produit_quantite' => $produit_quantite, 'produit_remise' => $produit_remise];
             }
         }
     }
     $dv_number_liste = [];
     foreach ($ligne as $key => $value) {
         foreach ($value as $lkey => $lvalue) {
             if (substr($lvalue, 0, 2) == 'DV') {
                 if (empty($dv_number_liste)) {
                     $produit = Produit::select('nom_produit', 'vers_produit')->findOrfail($value['produit_id']);
                     $nom_produit = $produit->nom_produit . ' ' . $produit->vers_produit;
                     $dv_number_liste[$nom_produit] = $lvalue;
                 } else {
                     $exist = 0;
                     foreach ($dv_number_liste as $dkey => $dvalue) {
                         if ($dvalue == $lvalue) {
                             $exist = 1;
                         }
                     }
                     if ($exist == 0) {
                         $produit = Produit::select('nom_produit', 'vers_produit')->findOrfail($value['produit_id']);
                         $nom_produit = $produit->nom_produit . ' ' . $produit->vers_produit;
                         $dv_number_liste[$nom_produit] = $lvalue;
                     }
                 }
             }
         }
     }
     // Récupération des données à entrer dans la table Devis
     setlocale(LC_TIME, 'fr');
     $sclient = Societe::findOrfail($data['societe_id']);
     $client = Contact::select('nom_contact', 'prenoms_contact', 'genre_contact')->findOrfail($data['contact_id']);
     $nom_client = $client->nom_contact . ' ' . $client->prenoms_contact;
     $societedata = DB::table('societedatas')->select('id')->orderBy('created_at', 'desc')->first();
     $gescom = DB::table('gescoms')->select('id')->orderBy('created_at', 'desc')->first();
     $restemois = Carbon::now()->daysInMonth - Carbon::now()->day;
     $add = $restemois + 30;
     $echeance = Carbon::now()->addDays($add)->formatLocalized('%d %B %Y');
     // Remplissage des lignes d'entrées dans la table de devis
     foreach ($dv_number_liste as $key => $value) {
         $dv_num_int = $data['prefix_id'] . '/' . $value;
         $lg2 = strlen('DV-' . $dv_prefix . '-');
         $dv_num_ext = substr($value, $lg2);
         $devis = ['num_devis' => $value, 'num_devis_int' => $dv_num_int, 'num_devis_ext' => $dv_num_ext, 'pays_clt' => $sclient->pays_clt, 'ville_clt' => $sclient->ville_siege_clt, 'produit' => $key, 'adresse_scliente' => $sclient->adresse_siege_clt, 'tel_clt' => $sclient->tel_siege_clt, 'fax_clt' => $sclient->fax_siege_clt, 'bp_clt' => $sclient->bp_clt, 'email_clt' => $sclient->email_siege_clt, 'nom_scontact' => $nom_client, 'nom_scliente' => $sclient->nom_clt, 'url_clt' => $sclient->url_clt, 'ref_client' => $sclient->ref_client, 'civilite_contact' => $client->genre_contact, 'echeance_devis' => $echeance, 'user_id' => $data['user_id'], 'suivi_devis' => $data['suivi_devis'], 'societedata_id' => $societedata->id, 'gescom_id' => $gescom->id, 'contact_id' => $data['contact_id'], 'societe_id' => $data['societe_id']];
         Devis::create($devis);
     }
     // Enregistrement direct des données dans la table ligne_devis
     $produit_base = $ligne;
     foreach ($ligne as $key => $value) {
         $devis_id = Devis::select('id')->where('num_devis', $value['devis_id'])->get();
         foreach ($devis_id as $dvkey => $dvvalue) {
             $value['devis_id'] = $dvvalue->id;
         }
         //$produit_base[$] = $value['produit_id'];
         /*** Utilisation de la fonction Many To Many **/
         $devis_module = Devis::findOrfail($value['devis_id']);
         $id_devis[$value['produit_id']] = $devis_module->id;
         $devis_module->modules()->attach($value['module_id'], ['produit_quantite' => $value['produit_quantite'], 'produit_remise' => $value['produit_remise'], 'produit_id' => $value['produit_id'], 'service_duree' => $value['service_duree']]);
     }
     // Enregistrement des modules de base pour les licences présentes
     foreach ($id_devis as $key => $value) {
         $produits_list = Produit::findOrfail($key);
         $module_list = $produits_list->modules;
         foreach ($module_list as $mkey => $mvalue) {
             if ($mvalue->type_module == 'Base') {
                 $modules_base[$key][] = $mvalue->id;
             }
         }
     }
     // Calcul des totaux des devis
     foreach ($ligne as $key => $value) {
         $devis_id = Devis::select('id')->where('num_devis', $value['devis_id'])->get();
         foreach ($devis_id as $dvkey => $dvvalue) {
             $value['devis_id'] = $dvvalue->id;
         }
         $tht = 0;
         $devis = Devis::with('gescom')->findOrfail($value['devis_id']);
         foreach ($devis->modules as $modules) {
             $tt = $modules->pivot->produit_quantite * $modules->prix_module;
             $remise = $tt * ($modules->pivot->produit_remise / 100);
             $tht += $tt - $remise;
         }
         $remise_anpme = $tht * ($devis->gescom->taux_anpme / 100);
         $tt_anpme = $tht * ($devis->gescom->taux_anpme / 100);
         $tt_part = $tht - $tt_anpme;
         $devis_update = ['total_ht' => $tht, 'total_anpme' => $tt_anpme, 'total_part' => $tt_part];
         $devis->update($devis_update);
     }
     return redirect()->route('gescom.index');
 }
Exemplo n.º 2
0
 public function store(Request $request)
 {
     Devis::create($request->all());
     Session::flash('flash_message', 'Devi added!');
     return redirect('admin/devis');
 }