Example #1
0
 public WarehousePart(AddWarehousePartBindingModel model)
 {
     PartNumber      = model.PartNumber;
     Availability    = model.Availability;
     Brand           = model.Brand;
     Description     = model.Description;
     Model           = model.Model;
     Price           = model.Price;
     SubstituteParts = model.SubstituteParts;
     Invoice         = model.Invoice;
     InvoiceDate     = model.InvoiceDate.ToUniversalTime();
     ReceivedDate    = DateTime.UtcNow.ToUniversalTime();
 }
Example #2
0
        public async void AddWarehousePart(
            AddWarehousePartBindingModel model,
            string serviceName)
        {
            FirestoreDb         db     = connection.GetFirestoreDb();
            CollectionReference colRef = db
                                         .Collection("warehouse-parts")
                                         .Document("bcyvKBFBWE6DxnvIQ1Kn")
                                         .Collection("parts");

            WarehousePart newPart         = new WarehousePart(model);
            QuerySnapshot partsWithSamePN = await colRef
                                            .WhereEqualTo("PartNumber", newPart.PartNumber)
                                            .GetSnapshotAsync();

            if (partsWithSamePN.Count == 0)
            {
                QuerySnapshot partsWithSameSPN = await colRef
                                                 .WhereArrayContains(
                    "SubstituteParts", newPart.PartNumber)
                                                 .GetSnapshotAsync();

                if (partsWithSameSPN.Count == 0)
                {
                    await RunTransaction(newPart, colRef);
                }
                else
                {
                    WarehousePart lastPartWithSameSPN =
                        GetLastPartWithSamePnOrSpn(partsWithSameSPN);

                    newPart.Model =
                        GetUniqueElements(
                            newPart.Model,
                            lastPartWithSameSPN.Model);

                    newPart.SubstituteParts =
                        GetUniqueElements(
                            newPart.SubstituteParts,
                            lastPartWithSameSPN.SubstituteParts);

                    partsWithSameSPN.Documents
                    .ToList()
                    .ForEach(async x => {
                        WarehousePart p =
                            x.ConvertTo <WarehousePart>();

                        p.Model           = newPart.Model;
                        p.SubstituteParts =
                            newPart.SubstituteParts;

                        Dictionary <string, object> partAsDictionary =
                            ConvertPartToDictionary(p);

                        await db.RunTransactionAsync(async t => {
                            await x.Reference
                            .UpdateAsync(partAsDictionary);
                        });
                    });
                }
            }
            else
            {
                WarehousePart lastPartWithSamePN =
                    GetLastPartWithSamePnOrSpn(partsWithSamePN);

                newPart.Model =
                    GetUniqueElements(
                        newPart.Model,
                        lastPartWithSamePN.Model);

                newPart.SubstituteParts =
                    GetUniqueElements(
                        newPart.SubstituteParts,
                        lastPartWithSamePN.SubstituteParts);

                partsWithSamePN.Documents
                .ToList()
                .ForEach(async x => {
                    WarehousePart p =
                        x.ConvertTo <WarehousePart>();

                    p.Model = newPart.Model;

                    p.SubstituteParts =
                        newPart.SubstituteParts;

                    p.Availability = partsWithSamePN.Count + 1;
                    Dictionary <string, object> partAsDictionary =
                        ConvertPartToDictionary(p);

                    await db.RunTransactionAsync(async t => {
                        await x.Reference
                        .UpdateAsync(partAsDictionary);
                    });
                });
            }
        }
Example #3
0
 public void AddPart(
     [FromBody] AddWarehousePartBindingModel newPart,
     string serviceName)
 {
     service.AddWarehousePart(newPart, serviceName);
 }