public async Task <HttpResponseMessage> StartWorkFlow(WorkFlowBusiClass entity, bool shoulSend = false) { SecurityManager.ThrowIfUserContextNull(); try { using (UnitOfWork uow = new UnitOfWork()) { #region Validate var cost = BusinessContext.GetBusinessRule <Cost>(this.BusinessRule.OperationAccess, this.BusinessRule.UnitOfWork) .Queryable().Where(dr => dr.ID == entity.ID).SingleOrDefault(); if (cost.Status != ZhivarEnums.CostStatus.Temporary && !shoulSend) { throw new OMFValidationException("این رسید هزینه قبلا ارسال شده است."); } var workFlowQuery = uow.Repository <WorkflowInfo>() .Queryable() .Where(wf => wf.Code == entity.Code) .SingleOrDefault(); var workFlowID = workFlowQuery.ID; var instanceQuery = uow.RepositoryAsync <WorkflowInstance>() .Queryable() .Where(ins => ins.RelatedRecordId == entity.ID && ins.WorkflowInfoId == workFlowID); #endregion dynamic result1; result1 = await WorkflowManager.StartWorkflowAsync(new WorkflowStartInfo() { Code = entity.Code, ExchangeData = entity.ExchangeData, InstanceTitle = entity.InstanceTitle, RelatedRecordId = entity.ID, StarterOrganizationId = entity.OrganizationID, StarterUserId = SecurityManager.CurrentUserContext.UserId, StartType = OMF.Workflow.Enums.StartType.Request }); if (result1.Code == 1) { var workflowInstance = uow.Repository <WorkflowInstance>().Queryable() .Where(ins => ins.RelatedRecordId == entity.ID && ins.Status == WfStateStatus.Open ).SingleOrDefault(); WFExchangeData ex = (WFExchangeData)workflowInstance.InitialExchangeData; ex[WfConstants.StarterOrganizationIdKey] = Convert.ToString(entity.OrganizationID); workflowInstance.InitialExchangeData = (string)ex; workflowInstance.ObjectState = ObjectState.Modified; uow.RepositoryAsync <WorkflowInstance>().Update(workflowInstance); await uow.SaveChangesAsync(); } if (result1.Code == 1) { //InvoiceRule invoiceRule = new InvoiceRule(); //await invoiceRule.UpdateVaziatInvoice(entity.ID, NoeInsertFactor.waitingForConfirmation); return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = (int)ResultCode.Successful, data = new { records = "" } })); } else { return(Request.CreateResponse(HttpStatusCode.InternalServerError, new { resultCode = (int)ResultCode.Exception, data = new { records = "" } })); } } } catch (Exception ex) { return(await this.HandleExceptionAsync(ex)); } }
public async Task <HttpResponseMessage> StartWorkFlow(WorkFlowBusiClass entity) { SecurityManager.ThrowIfUserContextNull(); try { using (UnitOfWork uow = new UnitOfWork()) { #region Validate var invoice = BusinessContext.GetBusinessRule <Invoice>(this.BusinessRule.OperationAccess, this.BusinessRule.UnitOfWork) .Queryable().Where(dr => dr.ID == entity.ID).SingleOrDefault(); if (invoice.Status != NoeInsertFactor.Temporary) { throw new OMFValidationException("این فاکتور قبلا ارسال شده است."); } var workFlowQuery = uow.Repository <WorkflowInfo>() .Queryable() .Where(wf => wf.Code == entity.Code) .SingleOrDefault(); var workFlowID = workFlowQuery.ID; var instanceQuery = uow.RepositoryAsync <WorkflowInstance>() .Queryable() .Where(ins => ins.RelatedRecordId == entity.ID && ins.WorkflowInfoId == workFlowID); #endregion //if (vaziatDarkhast == Enums.VaziatDarkhast.SabteDarkhast && !await instanceQuery.Any()) //{ // var darkhastRule = new DarkhastRule(); // var validateStartWorkflow = new ValidateStartWorkflow(); // var IsPaymentRequire = await darkhastRule.HasPaymentRequire(entity.NoeDarkhastID); //validateStartWorkflow.Validate(new ValidateData //{ // darkhastID = entity.ID, // noeDarkhastID = entity.NoeDarkhastID, // IsPaymentRequire = IsPaymentRequire, // organID = entity.OrganizationID //}); // var validateExchangeData = new ValidateExchangeData(); //entity.ExchangeData = validateExchangeData.CreateExchange(new ValidateExData //{ // RelatedRecordID = entity.ID, // noeDarkhastID = entity.NoeDarkhastID, // ExchangeData = entity.ExchangeData, //}); dynamic result1; //if (entity.NoeDarkhastID == Enums.NoeDarkhastEnum.ENTEGHAL_SARMAIEH_ZABDARI) //{ // var daroukhanehID = Convert.ToInt32(entity.ExchangeData["daroukhanehShakhsIDDovom"]); // var organizationID = uow.Repository<Sherkat>().Queryable() // .Where(dr => dr.ID == daroukhanehID) // .SingleOrDefault().OrganID; result1 = await WorkflowManager.StartWorkflowAsync(new WorkflowStartInfo() { Code = entity.Code, ExchangeData = entity.ExchangeData, InstanceTitle = entity.InstanceTitle, RelatedRecordId = entity.ID, StarterOrganizationId = entity.OrganizationID, StarterUserId = SecurityManager.CurrentUserContext.UserId, StartType = OMF.Workflow.Enums.StartType.Request }); if (result1.Code == 1) { var workflowInstance = uow.Repository <WorkflowInstance>().Queryable() .Where(ins => ins.RelatedRecordId == entity.ID && ins.Status == WfStateStatus.Open ).SingleOrDefault(); WFExchangeData ex = (WFExchangeData)workflowInstance.InitialExchangeData; ex[WfConstants.StarterOrganizationIdKey] = Convert.ToString(entity.OrganizationID); workflowInstance.InitialExchangeData = (string)ex; workflowInstance.ObjectState = ObjectState.Modified; uow.RepositoryAsync <WorkflowInstance>().Update(workflowInstance); await uow.SaveChangesAsync(); } if (result1.Code == 1) { InvoiceRule invoiceRule = new InvoiceRule(); await invoiceRule.UpdateVaziatInvoice(entity.ID, NoeInsertFactor.waitingForConfirmation); return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = (int)ResultCode.Successful, data = new { records = "" } })); } else { return(Request.CreateResponse(HttpStatusCode.InternalServerError, new { resultCode = (int)ResultCode.Exception, data = new { records = "" } })); } } } catch (Exception ex) { return(await this.HandleExceptionAsync(ex)); } }