private async Task UpdateDetails(Guid OrdinaryID, Guid IndemnizationOverID, List <Guid> OrdinaryOverDetailsIDs,
                                         List <Guid> IndemnizationOverDetailsIDs, Guid identityWorkId, Guid instanceID)
        {
            var manager  = new MiddlewareManager <OverdraftDetail>(new BaseRecordManager <OverdraftDetail>(), new OverdraftDetailValidator());
            var allGuids = new List <Guid>(OrdinaryOverDetailsIDs);

            allGuids.AddRange(IndemnizationOverDetailsIDs);

            var allDetailsDelete = await manager.FindByExpressionAsync(x => x.InstanceID == instanceID && (x.OverdraftID == IndemnizationOverID || x.OverdraftID == OrdinaryID), identityWorkId,
                                                                       new string[] { "ConceptPayment" });

            var allDetails = allDetailsDelete.Where(x => OrdinaryOverDetailsIDs.Contains(x.ID) || IndemnizationOverDetailsIDs.Contains(x.ID)).ToList();


            var oldOrdinaryDetailsCompensation = allDetailsDelete.Where(x => x.OverdraftID == OrdinaryID && (x.ConceptPayment.Code == ISRFINIQUITOCONCEPTCODE ||
                                                                                                             COMPENSATIONSATCODES.Contains(x.ConceptPayment.SATGroupCode))).ToList();

            allDetails.Where(x => OrdinaryOverDetailsIDs.Contains(x.ID)).AsParallel().ForAll(y => { y.OverdraftID = OrdinaryID; y.ConceptPayment = null; });
            //se elimina porke no hace nada
            //allDetails.Where(x => OrdinaryOverDetailsIDs.Contains(x.ID)).Where(p => p.Active);

            allDetails.Where(x => IndemnizationOverDetailsIDs.Contains(x.ID)).AsParallel().ForAll(y =>
            {
                y.OverdraftID = IndemnizationOverID; y.ConceptPayment = null;
            });

            await manager.UpdateAsync(allDetails, identityWorkId);

            if (oldOrdinaryDetailsCompensation.Any())
            {
                oldOrdinaryDetailsCompensation.AsParallel().ForAll(item => item.ConceptPayment = null);
                await manager.DeleteAsync(oldOrdinaryDetailsCompensation.Select(x => x.ID).ToList(), identityWorkId);
            }
        }
        private async Task DeleteOverdrafts(List <Overdraft> overdrafts, Guid identityWorkID)
        {
            if (overdrafts != null && overdrafts.Any())
            {
                var detailManager = new MiddlewareManager <OverdraftDetail>(new BaseRecordManager <OverdraftDetail>(), new OverdraftDetailValidator());
                var overManager   = new MiddlewareManager <Overdraft>(new BaseRecordManager <Overdraft>(), new OverdraftValidator());

                var detailToDelete = overdrafts.SelectMany(x => x.OverdraftDetails).Select(x => x.ID).ToList();

                if (detailToDelete.Any())
                {
                    await detailManager.DeleteAsync(detailToDelete, identityWorkID);
                }

                await overManager.DeleteAsync(overdrafts.Select(x => x.ID).ToList(), identityWorkID);
            }
        }