예제 #1
0
        public Task <double> CalcRepairPrice(int id)
        {
            double      total = 0;
            FirestoreDb db    = connection.GetFirestoreDb();

            QuerySnapshot snapshot = db
                                     .Collection("service-repairs")
                                     .WhereEqualTo("RepairId", id)
                                     .Limit(1)
                                     .GetSnapshotAsync()
                                     .Result;

            Repair repair = snapshot
                            .FirstOrDefault()
                            .ConvertTo <Repair>();

            if (repair.RepairStatus.Contains("OOW") ||
                repair.RepairStatus.Equals("Awaiting payment"))
            {
                total += repair.TechnicianLabor;

                QuerySnapshot qs = db
                                   .Collection("repair-parts")
                                   .WhereEqualTo("RepairId", id)
                                   .Limit(1)
                                   .GetSnapshotAsync()
                                   .Result;

                RequestPartBindingModel model = qs
                                                .FirstOrDefault()
                                                .ConvertTo <RequestPartBindingModel>();

                foreach (KeyValuePair <string, int> x in model.PartsForRepair)
                {
                    QuerySnapshot qst = db
                                        .Collection("warehouse-parts")
                                        .WhereEqualTo("PartNumber", x.Key)
                                        .Limit(1)
                                        .GetSnapshotAsync()
                                        .Result;

                    WarehousePart part = qst
                                         .FirstOrDefault()
                                         .ConvertTo <WarehousePart>();

                    total += part.Price * x.Value;
                }

                qs
                .FirstOrDefault()
                .Reference
                .UpdateAsync("Total", total);
            }
            else
            {
                total = 0;
            }

            return(Task.FromResult(total));
        }
예제 #2
0
        public async void SendPartToRepair(int id, string partNumber, int qnt)
        {
            FirestoreDb db = connection.GetFirestoreDb();

            CollectionReference colRef = db
                                         .Collection("warehouse-parts");

            QuerySnapshot snapshot = colRef
                                     .WhereEqualTo("PartNumber", partNumber)
                                     .GetSnapshotAsync()
                                     .Result;

            if (snapshot.Count == 0)
            {
                return;
            }
            else
            {
                WarehousePart part = new List <DocumentSnapshot>
                                         (snapshot.Documents)
                                     .OrderByDescending(x => x.CreateTime)
                                     .FirstOrDefault()
                                     .ConvertTo <WarehousePart>();

                if (part.Availability < qnt)
                {
                    return;
                }
                else
                {
                    snapshot.Documents
                    .ToList()
                    .ForEach(async x => {
                        WarehousePart p = x.ConvertTo <WarehousePart>();
                        p.Availability -= qnt;

                        await x
                        .Reference
                        .UpdateAsync("Availability", p.Availability);
                    });

                    QuerySnapshot qs = db
                                       .Collection("repair-parts")
                                       .WhereEqualTo("RepairId", id)
                                       .Limit(1)
                                       .GetSnapshotAsync()
                                       .Result;

                    RequestPartBindingModel parts = qs
                                                    .Documents
                                                    .FirstOrDefault()
                                                    .ConvertTo <RequestPartBindingModel>();

                    parts.PartsForRepair[partNumber] = qnt;

                    await qs.Documents
                    .FirstOrDefault()
                    .Reference
                    .UpdateAsync("PartsForRepair", parts.PartsForRepair);

                    RepairLog log = new RepairLog()
                    {
                        TimeOfEvent = DateTime.UtcNow,
                        TypeOfEvent = "update part qnt",
                        Description = "Update part qnt"
                    };

                    await new LogService()
                    .UploadLogToExistingRepair(id, log);
                }
            }
        }
예제 #3
0
        public async void AddRequestedPartToRepair(string partNumber, int id)
        {
            FirestoreDb   db       = connection.GetFirestoreDb();
            QuerySnapshot snapshot = db
                                     .Collection("repair-parts")
                                     .WhereEqualTo("RepairId", id)
                                     .GetSnapshotAsync()
                                     .Result;

            if (snapshot.Count == 0)
            {
                RequestPartBindingModel requestPart = new RequestPartBindingModel()
                {
                    RepairId       = id,
                    PartsForRepair = new Dictionary <string, int>()
                    {
                        { partNumber, 1 }
                    }
                };

                CollectionReference colRef = db
                                             .Collection("repair-parts");

                await db.RunTransactionAsync(async t => {
                    await colRef.AddAsync(requestPart);
                });

                RepairLog log = new RepairLog()
                {
                    TimeOfEvent = DateTime.UtcNow,
                    TypeOfEvent = "request part",
                    Description = $"Request part with part number {partNumber}"
                };

                await new LogService()
                .UploadLogToExistingRepair(id, log);
            }
            else
            {
                RequestPartBindingModel model = snapshot
                                                .FirstOrDefault()
                                                .ConvertTo <RequestPartBindingModel>();

                if (model.PartsForRepair.ContainsKey(partNumber))
                {
                    ++model.PartsForRepair[partNumber];
                }
                else
                {
                    model.PartsForRepair.Add(partNumber, 1);
                }

                await snapshot
                .FirstOrDefault()
                .Reference
                .UpdateAsync("PartsForRepair", model.PartsForRepair);

                RepairLog log = new RepairLog()
                {
                    TimeOfEvent = DateTime.UtcNow,
                    TypeOfEvent = "update part qnt",
                    Description = $"Update part qnt for {partNumber}"
                };

                await new LogService()
                .UploadLogToExistingRepair(id, log);
            }
        }