private async Task recalculateAsync(Guid employeeID)
 {
     //recalcular debido a modificación en incremento de salario
     var ids = new List <Guid> {
         employeeID
     };
     await _calculationClient.CalculationByEmployeesAsync(new CalculationFireAndForgetByEmployeeParams()
     {
         EmployeeIds    = ids,
         IdentityWorkID = SessionModel.CompanyID,
         InstanceID     = SessionModel.InstanceID,
         UserID         = SessionModel.IdentityID
     });
 }
        public async Task <JsonResult> Save(InfonavitMovement infonavitMovement)
        {
            infonavitMovement.ConceptPaymentID = await GetInfonavitConceptID(infonavitMovement.InfonavitCreditType);

            infonavitMovement.ConceptPayment = null;
            //Common
            infonavitMovement.Active       = true;
            infonavitMovement.company      = SessionModel.CompanyID;
            infonavitMovement.InstanceID   = SessionModel.InstanceID;
            infonavitMovement.CreationDate = DateTime.Now;
            infonavitMovement.StatusID     = 1;
            infonavitMovement.user         = SessionModel.IdentityID;
            infonavitMovement.Timestamp    = DateTime.Now;
            infonavitMovement.Employee     = null;

            //Seguro de vivienda
            if (infonavitMovement.IncludeInsurancePayment_D14)
            {
                var employeeConceptRelationInsurancePayment = _mapper.Map <InfonavitMovement, EmployeeConceptsRelation>(infonavitMovement);
                employeeConceptRelationInsurancePayment.ConceptPaymentID = await GetInfonavitConceptID(InfonavitCreditType.HomeInsurance_D14);

                employeeConceptRelationInsurancePayment.Active               = true;
                employeeConceptRelationInsurancePayment.Name                 = String.Empty;
                employeeConceptRelationInsurancePayment.Description          = String.Empty;
                employeeConceptRelationInsurancePayment.company              = SessionModel.CompanyID;
                employeeConceptRelationInsurancePayment.InstanceID           = SessionModel.InstanceID;
                employeeConceptRelationInsurancePayment.CreationDate         = DateTime.Now;
                employeeConceptRelationInsurancePayment.StatusID             = 1;
                employeeConceptRelationInsurancePayment.user                 = SessionModel.IdentityID;
                employeeConceptRelationInsurancePayment.Timestamp            = DateTime.Now;
                employeeConceptRelationInsurancePayment.InitialCreditDate    = infonavitMovement.InitialApplicationDate;
                employeeConceptRelationInsurancePayment.ConceptPaymentStatus = infonavitMovement.InfonavitStatus ? ConceptPaymentStatus.Active : ConceptPaymentStatus.Inactive;
                employeeConceptRelationInsurancePayment.CreditAmount         = 999999999;

                if (null == infonavitMovement.EmployeeConceptsRelationInsuranceID ||
                    infonavitMovement.EmployeeConceptsRelationInsuranceID == Guid.Empty)
                {
                    employeeConceptRelationInsurancePayment.ID            = Guid.NewGuid();
                    infonavitMovement.EmployeeConceptsRelationInsuranceID = employeeConceptRelationInsurancePayment.ID;
                    infonavitMovement.EmployeeConceptsRelationInsurance   = null;

                    //create employeeConceptsRelationInsurance
                    await _clientEmployeeConceptsRelation.CreateAsync(new List <EmployeeConceptsRelation>() { employeeConceptRelationInsurancePayment }, SessionModel.CompanyID);
                }
                else
                {
                    //update employeeConceptsRelationInsurance
                    employeeConceptRelationInsurancePayment.ID = infonavitMovement.EmployeeConceptsRelationInsuranceID.Value;
                    await _clientEmployeeConceptsRelation.UpdateAsync(new List <EmployeeConceptsRelation>() { employeeConceptRelationInsurancePayment }, SessionModel.CompanyID);
                }
            }

            var employeeConceptRelation = _mapper.Map <InfonavitMovement, EmployeeConceptsRelation>(infonavitMovement);

            employeeConceptRelation.Active               = true;
            employeeConceptRelation.Name                 = String.Empty;
            employeeConceptRelation.Description          = String.Empty;
            employeeConceptRelation.company              = SessionModel.CompanyID;
            employeeConceptRelation.InstanceID           = SessionModel.InstanceID;
            employeeConceptRelation.CreationDate         = DateTime.Now;
            employeeConceptRelation.StatusID             = 1;
            employeeConceptRelation.user                 = SessionModel.IdentityID;
            employeeConceptRelation.Timestamp            = DateTime.Now;
            employeeConceptRelation.ConceptPaymentID     = infonavitMovement.ConceptPaymentID;
            employeeConceptRelation.InitialCreditDate    = infonavitMovement.InitialApplicationDate;
            employeeConceptRelation.ConceptPaymentStatus = infonavitMovement.InfonavitStatus ? ConceptPaymentStatus.Active : ConceptPaymentStatus.Inactive;
            employeeConceptRelation.CreditAmount         = 999999999;

            if (infonavitMovement.ID == Guid.Empty)
            {
                infonavitMovement.ID = Guid.NewGuid();

                employeeConceptRelation.ID = Guid.NewGuid();
                infonavitMovement.EmployeeConceptsRelationID = employeeConceptRelation.ID;
                infonavitMovement.EmployeeConceptsRelation   = employeeConceptRelation;

                await client.CreateAsync(new List <InfonavitMovement> {
                    infonavitMovement
                }, SessionModel.IdentityID);
            }
            else
            {
                employeeConceptRelation.ID = infonavitMovement.EmployeeConceptsRelationID;
                infonavitMovement.EmployeeConceptsRelationID = employeeConceptRelation.ID;
                infonavitMovement.EmployeeConceptsRelation   = employeeConceptRelation;
                await client.UpdateAsync(new List <InfonavitMovement> {
                    infonavitMovement
                }, SessionModel.IdentityID);
            }

            //Recalculate
            await _calculationClient.CalculationByEmployeesAsync(new CalculationFireAndForgetByEmployeeParams()
            {
                EmployeeIds = new List <Guid> {
                    infonavitMovement.EmployeeID
                },
                IdentityWorkID = SessionModel.CompanyID,
                InstanceID     = SessionModel.InstanceID,
                UserID         = SessionModel.IdentityID
            });

            return(Json(new
            {
                infonavitMovement.ID,
                infonavitMovement.EmployeeConceptsRelationID,
            }));
        }