private void PrecalculRute() { int NrCamioaneSD, newRTnumber; double volSD, volRout; string tipCamSD; bool start = true; if (StadiuCalcul >= stadiu.S2_Precalcul) { if (MessageBox.Show("Exista rute precalculate. Doriti sa continuati?", "Precalcul rute", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { start = false; } } if (start) { WriteLogLine(" -- START PRECALCUL RUTE --"); Rute.Reset(); Savings.Reset(); pr.Reset(); for (int i = 0; i <= Clienti.Lista.Count - 1; i++) { Clienti.ResetSD(Clienti.Lista[i].ClCode); } for (int i = 0; i <= Clienti.Lista.Count - 1; i++) { NrCamioaneSD = 0; volSD = pr.VolumPosibilSD(Clienti.Lista[i].VolumTotal); while (volSD > 0) { NrCamioaneSD++; volRout = Clienti.Lista[i].VolumPentruRute - volSD; newRTnumber = Rute.AdaugaRutaSD(Clienti.Lista[i].ClCode, volSD); tipCamSD = pr.TipCamion(volSD); Rute.ModificaTipCamion(newRTnumber, tipCamSD); pr.InregistreazaCamion("", tipCamSD); Clienti.ModificaVolumeSD(Clienti.Lista[i].ClCode, volSD, volRout, NrCamioaneSD); volSD = pr.VolumPosibilSD(Clienti.Lista[i].VolumPentruRute); WriteLogLine(" Add ruta SD - " + newRTnumber + " - " + Clienti.Lista[i].ClCode); } } WriteLogLine(" -- END PRECALCUL RUTE --"); StadiuCalcul = stadiu.S2_Precalcul; } }
private void PostcalculRute() { //alocare camionete la volume mici cu o singura destinatie //redefinire coloana Pozitie in Ruta for (int i = 0; i <= Clienti.Lista.Count - 1; i++) { if ((Clienti.Lista[i].VolumTotal == Clienti.Lista[i].VolumSingleDest)) { Clienti.Lista[i].PozitiaInRuta = Clienti.Lista[i].NrRuteSD.ToString() + "SD"; } else if ((Clienti.Lista[i].VolumSingleDest > 0) && (Clienti.Lista[i].ExclusDinRute == true)) { Clienti.Lista[i].PozitiaInRuta = Clienti.Lista[i].NrRuteSD.ToString() + "SD"; } else if (Clienti.Lista[i].VolumSingleDest > 0) { Clienti.Lista[i].PozitiaInRuta = Clienti.Lista[i].NrRuteSD.ToString() + "SD + " + Clienti.Lista[i].PozitiaInRuta; } } StadiuCalcul = stadiu.S4_Postcalcul; }
public frmMain() { InitializeComponent(); StadiuCalcul = stadiu.S0_Null; txVolCR.DataBindings.Add("Text", pr, "CR.Volum"); txVolMega.DataBindings.Add("Text", pr, "Mega.Volum"); txVolNormal.DataBindings.Add("Text", pr, "Normal.Volum"); txVolCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.Volum"); txVolCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.Volum"); txOprCR.DataBindings.Add("Text", pr, "CR.Opriri"); txOprMega.DataBindings.Add("Text", pr, "Mega.Opriri"); txOprNormal.DataBindings.Add("Text", pr, "Normal.Opriri"); txOprCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.Opriri"); txOprCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.Opriri"); txMjCR.DataBindings.Add("Text", pr, "CR.Marja"); txMjMega.DataBindings.Add("Text", pr, "Mega.Marja"); txMjNormal.DataBindings.Add("Text", pr, "Normal.Marja"); txMjCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.Marja"); txMjCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.Marja"); txMaxCamCR.DataBindings.Add("Text", pr, "CR.LimitaCamioane"); txMaxCamMega.DataBindings.Add("Text", pr, "Mega.LimitaCamioane"); txMaxCamNormal.DataBindings.Add("Text", pr, "Normal.LimitaCamioane"); txMaxCamCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.LimitaCamioane"); txMaxCamCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.LimitaCamioane"); txCostPerKm.DataBindings.Add("Text", pr, "CostPerKm"); txCostPerMc.DataBindings.Add("Text", pr, "CostPerMc"); txCostPerDescarcare.DataBindings.Add("Text", pr, "CostPerDescarcare"); txEroareDist.DataBindings.Add("Text", pr, "MarjaEroareDistanta"); ckVolMaxUltimStop.DataBindings.Add("Checked", pr, "VolMaximLaUltimStop"); txCentruResponsabilitate.DataBindings.Add("Text", pr, "CentruResponsabilitate"); WriteLogLine("START ROUTE BUILDER"); }
private void LoadClientiFile() { bool toLoad = true; if (StadiuCalcul >= stadiu.S1_Clienti) { if (MessageBox.Show("Exista clienti incarcati. Doriti sa continuati?", "incarcare clienti", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { toLoad = false; } } if (toLoad) { //DistanteOR.LoadFile(); OpenFileDialog dlg = new OpenFileDialog(); dlg.FileName = "Document"; dlg.DefaultExt = ".txt"; dlg.Filter = "Fisiere CSV |*.csv|Fisiere text |*.txt|Toate fisierele |*.*"; DialogResult drs = dlg.ShowDialog(); if (drs == DialogResult.OK) { fileName = dlg.FileName; if (File.Exists(fileName)) { try { Rute.Reset(); Savings.Reset(); Clienti.Reset(); pr.Reset(); using (StreamReader sr = new StreamReader(fileName)) { sr.ReadLine(); sr.ReadLine(); while (!sr.EndOfStream) { var line = sr.ReadLine(); var lineWords = line.Split(';'); double dLon, dLat, dVolPGS, dVolGRC, dVolART, dVolTOT, dDist; double.TryParse(lineWords[4], out dLat); double.TryParse(lineWords[5], out dLon); double.TryParse(lineWords[6], out dVolPGS); double.TryParse(lineWords[7], out dVolGRC); double.TryParse(lineWords[8], out dVolART); double.TryParse(lineWords[9], out dVolTOT); double.TryParse(lineWords[10], out dDist); Clienti.Add(new client(lineWords[0], lineWords[1], lineWords[2], lineWords[3], dLat, dLon, dVolPGS, dVolGRC, dVolART, dVolTOT, dDist, pr.MarjaEroareDistanta)); } } StadiuCalcul = stadiu.S1_Clienti; } catch (Exception ex) { MessageBox.Show("Eroare in fisierul de date. Verificati formatul delimitatorului precum si continutul fisierului." + Environment.NewLine + Environment.NewLine + "<" + ex.Message + ">", "Fisier", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { MessageBox.Show("Fisierul nu exista."); } } } }
private void CalculRute() { double volDePrins = 0, volto, volfr; string tipPosibilCamion = ""; int numarStopuri; if (StadiuCalcul >= stadiu.S3_Calcul) { MessageBox.Show("Exista rute calculate. Nu puteti continua!", "Calcul rute", MessageBoxButtons.OK, MessageBoxIcon.Stop); } else { WriteLogLine(" -- START CALCUL RUTE --"); CalculSavings(); for (int i = 0; i <= Savings.Lista.Count - 1; i++) { if (Savings.Lista[i].SavingValue > 0) { client from = Clienti.Client(Savings.Lista[i].FromClient); client to = Clienti.Client(Savings.Lista[i].ToClient); if ((from.PozitiaInRuta == "nealocat") && (to.PozitiaInRuta == "nealocat")) #region FROM si TO nu sunt in Rute -> Ruta noua { numarStopuri = 2; volDePrins = from.VolumPentruRute - from.VolumInRute + to.VolumPentruRute - to.VolumInRute; tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri); if (tipPosibilCamion != "") { volto = to.VolumPentruRute - to.VolumInRute; volfr = from.VolumPentruRute - from.VolumInRute; Rute.AdaugaRutaRT(from.ClCode, to.ClCode, volfr, volto, Savings.Lista[i].Distanta); Rute.ModificaTipCamion(Rute.RutaCuStartCode(from.ClCode, "RT").NumarRuta, tipPosibilCamion); pr.InregistreazaCamion("", tipPosibilCamion); Clienti.ModificaDupaAdaugareRT(from.ClCode, Rute.RutaCuStartCode(from.ClCode, "RT").NumarRuta, "First", volfr); Clienti.ModificaDupaAdaugareRT(to.ClCode, Rute.RutaCuStartCode(from.ClCode, "RT").NumarRuta, "Last", volto); Savings.Lista[i].Utilizare = "RT noua"; WriteLogLine("Add ruta RT - " + Rute.Lista.Count.ToString() + ": " + from.ClCode + " - " + to.ClCode); } } #endregion else if ((from.PozitiaInRuta == "Last") && (to.PozitiaInRuta == "nealocat")) #region FROM este ultimul in Ruta, TO nu este inRute -> adauga To la sfarsit { rutaObject rtPosibila = Rute.RutaCuEndCode(from.ClCode, "RT"); numarStopuri = rtPosibila.NumarStopuri + 1; volDePrins = rtPosibila.Volum + to.VolumPentruRute - to.VolumInRute; tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri); if (tipPosibilCamion != "") { volto = to.VolumPentruRute - to.VolumInRute; Rute.AddNewEnd(rtPosibila.NumarRuta, to.ClCode, volto, Savings.Lista[i].Distanta); if (rtPosibila.TipCamion != tipPosibilCamion) { pr.InregistreazaCamion(rtPosibila.TipCamion, tipPosibilCamion); Rute.ModificaTipCamion(rtPosibila.NumarRuta, tipPosibilCamion); } Clienti.ModificaDupaAdaugareRT(from.ClCode, from.NumarRuta, "Mid", 0); Clienti.ModificaDupaAdaugareRT(to.ClCode, from.NumarRuta, "Last", volto); WriteLogLine("Add new END la ruta - " + from.NumarRuta + ": " + from.ClCode + " - " + to.ClCode); Savings.Lista[i].Utilizare = "RT new END"; } } #endregion else if ((from.PozitiaInRuta == "nealocat") && (to.PozitiaInRuta == "First")) #region TO este primul in Ruta, FROM nu este inRute -> adauga FROM la inceput { rutaObject rtPosibila = Rute.RutaCuStartCode(to.ClCode, "RT"); numarStopuri = rtPosibila.NumarStopuri + 1; volDePrins = rtPosibila.Volum + from.VolumPentruRute - from.VolumInRute; tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri); if (tipPosibilCamion != "") { volfr = from.VolumPentruRute - from.VolumInRute; Rute.AddNewStart(rtPosibila.NumarRuta, from.ClCode, volfr, Savings.Lista[i].Distanta); if (rtPosibila.TipCamion != tipPosibilCamion) { pr.InregistreazaCamion(rtPosibila.TipCamion, tipPosibilCamion); Rute.ModificaTipCamion(rtPosibila.NumarRuta, tipPosibilCamion); } Clienti.ModificaDupaAdaugareRT(from.ClCode, to.NumarRuta, "First", volfr); Clienti.ModificaDupaAdaugareRT(to.ClCode, to.NumarRuta, "Mid", 0); WriteLogLine("Add new START la ruta - " + to.NumarRuta + ": " + from.ClCode + " - " + to.ClCode); Savings.Lista[i].Utilizare = "RT new START"; } } #endregion else if ((from.PozitiaInRuta == "Last") && (to.PozitiaInRuta == "First")) #region FROM este ultimul intr-o ruta, TO este primul in alta ruta -> link rute { rutaObject rtPosibila1 = Rute.RutaCuEndCode(from.ClCode, "RT"); rutaObject rtPosibila2 = Rute.RutaCuStartCode(to.ClCode, "RT"); if ((rtPosibila1.TipRuta != "SD") && (rtPosibila2.TipRuta != "SD")) { numarStopuri = rtPosibila1.NumarStopuri + rtPosibila2.NumarStopuri; volDePrins = rtPosibila1.Volum + rtPosibila2.Volum; tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri); if ((tipPosibilCamion != "") && (from.NumarRuta != to.NumarRuta)) { Rute.LinkRute(from.NumarRuta, to.NumarRuta, Savings.Lista[i].Distanta); Clienti.ModificaDupaAdaugareRT(from.ClCode, from.NumarRuta, "Mid", 0); Clienti.ModificaDupaAdaugareRT(to.ClCode, from.NumarRuta, "Mid", 0); foreach (stopRuta sr in rtPosibila2.ListaStopuri) { Clienti.ModificaDupaAdaugareRT(sr.Stop, from.NumarRuta, "", 0); } if (rtPosibila1.TipCamion != tipPosibilCamion) { pr.InregistreazaCamion(rtPosibila1.TipCamion, tipPosibilCamion); Rute.ModificaTipCamion(rtPosibila1.NumarRuta, tipPosibilCamion); } pr.InregistreazaCamion(rtPosibila2.TipCamion, ""); WriteLogLine("LINK Rute - " + rtPosibila1.NumarRuta + " <- " + rtPosibila2.NumarRuta + ": " + from.ClCode + " - " + to.ClCode); Savings.Lista[i].Utilizare = "RT LINK"; } } } #endregion } } WriteLogLine(" -- Adauga distante depozit --"); foreach (rutaObject ro in Rute.Lista) { Rute.AddSecventaDepozit(ro.NumarRuta, Clienti.Client(ro.FirstStop).DistantaOR); } PostcalculRute(); WriteLogLine(" -- END CALCUL RUTE --"); StadiuCalcul = stadiu.S4_Postcalcul; } }