コード例 #1
0
        private void PurchaseTruck()
        {
            int lastItemID;
            int nextItemID;
            int itemsCount = 0;

            var cdc = new CorporationDataContext();

            itemsCount = cdc.Trucks.Count();

            if (itemsCount == 0)
            {
                nextItemID = 990001;
            }
            else
            {
                lastItemID = cdc.Trucks.OrderByDescending(s => s.TruckID).Select(s => s.TruckID).First();
                nextItemID = lastItemID + 1;
            }


            try
            {
                cdc.Trucks.InsertOnSubmit(

                    new Truck
                {
                    TruckID = nextItemID,
                    Status  = "free"
                }
                    );



                cdc.SubmitChanges(ConflictMode.ContinueOnConflict);
            }
            catch (ChangeConflictException e)
            {
                foreach (ObjectChangeConflict occ in cdc.ChangeConflicts)
                {
                    occ.Resolve(RefreshMode.KeepChanges);
                }
            }
            try
            {
                cdc.SubmitChanges(ConflictMode.FailOnFirstConflict);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception: " + ex.Message);
            }
        }
コード例 #2
0
ファイル: PLANT.cs プロジェクト: kyurrii/CORPORATION
        public async void Produce(int ordId)
        {
            var    cdc  = new CorporationDataContext();
            Random rand = new Random();

            int tpro = rand.Next(30000);

            Thread.Sleep(tpro);
            try
            {
                var orderInProcess = cdc.ProductOrders.Where(s => s.MProdOrderID == ordId).First();


                orderInProcess.Status = "onstock";
                cdc.SubmitChanges();

                Thread.Sleep(rand.Next(8000));

                await Task.Run(() => ShipProdOrd(ordId));


                //  orderInProcess.Status = "shiped";
                //cdc.SubmitChanges();
            }
            catch (Exception ex)
            {
                // MessageBox.Show("Exception: " + ex.Message);
            }
        }
コード例 #3
0
ファイル: BANK.cs プロジェクト: kyurrii/CORPORATION
        public void createTransaction(int?pinvID, int?payID, int?transID, int?fuelinvID)
        {
            using (var cdc = new CorporationDataContext())
            {
                mutex.WaitOne();

                int lastItemID = 0;
                int nextItemID = 0;
                int itemsCount = 0;

                itemsCount = cdc.BankTransactions.Count();

                if (itemsCount == 0)
                {
                    nextItemID = 440001;
                }
                else
                {
                    lastItemID = cdc.BankTransactions.OrderByDescending(s => s.TransactionID).Select(s => s.TransactionID).First();
                    nextItemID = lastItemID + 1;
                }

                try
                {
                    cdc.BankTransactions.InsertOnSubmit(

                        new BankTransaction
                    {
                        TransactionID     = nextItemID,
                        PlantInvoiceID    = pinvID,
                        PaymentID         = payID,
                        TransInvoiceID    = transID,
                        TankFuelInvoiceID = fuelinvID,
                        Status            = "pending",
                        Confirmed         = "no",
                        Date           = DateTime.Now,
                        FuelPaymentID  = null,
                        TransPaymentID = null
                    }
                        );
                    cdc.SubmitChanges();

                    mutex.ReleaseMutex();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Exception: " + ex.Message);
                }
            }
        }
コード例 #4
0
ファイル: MARKET.cs プロジェクト: kyurrii/CORPORATION
        public void PlaceProdOrder(object source, ElapsedEventArgs e)
        {
            int lastItemID;
            int nextItemID;
            int itemsCount = 0;

            var cdc = new CorporationDataContext();


            itemsCount = cdc.ProductOrders.Count();

            if (itemsCount == 0)
            {
                nextItemID = 110001;
            }
            else
            {
                lastItemID = cdc.ProductOrders.OrderByDescending(s => s.MProdOrderID).Select(s => s.MProdOrderID).First();
                nextItemID = lastItemID + 1;
            }


            Random random     = new Random();
            int    orderValue = random.Next(50000);

            List <int> payTerms = new List <int>()
            {
                0, 30, 60, 90
            };
            int payIndex = random.Next(4);

            try
            {
                cdc.ProductOrders.InsertOnSubmit(

                    new ProductOrder
                {
                    MProdOrderID   = nextItemID,
                    ProdOrderValue = orderValue,
                    Status         = "open",
                    OrderDate      = DateTime.Now,
                    PaymentTerm    = payTerms[payIndex],
                    InvoiceIssued  = "no"
                }
                    );
                cdc.SubmitChanges();
            }
            catch { }
        }
コード例 #5
0
ファイル: BANK.cs プロジェクト: kyurrii/CORPORATION
        public async void checkInvoices(object source, ElapsedEventArgs e)
        {
            using (var cdc = new CorporationDataContext()) {
                try
                {
                    var PlantInvoicesList = cdc.PlantInvoices.Join(cdc.ProductOrders,
                                                                   inv => inv.MProdOrderID,
                                                                   ord => ord.MProdOrderID,
                                                                   (inv, ord) => new
                    {
                        PlantInvID    = inv.PlantInviceID,
                        InvoiceValue  = ord.ProdOrderValue,
                        InvoiceStatus = inv.Status,
                        Date          = ord.OrderDate,
                        PaymentTerm   = ord.PaymentTerm
                    }).ToList();

                    var oldestPendInvoice = PlantInvoicesList.Where(s => s.InvoiceStatus == "issued").OrderBy(s => s.Date).FirstOrDefault();


                    decimal PlantInvoicedTotalAmount = Convert.ToDecimal(PlantInvoicesList.Sum(s => s.InvoiceValue));

                    if (oldestPendInvoice != null)
                    {
                        int invID        = oldestPendInvoice.PlantInvID;
                        var invToProcess = cdc.PlantInvoices.Where(s => s.PlantInviceID == invID);

                        int invPayTerm = (int)oldestPendInvoice.PaymentTerm;

                        Thread.Sleep(invPayTerm * 100);

                        await Task.Run(() => createTransaction(invID, null, null, null));



                        foreach (PlantInvoice inv in invToProcess)
                        {
                            inv.Status = "paid";
                        }
                        cdc.SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    // MessageBox.Show("Exception: " + ex.Message);
                }
            };
        }
コード例 #6
0
ファイル: FUELSTATION.cs プロジェクト: kyurrii/CORPORATION
        public void FuelPurchase()
        {
            decimal fr = FuelReserve();
            decimal amountToPurchase = (FuelReserveUpperLimit - fr);

            var  cdc  = new CorporationDataContext();
            BANK bank = new BANK();

            if (bank.balance >= amountToPurchase * fuelPrice)
            {
                int lastItemID = 0;
                int nextItemID = 0;
                int itemsCount = 0;

                itemsCount = cdc.TankFuelPayments.Count();

                if (itemsCount == 0)
                {
                    nextItemID = 660001;
                }
                else
                {
                    lastItemID = cdc.TankFuelPayments.OrderByDescending(s => s.FuelPaymentID).Select(s => s.FuelPaymentID).First();
                    nextItemID = lastItemID + 1;
                }

                try
                {
                    cdc.TankFuelPayments.InsertOnSubmit(

                        new TankFuelPayment
                    {
                        FuelPaymentID     = nextItemID,
                        FuelPaymentAmount = Convert.ToInt32(amountToPurchase),
                        FuelPaymentValue  = amountToPurchase * fuelPrice,

                        Status = "requested",
                        Date   = DateTime.Now
                    }
                        );
                    cdc.SubmitChanges();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Exception: " + ex.Message);
                }
            }
        }
コード例 #7
0
ファイル: PLANT.cs プロジェクト: kyurrii/CORPORATION
        private void ShipProdOrd(int ordId)
        {
            var cdc = new CorporationDataContext();

            try
            {
                var orderInProcess = cdc.ProductOrders.Where(s => s.MProdOrderID == ordId).First();

                orderInProcess.Status = "shiped";
                cdc.SubmitChanges();
            }
            catch (Exception ex)
            {
                // MessageBox.Show("Exception: " + ex.Message);
            }
        }
コード例 #8
0
ファイル: MARKET.cs プロジェクト: kyurrii/CORPORATION
        public void PlaceTankFuelOrder(object source, ElapsedEventArgs e)
        {
            int lastItemID = 0;
            int nextItemID = 0;
            int itemsCount = 0;

            var cdc = new CorporationDataContext();


            itemsCount = cdc.TankFuelOrders.Count();

            if (itemsCount == 0)
            {
                nextItemID = 550001;
            }
            else
            {
                lastItemID = cdc.TankFuelOrders.OrderByDescending(s => s.TankFuelOrderID).Select(s => s.TankFuelOrderID).First();
                nextItemID = lastItemID + 1;
            }


            Random random      = new Random();
            int    orderAmount = random.Next(200);

            decimal fuelPrice  = 29;
            decimal orderValue = orderAmount * fuelPrice;



            try
            {
                cdc.TankFuelOrders.InsertOnSubmit(

                    new TankFuelOrder
                {
                    TankFuelOrderID     = nextItemID,
                    TankFuelOrderValue  = orderValue,
                    TankFuelOrderAmount = orderAmount,
                    Status = "waiting",
                    Date   = DateTime.Now,
                }
                    );
                cdc.SubmitChanges();
            }
            catch { }
        }
コード例 #9
0
ファイル: BANK.cs プロジェクト: kyurrii/CORPORATION
        public async void checkPayments(object source, ElapsedEventArgs e)
        {
            using (var cdc = new CorporationDataContext())
            {
                try
                {
                    var PaymentsList = cdc.Payments.Join(cdc.ProductOrders,
                                                         pay => pay.MProdOrderID,
                                                         ord => ord.MProdOrderID,
                                                         (pay, ord) => new
                    {
                        CorpPaymID    = pay.PaymentID,
                        PaymentAmount = (ord.ProdOrderValue) * 7 / 10,
                        PaymentStatus = pay.Status,
                        Date          = ord.OrderDate
                    });

                    var oldestPendPayment = PaymentsList.Where(s => s.PaymentStatus == "requested").OrderBy(s => s.Date).FirstOrDefault();

                    if (oldestPendPayment != null)
                    {
                        int payID        = oldestPendPayment.CorpPaymID;
                        var payToProcess = cdc.Payments.Where(s => s.PaymentID == payID);

                        decimal payamt = Convert.ToDecimal(oldestPendPayment.PaymentAmount);

                        decimal currBalance = balance;

                        if (currBalance - payamt >= 0)
                        {
                            await Task.Run(() => createTransaction(null, payID, null, null));

                            foreach (Payment pay in payToProcess)
                            {
                                pay.Status = "paid";
                            }
                            cdc.SubmitChanges();
                        }
                    }
                }
                catch (Exception ex)
                {
                    // MessageBox.Show("Exception: " + ex.Message);
                }
            }
        }
コード例 #10
0
ファイル: PLANT.cs プロジェクト: kyurrii/CORPORATION
        public async void CheckOrdersList(object source, ElapsedEventArgs e)
        {
            var cdc = new CorporationDataContext();
            var nomberInvNotIssProdOrd   = cdc.ProductOrders.Count(s => s.Status == "shiped" && s.InvoiceIssued == "no");
            var invNotIssProdOrd         = cdc.ProductOrders.Where(s => s.Status == "shiped" && s.InvoiceIssued == "no").OrderBy(s => s.OrderDate).FirstOrDefault();
            var oldestInProdOrd          = cdc.ProductOrders.Where(s => s.Status == "inproduction").OrderBy(s => s.OrderDate).FirstOrDefault();
            var nomberOrdersInProduction = cdc.ProductOrders.Count(s => s.Status == "inproduction");
            var notShipedProdOrd         = cdc.ProductOrders.Where(s => s.Status == "onStock").OrderBy(s => s.OrderDate).FirstOrDefault();


            if (notShipedProdOrd != null)
            {
                int ntordID = notShipedProdOrd.MProdOrderID;

                await Task.Run(() => ShipProdOrd(ntordID));
            }

            if (invNotIssProdOrd != null)
            {
                await Task.Run(() => IssuePlantInvoice(invNotIssProdOrd.MProdOrderID));

                await Task.Run(() => IssuePayment(invNotIssProdOrd.MProdOrderID));

                try
                {
                    invNotIssProdOrd.InvoiceIssued = "yes";
                    cdc.SubmitChanges();
                }
                catch (Exception ex)
                {
                    //  MessageBox.Show("Exception: " + ex.Message);
                }
            }


            if (nomberOrdersInProduction < prodLinesnomber)
            {
                NextOpenOrderToProduction();
            }

            if (oldestInProdOrd != null)
            {
                await Task.Run(() => Produce(oldestInProdOrd.MProdOrderID));
            }
        }
コード例 #11
0
ファイル: MARKET.cs プロジェクト: kyurrii/CORPORATION
        public void PlaceTransOrder(object source, ElapsedEventArgs e)
        {
            int lastItemID = 0;
            int nextItemID = 0;
            int itemsCount = 0;

            var cdc = new CorporationDataContext();


            itemsCount = cdc.TransOrders.Count();

            if (itemsCount == 0)
            {
                nextItemID = 880001;
            }
            else
            {
                lastItemID = cdc.TransOrders.OrderByDescending(s => s.TransOrderID).Select(s => s.TransOrderID).First();
                nextItemID = lastItemID + 1;
            }


            Random random     = new Random();
            int    orderValue = random.Next(30000);
            int    distance   = random.Next(10000);


            try
            {
                cdc.TransOrders.InsertOnSubmit(

                    new TransOrder
                {
                    TransOrderID = nextItemID,
                    OrderValue   = orderValue,
                    Status       = "open",
                    Date         = DateTime.Now,
                    Distance     = distance,
                    Attribute    = null
                }
                    );
                cdc.SubmitChanges();
            }
            catch { }
        }
コード例 #12
0
ファイル: FUELSTATION.cs プロジェクト: kyurrii/CORPORATION
        private static void NextVehicleToTank(int ordID)
        {
            var cdc = new CorporationDataContext();

            try {
                var waitingTankOrd = cdc.TankFuelOrders.Where(s => s.TankFuelOrderID == ordID);

                foreach (TankFuelOrder fuelOrder in waitingTankOrd)
                {
                    fuelOrder.Status = "inprocess";
                    cdc.SubmitChanges();
                }
            }
            catch (Exception ex)
            {
                //  MessageBox.Show("Exception: " + ex.Message);
            }
        }
コード例 #13
0
ファイル: PLANT.cs プロジェクト: kyurrii/CORPORATION
        public void IssuePayment(int ordId)
        {
            var  cdc  = new CorporationDataContext();
            BANK bank = new BANK();

            decimal balance = bank.balance;


            int lastItemID;
            int nextItemID;
            int itemsCount = 0;

            itemsCount = cdc.Payments.Count();

            if (itemsCount == 0)
            {
                nextItemID = 220001;
            }
            else
            {
                lastItemID = cdc.Payments.OrderByDescending(s => s.PaymentID).Select(s => s.PaymentID).First();
                nextItemID = lastItemID + 1;
            }

            try
            {
                cdc.Payments.InsertOnSubmit(

                    new Payment
                {
                    PaymentID       = nextItemID,
                    MProdOrderID    = ordId,
                    Status          = "requested",
                    TankFuelOrderID = null
                }
                    );
                cdc.SubmitChanges();
            }
            catch (Exception ex)
            {
                // MessageBox.Show("Exception: " + ex.Message);
            }
        }
コード例 #14
0
ファイル: FUELSTATION.cs プロジェクト: kyurrii/CORPORATION
        private static void TankVehicle(int tankOrdId)
        {
            var cdc = new CorporationDataContext();

            var waitingTankOrd = cdc.TankFuelOrders.Where(s => s.TankFuelOrderID == tankOrdId);


            foreach (TankFuelOrder ord in waitingTankOrd)
            {
                int tankTime = (ord.TankFuelOrderAmount).GetValueOrDefault() * 100;
                Thread.Sleep(tankTime);

                ord.Status = "tanked";
                try
                {
                    cdc.SubmitChanges();
                }
                catch
                {
                }
            }
        }
コード例 #15
0
ファイル: PLANT.cs プロジェクト: kyurrii/CORPORATION
        public async void NextOpenOrderToProduction()
        {
            var cdc = new CorporationDataContext();

            var oldestOpenOrd = cdc.ProductOrders.Where(s => s.Status == "open").OrderBy(s => s.OrderDate).FirstOrDefault();

            if (oldestOpenOrd != null)
            {
                try
                {
                    oldestOpenOrd.Status = "inproduction";

                    cdc.SubmitChanges();

                    await Task.Run(() => Produce(oldestOpenOrd.MProdOrderID));
                }
                catch (Exception ex)
                {
                    //  MessageBox.Show("Exception: " + ex.Message);
                }
            }
        }
コード例 #16
0
ファイル: PLANT.cs プロジェクト: kyurrii/CORPORATION
        private void IssuePlantInvoice(int ordId)
        {
            var cdc = new CorporationDataContext();


            int lastItemID;
            int nextItemID;
            int itemsCount = 0;

            itemsCount = cdc.PlantInvoices.Count();

            if (itemsCount == 0)
            {
                nextItemID = 330001;
            }
            else
            {
                lastItemID = cdc.PlantInvoices.OrderByDescending(s => s.PlantInviceID).Select(s => s.PlantInviceID).First();
                nextItemID = lastItemID + 1;
            }

            try
            {
                cdc.PlantInvoices.InsertOnSubmit(

                    new PlantInvoice
                {
                    PlantInviceID = nextItemID,
                    MProdOrderID  = ordId,
                    Status        = "issued",
                }
                    );
                cdc.SubmitChanges();
            }
            catch (Exception ex)
            {
                //  MessageBox.Show("Exception: " + ex.Message);
            }
        }
コード例 #17
0
ファイル: FUELSTATION.cs プロジェクト: kyurrii/CORPORATION
        public async void CheckTankOrders(object source, ElapsedEventArgs e)
        {
            var cdc        = new CorporationDataContext();
            int tankAmount = 0;

            var nomberWaitTankOrd      = cdc.TankFuelOrders.Count(s => s.Status == "waiting");
            var nomberProcessTankOrd   = cdc.TankFuelOrders.Count(s => s.Status == "inprocess");
            var momentalTankFuelAmount = cdc.TankFuelOrders.Where(s => s.Status == "inprocess").Sum(s => s.TankFuelOrderAmount);

            var waitingTankOrd = cdc.TankFuelOrders.Where(s => s.Status == "waiting").OrderBy(s => s.Date).FirstOrDefault();


            if (waitingTankOrd != null)
            {
                tankAmount = (int)waitingTankOrd.TankFuelOrderAmount;
            }

            if (FuelReserve() <= FuelReserveLowerLimit)
            {
                await Task.Run(() => FuelPurchase());
            }

            if (nomberProcessTankOrd < FuelStationPostsNumber && waitingTankOrd != null && FuelReserve() >= tankAmount)
            {
                try
                {
                    int oldestTankOrdID = waitingTankOrd.TankFuelOrderID;


                    await Task.Run(() => NextVehicleToTank(oldestTankOrdID));

                    await Task.Run(() => TankVehicle(oldestTankOrdID));
                }
                catch (Exception ex)
                {
                    // MessageBox.Show("Exception: " + ex.Message);
                }
            }
            else if (waitingTankOrd != null && FuelReserve() < tankAmount)
            {
                Thread.Sleep(2000);
                try
                {
                    waitingTankOrd.Status = "canceled";
                    cdc.SubmitChanges();
                }
                catch
                {
                }
            }

            var inprocTankOrd = cdc.TankFuelOrders.Where(s => s.Status == "inprocess").OrderBy(s => s.Date).FirstOrDefault();

            if (inprocTankOrd != null && FuelReserve() > 0)
            {
                try
                {
                    int inprocTankOrdID = inprocTankOrd.TankFuelOrderID;

                    await Task.Run(() => TankVehicle(inprocTankOrdID));
                }
                catch (Exception ex)
                {
                    //  MessageBox.Show("Exception: " + ex.Message);
                }
            }
        }
コード例 #18
0
        private void StartNewTrip(int trordID, int truckID)
        {
            int lastItemID = 0;
            int nextItemID = 0;
            int itemsCount = 0;

            using (CorporationDataContext cdc = new CorporationDataContext())
            {
                TransOrder nextTransOrder = cdc.TransOrders.Where(s => s.TransOrderID == trordID).FirstOrDefault();

                Truck nextFreeTruck = cdc.Trucks.Where(s => s.TruckID == truckID).FirstOrDefault();

                Thread.Sleep(1000);

                try
                {
                    nextFreeTruck.Status = "onTrip";
                    cdc.SubmitChanges();

                    nextTransOrder.Attribute = "onWay";
                    cdc.SubmitChanges();

                    nextTransOrder.Status = "inprocess";
                    cdc.SubmitChanges();
                }
                catch (Exception ex)
                {
                    //MessageBox.Show("Exception: " + ex.Message);
                }
                try
                {
                    itemsCount = cdc.TruckTrips.Count();

                    if (itemsCount == 0)
                    {
                        nextItemID = 770001;
                    }
                    else
                    {
                        lastItemID = cdc.TruckTrips.OrderByDescending(s => s.TruckTripID).Select(s => s.TruckTripID).First();
                        nextItemID = lastItemID + 1;
                    }

                    Boolean containsTransOrder = cdc.TruckTrips.Select(s => s.TransOrderID).Contains(trordID);

                    if (containsTransOrder == false)
                    {
                        try
                        {
                            cdc.TruckTrips.InsertOnSubmit(

                                new TruckTrip
                            {
                                TruckTripID  = nextItemID,
                                TransOrderID = trordID,
                                TruckID      = truckID,
                                Date         = DateTime.Now,
                                Status       = "open"
                            }
                                );

                            cdc.SubmitChanges();
                        }

                        catch (ChangeConflictException e)
                        {
                        }
                    }
                }
                catch
                {
                }
            }
        }
コード例 #19
0
        private void Deliver(int trordID, int truckID)
        {
            using (var cdc = new CorporationDataContext())
            {
                //  mutex.WaitOne();

                TransOrder nextTransOrder = cdc.TransOrders.Where(s => s.TransOrderID == trordID).FirstOrDefault();
                Truck      nextTruck      = cdc.Trucks.Where(s => s.TruckID == truckID).FirstOrDefault();
                TruckTrip  currTrip       = cdc.TruckTrips.Where(s => s.TransOrderID == trordID).Single();

                int distance = (int)nextTransOrder.Distance;
                int dur      = distance * 1;
                Thread.Sleep(dur);

                try
                {
                    nextTransOrder.Status = "complete";

                    cdc.SubmitChanges();

                    currTrip.Status = "complete";

                    cdc.SubmitChanges();

                    nextTruck.Status = "free";

                    cdc.SubmitChanges();


                    if (nextTransOrder.Status != "complete")
                    {
                        MessageBox.Show(nextTransOrder.Status, "nextTransOrder.Status= ");
                    }

                    if (currTrip.Status != "complete")
                    {
                        MessageBox.Show(currTrip.Status, "currTrip.Status= ");
                    }

                    if (nextTruck.Status != "free")
                    {
                        MessageBox.Show(nextTruck.Status, "nextTruck.Status= ");
                    }
                }
                catch (ChangeConflictException e)
                {
                    /* foreach (ObjectChangeConflict occ in cdc.ChangeConflicts)
                     * {
                     *   occ.Resolve(RefreshMode.KeepChanges);
                     * }  */
                }

                /*   try
                 * {
                 *
                 *      cdc.SubmitChanges(ConflictMode.FailOnFirstConflict);
                 * }
                 * catch (Exception ex)
                 * {
                 *     MessageBox.Show("Exception: " + ex.Message);
                 * }*/

                // mutex.ReleaseMutex();
            }
        }