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)); }
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); } } }
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); } }