├── WorkFlowManager.Web ├── Views │ ├── _ViewStart.cshtml │ ├── Account │ │ ├── ExternalLoginFailure.cshtml │ │ ├── ForgotPasswordConfirmation.cshtml │ │ ├── ConfirmEmail.cshtml │ │ ├── ResetPasswordConfirmation.cshtml │ │ ├── SendCode.cshtml │ │ ├── ForgotPassword.cshtml │ │ ├── _ExternalLoginsListPartial.cshtml │ │ ├── VerifyCode.cshtml │ │ ├── ExternalLoginConfirmation.cshtml │ │ ├── Register.cshtml │ │ └── ResetPassword.cshtml │ ├── Shared │ │ ├── Error.cshtml │ │ ├── Lockout.cshtml │ │ ├── EditorTemplates │ │ │ └── _ComplexityEnum.cshtml │ │ ├── _ProcessInformation.cshtml │ │ ├── _WorkFlowTraceStatus.cshtml │ │ ├── _LoginPartial.cshtml │ │ └── _ProcessButton.cshtml │ ├── Home │ │ ├── About.cshtml │ │ ├── Contact.cshtml │ │ └── Index.cshtml │ ├── WorkFlow │ │ ├── EditorTemplates │ │ │ └── NextProcess.cshtml │ │ ├── _DecisionMethod.cshtml │ │ └── _SpecialForms.cshtml │ ├── WorkFlowProcess │ │ ├── TestWorkFlowForm.cshtml │ │ └── HealthInformationWorkFlowForm.cshtml │ ├── Manage │ │ ├── AddPhoneNumber.cshtml │ │ ├── VerifyPhoneNumber.cshtml │ │ ├── SetPassword.cshtml │ │ └── ChangePassword.cshtml │ └── Web.config ├── favicon.ico ├── Global.asax ├── Scripts │ ├── _references.js │ ├── main.js │ └── PostEditor.js ├── Content │ ├── plugins │ │ └── iCheck │ │ │ ├── flat │ │ │ ├── aero.png │ │ │ ├── blue.png │ │ │ ├── flat.png │ │ │ ├── grey.png │ │ │ ├── pink.png │ │ │ ├── red.png │ │ │ ├── aero@2x.png │ │ │ ├── blue@2x.png │ │ │ ├── flat@2x.png │ │ │ ├── green.png │ │ │ ├── grey@2x.png │ │ │ ├── orange.png │ │ │ ├── pink@2x.png │ │ │ ├── purple.png │ │ │ ├── red@2x.png │ │ │ ├── yellow.png │ │ │ ├── green@2x.png │ │ │ ├── orange@2x.png │ │ │ ├── purple@2x.png │ │ │ ├── yellow@2x.png │ │ │ ├── flat.css │ │ │ ├── red.css │ │ │ ├── aero.css │ │ │ ├── blue.css │ │ │ ├── grey.css │ │ │ ├── pink.css │ │ │ ├── green.css │ │ │ ├── orange.css │ │ │ ├── purple.css │ │ │ └── yellow.css │ │ │ ├── line │ │ │ ├── line.png │ │ │ ├── line@2x.png │ │ │ └── line.css │ │ │ ├── minimal │ │ │ ├── aero.png │ │ │ ├── blue.png │ │ │ ├── grey.png │ │ │ ├── pink.png │ │ │ ├── red.png │ │ │ ├── green.png │ │ │ ├── orange.png │ │ │ ├── purple.png │ │ │ ├── red@2x.png │ │ │ ├── yellow.png │ │ │ ├── aero@2x.png │ │ │ ├── blue@2x.png │ │ │ ├── green@2x.png │ │ │ ├── grey@2x.png │ │ │ ├── minimal.png │ │ │ ├── orange@2x.png │ │ │ ├── pink@2x.png │ │ │ ├── purple@2x.png │ │ │ ├── yellow@2x.png │ │ │ ├── minimal@2x.png │ │ │ ├── minimal.css │ │ │ ├── red.css │ │ │ ├── aero.css │ │ │ ├── blue.css │ │ │ ├── grey.css │ │ │ ├── pink.css │ │ │ ├── green.css │ │ │ ├── orange.css │ │ │ ├── purple.css │ │ │ └── yellow.css │ │ │ ├── square │ │ │ ├── aero.png │ │ │ ├── blue.png │ │ │ ├── green.png │ │ │ ├── grey.png │ │ │ ├── pink.png │ │ │ ├── red.png │ │ │ ├── aero@2x.png │ │ │ ├── blue@2x.png │ │ │ ├── grey@2x.png │ │ │ ├── orange.png │ │ │ ├── pink@2x.png │ │ │ ├── purple.png │ │ │ ├── red@2x.png │ │ │ ├── square.png │ │ │ ├── yellow.png │ │ │ ├── green@2x.png │ │ │ ├── orange@2x.png │ │ │ ├── purple@2x.png │ │ │ ├── square@2x.png │ │ │ ├── yellow@2x.png │ │ │ ├── square.css │ │ │ ├── red.css │ │ │ ├── aero.css │ │ │ ├── blue.css │ │ │ ├── grey.css │ │ │ ├── pink.css │ │ │ ├── green.css │ │ │ ├── orange.css │ │ │ ├── purple.css │ │ │ └── yellow.css │ │ │ ├── futurico │ │ │ ├── futurico.png │ │ │ ├── futurico@2x.png │ │ │ └── futurico.css │ │ │ ├── polaris │ │ │ ├── polaris.png │ │ │ ├── polaris@2x.png │ │ │ └── polaris.css │ │ │ └── all.css │ ├── fileUploader.css │ └── site.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── App_Start │ ├── FilterConfig.cs │ └── RouteConfig.cs ├── Models │ ├── WorkFlowTestModel.cs │ └── IdentityModels.cs ├── Startup.cs ├── Global.asax.cs ├── Global.cs ├── ClassDiagram1.cd ├── Infra │ └── WorkFlowFormModelBinder.cs ├── Web.Debug.config ├── Web.Release.config ├── Properties │ └── AssemblyInfo.cs └── Controllers │ └── HomeController.cs ├── WorkFlowManager.Common ├── Dto │ ├── TaskVariable.cs │ └── WorlFlowDto.cs ├── Tables │ ├── TestForm.cs │ ├── WorkFlow.cs │ ├── ProcessMonitoringRole.cs │ ├── WorkFlowEngineVariable.cs │ ├── DecisionMethod.cs │ ├── BusinessProcess.cs │ ├── BaseTable.cs │ ├── Document.cs │ ├── FormView.cs │ ├── ConditionOption.cs │ ├── SubProcess.cs │ ├── WorkFlowTrace.cs │ ├── Condition.cs │ ├── DecisionPoint.cs │ ├── Task.cs │ └── Process.cs ├── Enums │ ├── Gender.cs │ ├── RegistrationStatus.cs │ ├── FormComplexity.cs │ ├── ProcessStatus.cs │ ├── FileType.cs │ ├── MessageType.cs │ ├── MessageDialogType.cs │ ├── ProcessType.cs │ ├── ProjectRole.cs │ └── SystemMessage.cs ├── Mapping │ ├── BaseTableTableMap.cs │ ├── DecisionPointMap.cs │ ├── ConditionMap.cs │ ├── TestFormMap.cs │ ├── ConditionOptionMap.cs │ ├── BaseTableMap.cs │ ├── ProcessMonitoringRoleMap.cs │ ├── WorkFlowTraceMap.cs │ ├── WorkFlowMap.cs │ ├── BusinessProcessMap.cs │ ├── TaskMap.cs │ ├── DecisionMethodMap.cs │ ├── ProcessMap.cs │ ├── FormViewMap.cs │ └── DocumentMap.cs ├── ViewModels │ ├── SubBusinessProcessViewModel.cs │ ├── TestWorkFlowFormViewModel.cs │ ├── WorkFlowTraceVM.cs │ ├── TemplateViewModel.cs │ └── ProcessVM.cs ├── DataAccess │ ├── _UnitOfWork │ │ ├── IUnitOfWork.cs │ │ └── UnitOfWork.cs │ └── Repositories │ │ ├── IDbContext.cs │ │ └── IRepository.cs ├── Constants │ └── IWorkFlowForm.cs ├── Helper │ └── ValidationHelper.cs ├── Validation │ ├── TestFormViewModelValidator.cs │ └── FormViewValidation.cs ├── packages.config ├── App.config ├── InfraStructure │ ├── MultipleButtonAttribute.cs │ └── PagedData.cs ├── Properties │ └── AssemblyInfo.cs └── Factory │ └── ProcessFactory.cs ├── WorkFlowManager.Services ├── app.config ├── DbServices │ ├── IWorkFlow.cs │ ├── DocumentService.cs │ └── DynamicMethodCallService.cs ├── packages.config ├── Properties │ └── AssemblyInfo.cs ├── CustomForms │ └── TestWorkFlowForm.cs └── ClassDiagram1.cd ├── WorkFlowManager.Helper ├── ValidationHelper.cs └── Properties │ └── AssemblyInfo.cs ├── README.md └── WorkFlowManager.sln /WorkFlowManager.Web/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/favicon.ico -------------------------------------------------------------------------------- /WorkFlowManager.Web/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="WorkFlowManager.Web.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Scripts/_references.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Scripts/_references.js -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/aero.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/blue.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/flat.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/grey.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/pink.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/red.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/line/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/line/line.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/aero@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/blue@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/flat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/flat@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/green.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/grey@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/orange.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/pink@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/purple.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/red@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/yellow.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/line/line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/line/line@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/aero.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/blue.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/grey.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/pink.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/red.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/aero.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/blue.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/green.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/grey.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/pink.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/red.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /WorkFlowManager.Web/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /WorkFlowManager.Web/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/green@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/orange@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/purple@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/flat/yellow@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/green.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/orange.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/purple.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/red@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/yellow.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/aero@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/blue@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/grey@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/orange.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/pink@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/purple.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/red@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/square.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/yellow.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/futurico/futurico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/futurico/futurico.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/aero@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/blue@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/green@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/grey@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/minimal.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/orange@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/pink@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/purple@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/yellow@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/polaris/polaris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/polaris/polaris.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/green@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/orange@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/purple@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/square@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/square@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/square/yellow@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/minimal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/minimal/minimal@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/polaris/polaris@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/polaris/polaris@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/futurico/futurico@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alperkarasahin/WorkFlowEngine/HEAD/WorkFlowManager.Web/Content/plugins/iCheck/futurico/futurico@2x.png -------------------------------------------------------------------------------- /WorkFlowManager.Common/Dto/TaskVariable.cs: -------------------------------------------------------------------------------- 1 | namespace WorkFlowManager.Common.Dto 2 | { 3 | public class TaskVariable 4 | { 5 | public int TaskId { get; set; } 6 | public string VariableName { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ExternalLoginFailure.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Login Failure"; 3 | } 4 | 5 |
6 |

@ViewBag.Title.

7 |

Unsuccessful login with service.

8 |
9 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model System.Web.Mvc.HandleErrorInfo 2 | 3 | @{ 4 | ViewBag.Title = "Error"; 5 | } 6 | 7 |

Error.

8 |

An error occurred while processing your request.

9 | 10 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/TestForm.cs: -------------------------------------------------------------------------------- 1 | namespace WorkFlowManager.Common.Tables 2 | { 3 | public class TestForm 4 | { 5 | public int OwnerId { get; set; } 6 | public BaseTable Owner { get; set; } 7 | public int Age { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/WorkFlow.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class WorkFlow : BaseTable 6 | { 7 | public List TaskList { get; set; } 8 | public string Name { get; set; } 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/Gender.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace WorkFlowManager.Common.Enums 4 | { 5 | public enum Gender 6 | { 7 | [Display(Name = "Male")] 8 | Male = 1, 9 | [Display(Name = "Female")] 10 | Female = 2 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/Lockout.cshtml: -------------------------------------------------------------------------------- 1 | @model System.Web.Mvc.HandleErrorInfo 2 | 3 | @{ 4 | ViewBag.Title = "Locked Out"; 5 | } 6 | 7 |
8 |

Locked out.

9 |

This account has been locked out, please try again later.

10 |
11 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ForgotPasswordConfirmation.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Forgot Password Confirmation"; 3 | } 4 | 5 |
6 |

@ViewBag.Title.

7 |
8 |
9 |

10 | Please check your email to reset your password. 11 |

12 |
13 | 14 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/BaseTableTableMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | 3 | namespace WorkFlowManager.Common.Mapping 4 | { 5 | public class BaseTableTableMap : BaseTableMap 6 | { 7 | public BaseTableTableMap() 8 | { 9 | 10 | ToTable("BaseTableTbl"); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/RegistrationStatus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace WorkFlowManager.Common.Enums 8 | { 9 | public enum RegistrationStatus 10 | { 11 | Invited = 10, 12 | Registered = 20 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/DecisionPointMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | 3 | namespace WorkFlowManager.Common.Mapping 4 | { 5 | public class DecisionPointMap : BaseTableMap 6 | { 7 | public DecisionPointMap() 8 | { 9 | ToTable(tableName: "DecisionPointTbl"); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ConfirmEmail.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Confirm Email"; 3 | } 4 | 5 |

@ViewBag.Title.

6 |
7 |

8 | Thank you for confirming your email. Please @Html.ActionLink("Click here to Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" }) 9 |

10 |
11 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/ProcessMonitoringRole.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class ProcessMonitoringRole 6 | { 7 | public int ProcessId { get; set; } 8 | public Process Process { get; set; } 9 | public ProjectRole ProjectRole { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/App_Start/FilterConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Mvc; 3 | 4 | namespace WorkFlowManager.Web 5 | { 6 | public class FilterConfig 7 | { 8 | public static void RegisterGlobalFilters(GlobalFilterCollection filters) 9 | { 10 | filters.Add(new HandleErrorAttribute()); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Home/About.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "About"; 3 | } 4 |

@ViewBag.Title.

5 |

@ViewBag.Message

6 | 7 |

You can show detail information in https://medium.com/@@alperkarasahin/work-flow-engine-with-c-net-mvc-b8ef2f7ecbdf page.

8 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/ViewModels/SubBusinessProcessViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using WorkFlowManager.Common.Tables; 3 | 4 | namespace WorkFlowManager.Common.ViewModels 5 | { 6 | public class SubBusinessProcessViewModel : WorkFlowFormViewModel 7 | { 8 | public List SubBusinessProcessList { get; set; } 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/WorkFlow/EditorTemplates/NextProcess.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Common.ViewModels.NextProcess 2 | 3 | @Html.DropDownListFor(m => m.Process.NextProcessId, Model.MainProcessList, "Select", new { Id = Model.Process.ProcessUniqueCode, onchange = "UserSelectionChanged("+(Model.Process.NextProcessId != null? Model.Process.NextProcessId.ToString() : "\"\"") + ", this);" }) 4 | 5 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/EditorTemplates/_ComplexityEnum.cshtml: -------------------------------------------------------------------------------- 1 | 2 | @using WorkFlowManager.Common.Extensions 3 | @using WorkFlowManager.Common.Enums 4 | 5 | @model WorkFlowManager.Common.Enums.FormComplexity 6 | 7 | @(Html.Kendo().DropDownListFor(m => m) 8 | .OptionLabel("Select...") 9 | .BindTo(EnumHelper.GetSelectList(typeof(FormComplexity))) 10 | ) -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/FormComplexity.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace WorkFlowManager.Common.Enums 4 | { 5 | public enum FormComplexity 6 | { 7 | [Display(Name = "Easy")] 8 | Easy = 5, 9 | 10 | [Display(Name = "Middle")] 11 | Middle = 10, 12 | 13 | [Display(Name = "Complex")] 14 | Complex = 15 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/ProcessStatus.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace WorkFlowManager.Common.Enums 4 | { 5 | public enum ProcessStatus 6 | { 7 | [Display(Name = "Draft")] 8 | Draft = 5, 9 | [Display(Name = "Completed")] 10 | Completed = 10, 11 | [Display(Name = "Cancelled")] 12 | Cancelled = 15, 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/ConditionMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | 3 | namespace WorkFlowManager.Common.Mapping 4 | { 5 | public class ConditionMap : BaseTableMap 6 | { 7 | public ConditionMap() 8 | { 9 | ToTable("ConditionTbl"); 10 | 11 | Property(t => t.VariableName) 12 | .HasMaxLength(20); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/WorkFlowEngineVariable.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class WorkFlowEngineVariable 6 | { 7 | [Key] 8 | public int Id { get; set; } 9 | public int OwnerId { get; set; } 10 | public string Key { get; set; } 11 | public string Value { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/DataAccess/_UnitOfWork/IUnitOfWork.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.DataAccess.Repositories; 2 | using System; 3 | 4 | namespace WorkFlowManager.Common.DataAccess._UnitOfWork 5 | { 6 | public interface IUnitOfWork : IDisposable 7 | { 8 | IRepository Repository() where TEntity : class; 9 | int Complete(); 10 | IDbContext GetContext(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ResetPasswordConfirmation.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Reset password confirmation"; 3 | } 4 | 5 |
6 |

@ViewBag.Title.

7 |
8 |
9 |

10 | Your password has been reset. Please @Html.ActionLink("click here to log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" }) 11 |

12 |
13 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/DataAccess/Repositories/IDbContext.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity; 2 | using System.Data.Entity.Infrastructure; 3 | 4 | namespace WorkFlowManager.Common.DataAccess.Repositories 5 | { 6 | public interface IDbContext 7 | { 8 | IDbSet Set() where T : class; 9 | DbEntityEntry Entry(T entity) where T : class; 10 | int SaveChanges(); 11 | void Dispose(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/FileType.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace WorkFlowManager.Common.Enums 4 | { 5 | public enum FileType 6 | { 7 | 8 | [Display(Name = "Analysis file")] 9 | AnalysisFile = 5, 10 | 11 | [Display(Name = "Process File")] 12 | ProcessFile = 10, 13 | 14 | 15 | [Display(Name = "Process Template File")] 16 | ProcessTemplateFile = 15, 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/MessageType.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace WorkFlowManager.Common.Enums 4 | { 5 | public enum MessageType 6 | { 7 | [Display(Name = "Success!")] 8 | Success = 10, 9 | [Display(Name = "Info!")] 10 | Info = 20, 11 | [Display(Name = "Warning!")] 12 | Warning = 30, 13 | [Display(Name = "Danger!")] 14 | Danger = 40 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Constants/IWorkFlowForm.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | using WorkFlowManager.Common.ViewModels; 3 | 4 | namespace WorkFlowManager.Common.Constants 5 | { 6 | public interface IWorkFlowForm 7 | { 8 | void Save(WorkFlowFormViewModel formData); 9 | bool Validate(WorkFlowFormViewModel formData, ModelStateDictionary modelState); 10 | WorkFlowFormViewModel Load(WorkFlowFormViewModel workFlowFormViewModel); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/_ProcessInformation.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Common.ViewModels.WorkFlowFormViewModel 2 | 3 |
4 |
Task detail [ @Model.ProcessTaskName ]
5 |
6 | 7 |

8 | @Model.ProcessTaskName 9 |

10 |
11 |
-------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/DecisionMethod.cs: -------------------------------------------------------------------------------- 1 | namespace WorkFlowManager.Common.Tables 2 | { 3 | public class DecisionMethod : BaseTable 4 | { 5 | public int TaskId { get; set; } 6 | public Task Task { get; set; } 7 | public string MethodFunction { get; set; } 8 | public string MethodName { get; set; } 9 | 10 | public string MethodDescription { get; set; } 11 | 12 | public bool Completed { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Models/WorkFlowTestModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace WorkFlowManager.Web.Models 4 | { 5 | public class BusinessProcesDto 6 | { 7 | public int BusinessProcessId { get; set; } 8 | public string BusinessProcessName { get; set; } 9 | public int TaskId { get; set; } 10 | } 11 | 12 | public class WorkFlowTestModel 13 | { 14 | public List TestList { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/MessageDialogType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace WorkFlowManager.Common.Enums 9 | { 10 | public enum MessageDialogType 11 | { 12 | [Display(Name = "Admin LTE")] 13 | AdminLTE = 10, 14 | [Display(Name = "BootStrap")] 15 | BootStrap = 20 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /WorkFlowManager.Services/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Dto/WorlFlowDto.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using WorkFlowManager.Common.ViewModels; 3 | 4 | namespace WorkFlowManager.Common.Dto 5 | { 6 | public class WorkFlowDTO 7 | { 8 | public IEnumerable ProgressProcessList { get; set; } 9 | public IEnumerable AuthorizedProcessList { get; set; } 10 | public IEnumerable TargetProcessListForCancel { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/ViewModels/TestWorkFlowFormViewModel.cs: -------------------------------------------------------------------------------- 1 | using FluentValidation.Attributes; 2 | using System.ComponentModel.DataAnnotations; 3 | using WorkFlowManager.Common.Validation; 4 | 5 | namespace WorkFlowManager.Common.ViewModels 6 | { 7 | [Validator(typeof(TestWorkFlowFormViewModelValidator))] 8 | public class TestWorkFlowFormViewModel : WorkFlowFormViewModel 9 | { 10 | [Display(Name = "Your Age")] 11 | public int Age { get; set; } 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/BusinessProcess.cs: -------------------------------------------------------------------------------- 1 | namespace WorkFlowManager.Common.Tables 2 | { 3 | public class BusinessProcess : BaseTable 4 | { 5 | public int? OwnerId { get; set; } 6 | public BusinessProcess Owner { get; set; } 7 | public string Name { get; set; } 8 | 9 | public int? OwnerSubProcessTraceId { get; set; } 10 | public WorkFlowTrace OwnerSubProcessTrace { get; set; } 11 | 12 | public int? RelatedTaskId { get; set; } 13 | public Task RelatedTask { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/TestFormMap.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity.ModelConfiguration; 2 | using WorkFlowManager.Common.Tables; 3 | 4 | namespace WorkFlowManager.Common.Mapping 5 | { 6 | 7 | public class TestFormMap : EntityTypeConfiguration 8 | { 9 | public TestFormMap() 10 | { 11 | 12 | ToTable("TestFormTbl"); 13 | HasKey(x => x.OwnerId); 14 | 15 | HasRequired(s => s.Owner) 16 | .WithRequiredDependent() 17 | .WillCascadeOnDelete(false); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/ConditionOptionMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | 3 | namespace WorkFlowManager.Common.Mapping 4 | { 5 | public class ConditionOptionMap : BaseTableMap 6 | { 7 | public ConditionOptionMap() 8 | { 9 | ToTable(tableName: "ConditionOptionTbl"); 10 | 11 | HasRequired(s => s.Condition) 12 | .WithMany(s => s.OptionList) 13 | .WillCascadeOnDelete(false); 14 | 15 | Property(t => t.Value) 16 | .HasMaxLength(200); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/BaseTable.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace WorkFlowManager.Common.Tables 5 | { 6 | public abstract class BaseTable 7 | { 8 | public ICollection DocumentList { get; set; } 9 | 10 | public int Id { get; set; } 11 | 12 | public ICollection WorkFlowTraceList { get; set; } 13 | 14 | public DateTime CreatedTime { get; set; } 15 | public DateTime? UpdatedTime { get; set; } 16 | public DateTime? LastlyModifiedTime => UpdatedTime ?? CreatedTime; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/Document.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class Document : BaseTable 6 | { 7 | public int OwnerId { get; set; } 8 | public BaseTable Owner { get; set; } 9 | 10 | public FileType FileType { get; set; } 11 | public string FileName { get; set; } 12 | 13 | public string MediaName { get; set; } 14 | public string MimeType { get; set; } 15 | public string Extension { get; set; } 16 | public int Size { get; set; } 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/BaseTableMap.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations.Schema; 2 | using System.Data.Entity.ModelConfiguration; 3 | using WorkFlowManager.Common.Tables; 4 | 5 | namespace WorkFlowManager.Common.Mapping 6 | { 7 | public class BaseTableMap : EntityTypeConfiguration where T : BaseTable 8 | { 9 | public BaseTableMap() 10 | { 11 | // primary key belirtiyoruz. 12 | HasKey(x => x.Id); 13 | Property(x => x.Id) 14 | .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 15 | 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/ViewModels/WorkFlowTraceVM.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | 3 | namespace WorkFlowManager.Common.ViewModels 4 | { 5 | public class WorkFlowTraceVM 6 | { 7 | public int Id { get; set; } 8 | public int OwnerId { get; set; } 9 | public int ProcessId { get; set; } 10 | public string ProcessName { get; set; } 11 | public ProjectRole AssignedRole { get; set; } 12 | public int? ConditionOptionId { get; set; } 13 | public string Description { get; set; } 14 | public ProcessStatus? ProcessStatus { get; set; } 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/ProcessType.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace WorkFlowManager.Common.Enums 4 | { 5 | public enum ProcessType 6 | { 7 | [Description("Process")] 8 | Process = 5, 9 | [Description("Condition")] 10 | Condition = 10, 11 | [Description("Option List")] 12 | OptionList = 15, 13 | [Description("Decision Point")] 14 | DecisionPoint = 20, 15 | [Description("SubProcess")] 16 | SubProcess = 25, 17 | } 18 | 19 | public enum DecisionPointValue 20 | { 21 | NotSet = 0, 22 | Yes = 5, 23 | No = 10 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/ProcessMonitoringRoleMap.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity.ModelConfiguration; 2 | using WorkFlowManager.Common.Tables; 3 | 4 | namespace WorkFlowManager.Common.Mapping 5 | { 6 | public class ProcessMonitoringRoleMap : EntityTypeConfiguration 7 | { 8 | public ProcessMonitoringRoleMap() 9 | { 10 | HasKey(k => new { k.ProcessId, k.ProjectRole }); 11 | 12 | ToTable(tableName: "ProcessMonitoringRoleTbl"); 13 | 14 | HasRequired(s => s.Process) 15 | .WithMany(s => s.MonitoringRoleList) 16 | .WillCascadeOnDelete(false); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/WorkFlowTraceMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | 3 | namespace WorkFlowManager.Common.Mapping 4 | { 5 | public class WorkFlowTraceMap : BaseTableMap 6 | { 7 | public WorkFlowTraceMap() 8 | { 9 | ToTable(tableName: "WorkFlowTraceTbl"); 10 | 11 | HasRequired(s => s.Owner) 12 | .WithMany(s => s.WorkFlowTraceList) 13 | .WillCascadeOnDelete(false); 14 | 15 | Property(s => s.Description) 16 | .HasMaxLength(100); 17 | 18 | Property(s => s.JobId) 19 | .HasMaxLength(50); 20 | 21 | 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/FormView.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class FormView : BaseTable 6 | { 7 | public int TaskId { get; set; } 8 | public Task Task { get; set; } 9 | 10 | public string FormName { get; set; } //Harcama Talimatı Formu 11 | public string FormDescription { get; set; } //Harcama Talimatı Formu 12 | 13 | public string ViewName { get; set; } //HarcamaTalimatiFormu 14 | 15 | public FormComplexity FormComplexity { get; set; } 16 | 17 | public int NumberOfPage { get; set; } 18 | 19 | public bool Completed { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | using System.Web.Routing; 7 | 8 | namespace WorkFlowManager.Web 9 | { 10 | public class RouteConfig 11 | { 12 | public static void RegisterRoutes(RouteCollection routes) 13 | { 14 | routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 15 | 16 | routes.MapRoute( 17 | name: "Default", 18 | url: "{controller}/{action}/{id}", 19 | defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 20 | ); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Home/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Contact"; 3 | } 4 |

@ViewBag.Title.

5 |

@ViewBag.Message

6 | 7 |
8 | Mehmet Alper KARAŞAHİN
9 | alper.karasahin@hotmail.com
10 |
11 | 12 |
13 | Project Description Page : https://medium.com/alperkarasahin/work-flow-engine-with-c-net-mvc-b8ef2f7ecbdf
14 | Project Source Code : https://github.com/alperkarasahin/WorkFlowEngine 15 |
-------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/ConditionOption.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class ConditionOption : Process 6 | { 7 | public ConditionOption() 8 | { 9 | 10 | } 11 | public ConditionOption(Task task, string name, ProjectRole assignedRole, Condition condition, string value = null) : base(task, name, assignedRole) 12 | { 13 | Condition = condition; 14 | Value = value; 15 | condition.AddOption(this); 16 | } 17 | public int ConditionId { get; set; } 18 | public Condition Condition { get; set; } 19 | public string Value { get; set; } 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Helper/ValidationHelper.cs: -------------------------------------------------------------------------------- 1 | using FluentValidation; 2 | using FluentValidation.Results; 3 | 4 | namespace ProgramYonetim.Helper 5 | { 6 | public class ValidationHelper 7 | { 8 | public static bool Validate(TModel model, TValidator validator, 9 | System.Web.Mvc.ModelStateDictionary modelState) 10 | where TValidator : AbstractValidator 11 | { 12 | ValidationResult result = validator.Validate(model); 13 | 14 | foreach (var error in result.Errors) 15 | { 16 | modelState.AddModelError(error.PropertyName, error.ErrorMessage); 17 | } 18 | 19 | return result.IsValid; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Helper/ValidationHelper.cs: -------------------------------------------------------------------------------- 1 | using FluentValidation; 2 | using FluentValidation.Results; 3 | 4 | namespace WorkFlowManager.Helper 5 | { 6 | public class ValidationHelper 7 | { 8 | public static bool Validate(TModel model, TValidator validator, 9 | System.Web.Mvc.ModelStateDictionary modelState) 10 | where TValidator : AbstractValidator 11 | { 12 | ValidationResult result = validator.Validate(model); 13 | 14 | foreach (var error in result.Errors) 15 | { 16 | modelState.AddModelError(error.PropertyName, error.ErrorMessage); 17 | } 18 | 19 | return result.IsValid; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Services/DbServices/IWorkFlow.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | using WorkFlowManager.Common.ViewModels; 3 | 4 | namespace WorkFlowManager.Services.DbServices 5 | { 6 | public interface IWorkFlow 7 | { 8 | void WorkFlowFormSave(WorkFlowFormViewModel satinAlmaOzelFormViewModel) where TClass : class where TVM : WorkFlowFormViewModel; 9 | 10 | bool FormValidate(WorkFlowFormViewModel formData, ModelStateDictionary modelState); 11 | 12 | 13 | void FormSave(WorkFlowFormViewModel formData); 14 | 15 | 16 | string DecisionPointJobCall(string id, string jobId, string hourInterval); 17 | 18 | 19 | bool FullFormValidate(WorkFlowFormViewModel formData, ModelStateDictionary modelState); 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Startup.cs: -------------------------------------------------------------------------------- 1 | using Hangfire; 2 | using Hangfire.SqlServer; 3 | using Microsoft.Owin; 4 | using Owin; 5 | using System; 6 | 7 | [assembly: OwinStartupAttribute(typeof(WorkFlowManager.Web.Startup))] 8 | namespace WorkFlowManager.Web 9 | { 10 | public partial class Startup 11 | { 12 | public void Configuration(IAppBuilder app) 13 | { 14 | ConfigureAuth(app); 15 | 16 | GlobalConfiguration.Configuration 17 | .UseSqlServerStorage( 18 | "WorkFlowManagerDB", 19 | new SqlServerStorageOptions { QueuePollInterval = TimeSpan.FromSeconds(1) }); 20 | 21 | app.UseHangfireDashboard(); 22 | app.UseHangfireServer(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/ProjectRole.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace WorkFlowManager.Common.Enums 5 | { 6 | public enum ProjectRole 7 | { 8 | [Display(Name = "Admin")] 9 | Admin = 10, 10 | 11 | [Display(Name = "Monitor")] 12 | Monitor = 70, 13 | 14 | [Display(Name = "Officer")] 15 | Officer = 80, 16 | 17 | [Display(Name = "Unit Purchasing Officer")] 18 | UnitPurchasingOfficer = 90, 19 | 20 | [Display(Name = "Spending Officer")] 21 | SpendingOfficer = 100, 22 | 23 | [Display(Name = "Purchasing Officer")] 24 | PurchasingOfficer = 110, 25 | 26 | [Display(Name = "System")] 27 | System = 1000 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/WorkFlowProcess/TestWorkFlowForm.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Common.ViewModels.TestWorkFlowFormViewModel 2 | 3 | 4 |
5 | 6 |
7 |
8 |

Age Analyze Form

9 |
10 |
11 |
12 | @Html.HiddenFor(x => x.OwnerId) 13 |
14 | @Html.LabelFor(x => x.Age, new { @class = "col-sm-3 control-label" }) 15 |
16 | @Html.TextBoxFor(x => x.Age, new { @class = "form-control", @type = "number" }) 17 | @Html.ValidationMessageFor(x => x.Age) 18 |
19 |
20 |
21 |
-------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/WorkFlowMap.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations.Schema; 2 | using System.Data.Entity.Infrastructure.Annotations; 3 | using WorkFlowManager.Common.Tables; 4 | 5 | namespace WorkFlowManager.Common.Mapping 6 | { 7 | public class WorkFlowMap : BaseTableMap 8 | { 9 | public WorkFlowMap() 10 | { 11 | ToTable(tableName: "WorkFlowTbl"); 12 | 13 | Property(t => t.Name) 14 | .IsRequired() 15 | .HasMaxLength(100) 16 | .HasColumnAnnotation( 17 | IndexAnnotation.AnnotationName, 18 | new IndexAnnotation( 19 | new IndexAttribute(name: "IX_IsAkisiTanim", order: 1) { IsUnique = true })); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/SubProcess.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using WorkFlowManager.Common.Enums; 4 | 5 | namespace WorkFlowManager.Common.Tables 6 | { 7 | public class SubProcess : Process 8 | { 9 | public SubProcess(Task task, string name, string taskVariableList) 10 | { 11 | Task = task; 12 | Name = name; 13 | AssignedRole = ProjectRole.System; 14 | ProcessUniqueCode = Guid.NewGuid().ToString(); 15 | DocumentList = new HashSet(); 16 | TaskVariableList = taskVariableList; 17 | task.AddProcess(this); 18 | } 19 | public SubProcess() 20 | { 21 | 22 | } 23 | public string TaskVariableList { get; set; } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/_WorkFlowTraceStatus.cshtml: -------------------------------------------------------------------------------- 1 | @model List 2 | @using WorkFlowManager.Common.Extensions 3 | 4 |
    5 | @foreach (var workFlowTrace in Model) 6 | { 7 | var showTask = string.Format("{0}-({1})", workFlowTrace.ProcessName, workFlowTrace.AssignedRole.GetDisplayValue()); 8 |
  • 9 | 10 | @showTask
    11 |
  • 12 | } 13 |
14 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/WorkFlowTrace.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using WorkFlowManager.Common.Enums; 3 | 4 | namespace WorkFlowManager.Common.Tables 5 | { 6 | public class WorkFlowTrace : BaseTable 7 | { 8 | public int OwnerId { get; set; } 9 | public BaseTable Owner { get; set; } 10 | public int ProcessId { get; set; } 11 | public Process Process { get; set; } 12 | public int? ConditionOptionId { get; set; } 13 | public ConditionOption ConditionOption { get; set; } 14 | public string Description { get; set; } 15 | public ProcessStatus ProcessStatus { get; set; } 16 | public string JobId { get; set; } 17 | 18 | public bool IsCondition => Process.GetType() == typeof(Condition); 19 | 20 | public List SubProcessList { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/SendCode.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.SendCodeViewModel 2 | @{ 3 | ViewBag.Title = "Send"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("SendCode", "Account", new { ReturnUrl = Model.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { 9 | @Html.AntiForgeryToken() 10 | @Html.Hidden("rememberMe", @Model.RememberMe) 11 |

Send verification code

12 |
13 |
14 |
15 | Select Two-Factor Authentication Provider: 16 | @Html.DropDownListFor(model => model.SelectedProvider, Model.Providers) 17 | 18 |
19 |
20 | } 21 | 22 | @section Scripts { 23 | @Scripts.Render("~/bundles/jqueryval") 24 | } 25 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/BusinessProcessMap.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity.ModelConfiguration; 2 | using WorkFlowManager.Common.Tables; 3 | 4 | namespace WorkFlowManager.Common.Mapping 5 | { 6 | public class BusinessProcessMap : EntityTypeConfiguration 7 | { 8 | public BusinessProcessMap() 9 | { 10 | ToTable("BusinessProcessTbl"); 11 | 12 | HasOptional(s => s.Owner) 13 | .WithMany() 14 | .WillCascadeOnDelete(false); 15 | 16 | HasOptional(s => s.RelatedTask) 17 | .WithMany() 18 | .HasForeignKey(s => s.RelatedTaskId) 19 | .WillCascadeOnDelete(false); 20 | 21 | 22 | HasOptional(s => s.OwnerSubProcessTrace) 23 | .WithMany(s => s.SubProcessList) 24 | .WillCascadeOnDelete(false); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.WorkFlowTestModel 2 | @{ 3 | ViewBag.Title = "Index"; 4 | Layout = "~/Views/Shared/_Layout.cshtml"; 5 | } 6 | 7 | 8 | 9 |
10 | Work Flow Designer 11 |
12 | 13 |
14 | 15 | 16 | 17 |
18 | 21 | 22 | @foreach (var item in Model.TestList) 23 | { 24 | 25 | 26 |
27 | @item.BusinessProcessName 28 |
29 | 30 |

31 | } 32 | 33 |
34 | 35 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Validation/TestFormViewModelValidator.cs: -------------------------------------------------------------------------------- 1 | using FluentValidation; 2 | using WorkFlowManager.Common.DataAccess._UnitOfWork; 3 | using WorkFlowManager.Common.ViewModels; 4 | 5 | namespace WorkFlowManager.Common.Validation 6 | { 7 | public class TestWorkFlowFormViewModelValidator : AbstractValidator 8 | { 9 | private readonly IUnitOfWork _unitOfWork; 10 | public TestWorkFlowFormViewModelValidator() 11 | { 12 | 13 | } 14 | 15 | public TestWorkFlowFormViewModelValidator(IUnitOfWork unitOfWork) 16 | { 17 | _unitOfWork = unitOfWork; 18 | Validate(); 19 | } 20 | 21 | private void Validate() 22 | { 23 | RuleFor(x => x.Age) 24 | .NotEmpty().WithMessage("Age required") 25 | .LessThan(150).WithMessage("Age must be less than 150"); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/Condition.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using WorkFlowManager.Common.Enums; 3 | 4 | namespace WorkFlowManager.Common.Tables 5 | { 6 | public class Condition : Process 7 | { 8 | public Condition() 9 | { 10 | } 11 | public Condition(Task task, string name, ProjectRole assignedRole, string variableName = null, string description = null, FormView formView = null) : base(task, name, assignedRole, description, formView) 12 | { 13 | OptionList = new List(); 14 | VariableName = variableName; 15 | task.AddProcess(this); 16 | } 17 | 18 | public List OptionList { get; set; } 19 | 20 | public void AddOption(ConditionOption optionList) 21 | { 22 | OptionList.Add(optionList); 23 | } 24 | 25 | public string VariableName { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Enums/SystemMessage.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace WorkFlowManager.Common.Enums 5 | { 6 | public enum SystemMessage 7 | { 8 | [Description("Kayıt başarı ile gerçekleşti.")] 9 | [Display(Name = "Kayıt başarı ile gerçekleşti.")] 10 | RecordSuccess = 10, 11 | 12 | [Description("Kayıt sırasında hata oluştu.")] 13 | [Display(Name = "Kayıt sırasında hata oluştu.")] 14 | RecordFail = 20, 15 | 16 | [Description("Dosya Erişim Yetkisi Yok.")] 17 | [Display(Name = "Dosya Erişim Yetkisi Yok.")] 18 | FileAccessDenied = 30, 19 | 20 | 21 | [Description("ToR oluşturuldu.")] 22 | [Display(Name = "ToR oluşturuldu.")] 23 | ToRCreated = 40, 24 | 25 | [Description("Erişim Yetkisi Yok.")] 26 | [Display(Name = "Erişim Yetkisi Yok.")] 27 | AccessDenied = 50 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/TaskMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | 3 | namespace WorkFlowManager.Common.Mapping 4 | { 5 | public class TaskMap : BaseTableMap 6 | { 7 | public TaskMap() 8 | { 9 | ToTable(tableName: "TaskTbl"); 10 | 11 | //one-to-many 12 | HasRequired(s => s.WorkFlow) // Gorev bir iş akışına bağlı olmalı 13 | .WithMany(s => s.TaskList) // İş akışının birden fazla görevi olabilir 14 | .WillCascadeOnDelete(false); 15 | 16 | Property(t => t.Name) 17 | .IsRequired() 18 | .HasMaxLength(100); 19 | 20 | Property(t => t.MethodServiceName) 21 | .HasMaxLength(100); 22 | 23 | HasOptional(s => s.TopTask) 24 | .WithMany(s => s.SubTaskList) 25 | .HasForeignKey(s => s.TopTaskId) 26 | .WillCascadeOnDelete(false); 27 | 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/_LoginPartial.cshtml: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNet.Identity 2 | @if (Request.IsAuthenticated) 3 | { 4 | using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) 5 | { 6 | @Html.AntiForgeryToken() 7 | 8 | 14 | } 15 | } 16 | else 17 | { 18 | 22 | } 23 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Web.Mvc; 3 | using System.Web.Optimization; 4 | using System.Web.Routing; 5 | using WorkFlowManager.Common.ViewModels; 6 | using WorkFlowManager.Web.Infra; 7 | 8 | namespace WorkFlowManager.Web 9 | { 10 | public class MvcApplication : System.Web.HttpApplication 11 | { 12 | protected void Application_Start() 13 | { 14 | AreaRegistration.RegisterAllAreas(); 15 | 16 | ModelBinders.Binders.Add(typeof(WorkFlowFormViewModel), new WorkFlowFormModelBinder()); 17 | 18 | FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 19 | RouteConfig.RegisterRoutes(RouteTable.Routes); 20 | BundleConfig.RegisterBundles(BundleTable.Bundles); 21 | DependencyRegistrar.RegisterDependencies(); 22 | } 23 | protected void Application_Error(object sender, EventArgs e) 24 | { 25 | Exception exception = Server.GetLastError(); 26 | } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/WorkFlow/_DecisionMethod.cshtml: -------------------------------------------------------------------------------- 1 | @model IEnumerable 2 | 3 |
4 |
5 |
6 |
7 |
8 |

Method Information

9 |
10 |
11 |
12 | 13 | 14 | 15 | 16 | @foreach (var item in Model) 17 | { 18 | 19 | 20 | 21 | } 22 |
NameFunction
@item.MethodName@item.MethodFunction
23 |
24 |
25 |
26 |
-------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/WorkFlow/_SpecialForms.cshtml: -------------------------------------------------------------------------------- 1 | @model IEnumerable 2 | 3 | 4 | 5 | 6 |
7 |
8 |
9 |
10 |
11 |

Form Information

12 |
13 |
14 |
15 | 16 | 17 | 18 | 19 | @foreach (var item in Model) 20 | { 21 | 22 | 23 | 24 | } 25 |
NameView Name
@item.FormName@item.ViewName
26 |
27 |
28 |
29 |
-------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Manage/AddPhoneNumber.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.AddPhoneNumberViewModel 2 | @{ 3 | ViewBag.Title = "Phone Number"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("AddPhoneNumber", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 |

Add a phone number

12 |
13 | @Html.ValidationSummary("", new { @class = "text-danger" }) 14 |
15 | @Html.LabelFor(m => m.Number, new { @class = "col-md-2 control-label" }) 16 |
17 | @Html.TextBoxFor(m => m.Number, new { @class = "form-control" }) 18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 | } 26 | 27 | @section Scripts { 28 | @Scripts.Render("~/bundles/jqueryval") 29 | } 30 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ForgotPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.ForgotPasswordViewModel 2 | @{ 3 | ViewBag.Title = "Forgot your password?"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("ForgotPassword", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 |

Enter your email.

12 |
13 | @Html.ValidationSummary("", new { @class = "text-danger" }) 14 |
15 | @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 16 |
17 | @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 | } 26 | 27 | @section Scripts { 28 | @Scripts.Render("~/bundles/jqueryval") 29 | } 30 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/ViewModels/TemplateViewModel.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | using WorkFlowManager.Common.Tables; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | 7 | namespace WorkFlowManager.Common.ViewModels 8 | { 9 | public class FileUpload 10 | { 11 | public int OwnerId { get; private set; } 12 | public FileType FileType { get; private set; } 13 | 14 | public string ComponentName { get; private set; } 15 | public string TemplateId { get; private set; } 16 | 17 | public ICollection FileList { get; set; } 18 | 19 | public FileUpload(ICollection fileList, FileType fileType, int ownerId) 20 | { 21 | ComponentName = Guid.NewGuid().ToString(); 22 | TemplateId = Guid.NewGuid().ToString(); 23 | 24 | FileList = fileList != null ? fileList.Where(t => t.FileType == fileType).ToList() : null; 25 | FileType = fileType; 26 | OwnerId = ownerId; 27 | } 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/InfraStructure/MultipleButtonAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using System.Web.Mvc; 4 | 5 | namespace WorkFlowManager.Common.InfraStructure 6 | { 7 | 8 | [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 9 | public class MultipleButtonAttribute : ActionNameSelectorAttribute 10 | { 11 | public string Name { get; set; } 12 | public string Argument { get; set; } 13 | 14 | public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) 15 | { 16 | var isValidName = false; 17 | var keyValue = string.Format("{0}:{1}", Name, Argument); 18 | var value = controllerContext.Controller.ValueProvider.GetValue(keyValue); 19 | 20 | if (value != null) 21 | { 22 | controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument; 23 | isValidName = true; 24 | } 25 | 26 | return isValidName; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Global.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNet.Identity; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using WorkFlowManager.Common.Enums; 6 | using WorkFlowManager.Common.Extensions; 7 | 8 | namespace WorkFlowManager.Web 9 | { 10 | 11 | public static class Global 12 | { 13 | 14 | public static string GetUserName() 15 | { 16 | 17 | var User = HttpContext.Current.User; 18 | return User.Identity.GetUserName(); 19 | } 20 | 21 | public static List GetSystemRoles() 22 | { 23 | return ProjectRole.Admin.GetAllValues().Where(x => x.GetDescription() == "SYSTEM").ToList(); 24 | } 25 | 26 | public static List GetUnitRoles() 27 | { 28 | return ProjectRole.Admin.GetAllValues().Where(x => x.GetDescription() == "UNIT").ToList(); 29 | } 30 | 31 | public static List GetAllRoles() 32 | { 33 | return ProjectRole.Admin.GetAllValues().Where(x => x != ProjectRole.System).ToList(); 34 | } 35 | 36 | } 37 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Manage/VerifyPhoneNumber.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.VerifyPhoneNumberViewModel 2 | @{ 3 | ViewBag.Title = "Verify Phone Number"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("VerifyPhoneNumber", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 | @Html.Hidden("phoneNumber", @Model.PhoneNumber) 12 |

Enter verification code

13 |
@ViewBag.Status
14 |
15 | @Html.ValidationSummary("", new { @class = "text-danger" }) 16 |
17 | @Html.LabelFor(m => m.Code, new { @class = "col-md-2 control-label" }) 18 |
19 | @Html.TextBoxFor(m => m.Code, new { @class = "form-control" }) 20 |
21 |
22 |
23 |
24 | 25 |
26 |
27 | } 28 | 29 | @section Scripts { 30 | @Scripts.Render("~/bundles/jqueryval") 31 | } 32 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/ClassDiagram1.cd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | AAAAAAAAAAAAAAAAAAAABAAAAACAAAAAACAAAAEgAAA= 7 | Controllers\WorkFlowProcessController.cs 8 | 9 | 10 | 11 | 12 | 13 | AAQAAIgAQUQBACAAAgAAAAAAAQEiACAGgEEEBAAAAAA= 14 | Controllers\WorkFlowController.cs 15 | 16 | 17 | 18 | 19 | 20 | AAAAIAAAAAAAAAAAAgAAAAAAAAAAACAAAAEABgAAAIA= 21 | Controllers\TestWorkFlowController.cs 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /WorkFlowManager.Services/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Infra/WorkFlowFormModelBinder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using System.Web.Mvc; 4 | using WorkFlowManager.Common.ViewModels; 5 | 6 | namespace WorkFlowManager.Web.Infra 7 | { 8 | public class WorkFlowFormModelBinder : DefaultModelBinder 9 | { 10 | protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) 11 | { 12 | var typeValue = bindingContext.ValueProvider.GetValue("WorkFlowFormType"); 13 | 14 | var asmClass = (string)typeValue.ConvertTo(typeof(string)); 15 | 16 | 17 | var serviceAsmPath = "WorkFlowManager.Common"; 18 | 19 | Assembly asm = Assembly.Load(serviceAsmPath); 20 | Type type = asm.GetType(asmClass); 21 | 22 | if (!typeof(WorkFlowFormViewModel).IsAssignableFrom(type)) 23 | { 24 | throw new InvalidOperationException("Bad Type"); 25 | } 26 | var model = Activator.CreateInstance(type); 27 | bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type); 28 | return model; 29 | } 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/DecisionPoint.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Enums; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class DecisionPoint : Condition 6 | { 7 | public DecisionPoint() 8 | { 9 | 10 | } 11 | public DecisionPoint(Task task, string name, DecisionMethod decisionMethod, string variableName = null, int repetitionFrequenceByHour = 1, string description = null, FormView formView = null) : base(task, name, ProjectRole.System, variableName, description, formView) 12 | { 13 | DecisionMethod = decisionMethod; 14 | RepetitionFrequenceByHour = repetitionFrequenceByHour; 15 | AssignedRole = ProjectRole.System; 16 | task.AddProcess(this); 17 | } 18 | 19 | public int DecisionMethodId { get; set; } 20 | public DecisionMethod DecisionMethod { get; set; } 21 | public int RepetitionFrequenceByHour { get; set; } 22 | 23 | public int? CancelProcessId { get; set; } 24 | public Process CancelProcess { get; set; } 25 | 26 | public string CancelProcessText { get; set; } 27 | public string CancelProcessLabel => (CancelProcessText == null ? "Cancel" : CancelProcessText); 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Work Flow Engine 2 | Simple Work Flow Engine with C# .NET MVC 3 | 4 | You can design simple work flow with using four process type. 5 | * Process: Process which has special form or standart form 6 | * Condition: Process which has more than one direction 7 | * Decision Point: Process which include a method which will be developed. Return value must be [Y]es or [N]o 8 | * Sub Process: Definition for parallel task instance area which includes sub process. 9 | 10 | You can create a relation between all process type. Work flow diagram is showed automatically by mermaid.js 11 | You can select process with single click or edit process with double click inside diagram. 12 | You can run workflow with built in work flow engine. 13 | 14 | Application includes examples of usage below; 15 | * UnitOfWork Pattern 16 | * Repository Pattern 17 | * IOC Container(Autofac) 18 | * mermaid.js 19 | * bootstrap 20 | * AutoMapper 21 | * Reflection 22 | * Hangfire 23 | 24 | After download you should run command below from package manager console with select Default project:WorkFlowManager.Common 25 | 26 | PM> update-database 27 | 28 | Happy Designing ;) 29 | 30 | 31 | You can see detail explanation of application from https://medium.com/@alperkarasahin/work-flow-engine-with-c-net-mvc-b8ef2f7ecbdf 32 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/Task.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace WorkFlowManager.Common.Tables 4 | { 5 | public class Task : BaseTable 6 | { 7 | public Task() 8 | { 9 | ProcessList = new List(); 10 | } 11 | 12 | public void AddProcess(T process) where T : Process 13 | { 14 | ProcessList.Add(process); 15 | } 16 | public int WorkFlowId { get; set; } 17 | public WorkFlow WorkFlow { get; set; } 18 | public string Name { get; set; } 19 | 20 | public int? StartingProcessId { get; set; } 21 | public Process StartingProcess { get; set; } 22 | 23 | public List ProcessList { get; set; } 24 | 25 | public List DecisionMethodList { get; set; } 26 | public List FormViewList { get; set; } 27 | 28 | public string WorkFlowDiagram { get; set; } 29 | 30 | public string MethodServiceName { get; set; } 31 | public string Controller { get; set; } 32 | public string SpecialFormTemplateView { get; set; } 33 | 34 | public int? TopTaskId { get; set; } 35 | public Task TopTask { get; set; } 36 | 37 | public List SubTaskList { get; set; } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Models/IdentityModels.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNet.Identity; 2 | using Microsoft.AspNet.Identity.EntityFramework; 3 | using System.Security.Claims; 4 | using System.Threading.Tasks; 5 | 6 | namespace WorkFlowManager.Web.Models 7 | { 8 | // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 9 | public class ApplicationUser : IdentityUser 10 | { 11 | public async Task GenerateUserIdentityAsync(UserManager manager) 12 | { 13 | // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 14 | var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 15 | // Add custom user claims here 16 | return userIdentity; 17 | } 18 | } 19 | 20 | public class ApplicationDbContext : IdentityDbContext 21 | { 22 | public ApplicationDbContext() 23 | : base("WorkFlowManagerDB", throwIfV1Schema: false) 24 | { 25 | } 26 | 27 | public static ApplicationDbContext Create() 28 | { 29 | return new ApplicationDbContext(); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/_ExternalLoginsListPartial.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.ExternalLoginListViewModel 2 | @using Microsoft.Owin.Security 3 | 4 |

Use another service to log in.

5 |
6 | @{ 7 | var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes(); 8 | if (loginProviders.Count() == 0) { 9 |
10 |

11 | There are no external authentication services configured. See this article 12 | for details on setting up this ASP.NET application to support logging in via external services. 13 |

14 |
15 | } 16 | else { 17 | using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = Model.ReturnUrl })) { 18 | @Html.AntiForgeryToken() 19 |
20 |

21 | @foreach (AuthenticationDescription p in loginProviders) { 22 | 23 | } 24 |

25 |
26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/DecisionMethodMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | using System.ComponentModel.DataAnnotations.Schema; 3 | using System.Data.Entity.Infrastructure.Annotations; 4 | 5 | namespace WorkFlowManager.Common.Mapping 6 | { 7 | public class DecisionMethodMap : BaseTableMap 8 | { 9 | public DecisionMethodMap() 10 | { 11 | ToTable(tableName: "DecisionMethodTbl"); 12 | 13 | 14 | HasRequired(s => s.Task) 15 | .WithMany(s => s.DecisionMethodList) 16 | .WillCascadeOnDelete(false); 17 | 18 | Property(t => t.MethodDescription) 19 | .HasMaxLength(500); 20 | 21 | Property(t => t.TaskId) 22 | .HasColumnAnnotation( 23 | IndexAnnotation.AnnotationName, 24 | new IndexAnnotation( 25 | new IndexAttribute(name: "IX_MetotTanim", order: 1) { IsUnique = true })); 26 | 27 | Property(t => t.MethodName) 28 | .IsRequired() 29 | .HasMaxLength(100) 30 | .HasColumnAnnotation( 31 | IndexAnnotation.AnnotationName, 32 | new IndexAnnotation( 33 | new IndexAttribute(name: "IX_MetotTanim", order: 2) { IsUnique = true })); 34 | 35 | 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/fileUploader.css: -------------------------------------------------------------------------------- 1 | .file-icon { 2 | display: inline-block; 3 | float: left; 4 | width: 48px; 5 | height: 48px; 6 | margin-left: 10px; 7 | margin-top: 13.5px; 8 | } 9 | 10 | .img-file { background-image: url(/content/web/upload/jpg.png) } 11 | .doc-file { background-image: url(/content/web/upload/doc.png) } 12 | .pdf-file { background-image: url(/content/web/upload/pdf.png) } 13 | .xls-file { background-image: url(/content/web/upload/xls.png) } 14 | .zip-file { background-image: url(/content/web/upload/zip.png) } 15 | .default-file { background-image: url(/content/web/upload/default.png) } 16 | 17 | #example .file-heading { 18 | font-family: Arial; 19 | font-size: 1.1em; 20 | display: inline-block; 21 | float: left; 22 | width: 60%; 23 | margin: 0 0 0 20px; 24 | height: 25px; 25 | -ms-text-overflow: ellipsis; 26 | -o-text-overflow: ellipsis; 27 | text-overflow: ellipsis; 28 | overflow:hidden; 29 | white-space:nowrap; 30 | } 31 | 32 | #example .file-name-heading { 33 | font-weight: bold; 34 | margin-top: 20px; 35 | } 36 | 37 | #example .file-size-heading { 38 | font-weight: normal; 39 | font-style: italic; 40 | } 41 | 42 | li.k-file .file-wrapper .k-upload-action { 43 | position: absolute; 44 | top: 0; 45 | right: 0; 46 | } 47 | 48 | li.k-file div.file-wrapper { 49 | position: relative; 50 | height: 75px; 51 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/VerifyCode.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.VerifyCodeViewModel 2 | @{ 3 | ViewBag.Title = "Verify"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("VerifyCode", "Account", new { ReturnUrl = Model.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { 9 | @Html.AntiForgeryToken() 10 | @Html.Hidden("provider", @Model.Provider) 11 | @Html.Hidden("rememberMe", @Model.RememberMe) 12 |

Enter verification code

13 |
14 | @Html.ValidationSummary("", new { @class = "text-danger" }) 15 |
16 | @Html.LabelFor(m => m.Code, new { @class = "col-md-2 control-label" }) 17 |
18 | @Html.TextBoxFor(m => m.Code, new { @class = "form-control" }) 19 |
20 |
21 |
22 |
23 |
24 | @Html.CheckBoxFor(m => m.RememberBrowser) 25 | @Html.LabelFor(m => m.RememberBrowser) 26 |
27 |
28 |
29 |
30 |
31 | 32 |
33 |
34 | } 35 | 36 | @section Scripts { 37 | @Scripts.Render("~/bundles/jqueryval") 38 | } 39 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/ViewModels/ProcessVM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WorkFlowManager.Common.Enums; 3 | using WorkFlowManager.Common.Extensions; 4 | 5 | namespace WorkFlowManager.Common.ViewModels 6 | { 7 | [Serializable] 8 | public class ProcessVM 9 | { 10 | public int Id { get; set; } 11 | public ProjectRole AssignedRole { get; set; } 12 | public int? FormViewId { get; set; } 13 | public string ProcessUniqueCode { get; set; } 14 | public int TaskId { get; set; } 15 | public int? NextProcessId { get; set; } 16 | public string NextText { get; set; } 17 | public string NextLabel => (NextText == null ? "Save/Next" : NextText); 18 | public string Name { get; set; } 19 | public string NameWithRole => Name + " (" + AssignedRole.GetDisplayValue() + ")"; 20 | public string Description { get; set; } 21 | public string SpecialFormAnalysis { get; set; } 22 | public bool IsDescriptionMandatory { get; set; } 23 | public bool IsStandardForm => (FormViewId == null); 24 | public string FormDescription => (Description == null ? Name : Description); 25 | public string MessageForMonitor { get; set; } 26 | public string NotificationMessage => (MessageForMonitor == null ? string.Format("'{0}' Completed.", Name) : MessageForMonitor); 27 | public bool IsCondition { get; set; } 28 | public int? ConditionId { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/ProcessMap.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations.Schema; 2 | using System.Data.Entity.Infrastructure.Annotations; 3 | using WorkFlowManager.Common.Tables; 4 | 5 | namespace WorkFlowManager.Common.Mapping 6 | { 7 | public class ProcessMap : BaseTableMap 8 | { 9 | 10 | public ProcessMap() 11 | { 12 | ToTable(tableName: "ProcessTbl"); 13 | 14 | HasOptional(p => p.NextProcess) 15 | .WithMany() 16 | .HasForeignKey(p => p.NextProcessId); 17 | 18 | Property(t => t.Name) 19 | .IsRequired() 20 | .HasMaxLength(100); 21 | 22 | Property(t => t.MessageForMonitor) 23 | .HasMaxLength(100); 24 | 25 | Property(t => t.Description) 26 | .HasMaxLength(500); 27 | 28 | Ignore(t => t.IsStandardForm); 29 | 30 | Property(t => t.ProcessUniqueCode) 31 | .IsRequired() 32 | .HasMaxLength(100) 33 | .HasColumnAnnotation( 34 | IndexAnnotation.AnnotationName, 35 | new IndexAnnotation( 36 | new IndexAttribute(name: "IX_GorevIslemKodu", order: 1) { IsUnique = true })); 37 | 38 | HasRequired(s => s.Task) 39 | .WithMany(s => s.ProcessList) 40 | .WillCascadeOnDelete(false); 41 | 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Manage/SetPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.SetPasswordViewModel 2 | @{ 3 | ViewBag.Title = "Create Password"; 4 | } 5 | 6 |

@ViewBag.Title.

7 |

8 | You do not have a local username/password for this site. Add a local 9 | account so you can log in without an external login. 10 |

11 | 12 | @using (Html.BeginForm("SetPassword", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 13 | { 14 | @Html.AntiForgeryToken() 15 | 16 |

Create Local Login

17 |
18 | @Html.ValidationSummary("", new { @class = "text-danger" }) 19 |
20 | @Html.LabelFor(m => m.NewPassword, new { @class = "col-md-2 control-label" }) 21 |
22 | @Html.PasswordFor(m => m.NewPassword, new { @class = "form-control" }) 23 |
24 |
25 |
26 | @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 27 |
28 | @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 29 |
30 |
31 |
32 |
33 | 34 |
35 |
36 | } 37 | @section Scripts { 38 | @Scripts.Render("~/bundles/jqueryval") 39 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ExternalLoginConfirmation.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.ExternalLoginConfirmationViewModel 2 | @{ 3 | ViewBag.Title = "Register"; 4 | } 5 |

@ViewBag.Title.

6 |

Associate your @ViewBag.LoginProvider account.

7 | 8 | @using (Html.BeginForm("ExternalLoginConfirmation", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 | 12 |

Association Form

13 |
14 | @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 15 |

16 | You've successfully authenticated with @ViewBag.LoginProvider. 17 | Please enter a user name for this site below and click the Register button to finish 18 | logging in. 19 |

20 |
21 | @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 22 |
23 | @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 24 | @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" }) 25 |
26 |
27 |
28 |
29 | 30 |
31 |
32 | } 33 | 34 | @section Scripts { 35 | @Scripts.Render("~/bundles/jqueryval") 36 | } 37 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("WorkFlowManager.Web")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("WorkFlowManager.Web")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("9eb06702-c84e-46a7-8788-1bcf69f850d4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/Register.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.RegisterViewModel 2 | @{ 3 | ViewBag.Title = "Register"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 |

Create a new account.

12 |
13 | @Html.ValidationSummary("", new { @class = "text-danger" }) 14 |
15 | @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 16 |
17 | @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 18 |
19 |
20 |
21 | @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 22 |
23 | @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 24 |
25 |
26 |
27 | @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 28 |
29 | @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 30 |
31 |
32 |
33 |
34 | 35 |
36 |
37 | } 38 | 39 | @section Scripts { 40 | @Scripts.Render("~/bundles/jqueryval") 41 | } 42 | -------------------------------------------------------------------------------- /WorkFlowManager.Services/DbServices/DocumentService.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.DataAccess._UnitOfWork; 2 | using WorkFlowManager.Common.Tables; 3 | 4 | namespace WorkFlowManager.Services.DbServices 5 | { 6 | public class DocumentService 7 | { 8 | private readonly IUnitOfWork _unitOfWork; 9 | 10 | public DocumentService(IUnitOfWork unitOfWork) 11 | { 12 | _unitOfWork = unitOfWork; 13 | } 14 | public void Add(Document document) 15 | { 16 | Document tmpDocument; 17 | 18 | if (document.Id == 0) //Yeni ekleniyor 19 | { 20 | tmpDocument = new Document(); 21 | 22 | tmpDocument.OwnerId = document.OwnerId; 23 | tmpDocument.Size = document.Size; 24 | tmpDocument.FileName = document.FileName; 25 | tmpDocument.MediaName = document.MediaName; 26 | tmpDocument.MimeType = document.MimeType; 27 | tmpDocument.Extension = document.Extension; 28 | tmpDocument.FileType = document.FileType; 29 | 30 | _unitOfWork.Repository().Add(tmpDocument); 31 | 32 | _unitOfWork.Complete(); 33 | 34 | } 35 | 36 | 37 | } 38 | 39 | public void Remove(Document document) 40 | { 41 | if (document.Id != 0) //Yeni ekleniyor 42 | { 43 | _unitOfWork.Repository().Remove(document.Id); 44 | _unitOfWork.Complete(); 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("WorkFlowManager.Common")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("WorkFlowManager.Common")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("619910d1-5409-4798-a643-03fd8270e01c")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /WorkFlowManager.Helper/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("WorkFlowManager.Helper")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("WorkFlowManager.Helper")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("cae4359a-aabc-4b89-b4b9-675b6c41fbad")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Web.Mvc; 4 | using WorkFlowManager.Common.DataAccess._UnitOfWork; 5 | using WorkFlowManager.Common.Tables; 6 | using WorkFlowManager.Web.Models; 7 | 8 | namespace WorkFlowManager.Web.Controllers 9 | { 10 | public class HomeController : Controller 11 | { 12 | private readonly IUnitOfWork _unitOfWork; 13 | public HomeController(IUnitOfWork unitOfWork) 14 | { 15 | _unitOfWork = unitOfWork; 16 | } 17 | public ActionResult Index() 18 | { 19 | var businessProcessList = _unitOfWork.Repository().GetAll().Where(s => s.RelatedTaskId != null); 20 | 21 | var businessProcessDtoList = new List(); 22 | foreach (var businessProcess in businessProcessList) 23 | { 24 | businessProcessDtoList.Add(new BusinessProcesDto { BusinessProcessId = businessProcess.Id, BusinessProcessName = businessProcess.Name, TaskId = (int)businessProcess.RelatedTaskId }); 25 | } 26 | 27 | return View(new WorkFlowTestModel { TestList = businessProcessDtoList }); 28 | } 29 | 30 | public ActionResult About() 31 | { 32 | ViewBag.Message = "Work Flow Engine Design and Running Examples."; 33 | 34 | return View(); 35 | } 36 | 37 | public ActionResult Contact() 38 | { 39 | ViewBag.Message = ""; 40 | 41 | return View(); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /WorkFlowManager.Services/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("WorkFlowManager.Services")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("WorkFlowManager.Services")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("40a870b8-9178-4cab-9ad0-039fbb39a072")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Manage/ChangePassword.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.ChangePasswordViewModel 2 | @{ 3 | ViewBag.Title = "Change Password"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("ChangePassword", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 |

Change Password Form

12 |
13 | @Html.ValidationSummary("", new { @class = "text-danger" }) 14 |
15 | @Html.LabelFor(m => m.OldPassword, new { @class = "col-md-2 control-label" }) 16 |
17 | @Html.PasswordFor(m => m.OldPassword, new { @class = "form-control" }) 18 |
19 |
20 |
21 | @Html.LabelFor(m => m.NewPassword, new { @class = "col-md-2 control-label" }) 22 |
23 | @Html.PasswordFor(m => m.NewPassword, new { @class = "form-control" }) 24 |
25 |
26 |
27 | @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 28 |
29 | @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 30 |
31 |
32 |
33 |
34 | 35 |
36 |
37 | } 38 | @section Scripts { 39 | @Scripts.Render("~/bundles/jqueryval") 40 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Account/ResetPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Web.Models.ResetPasswordViewModel 2 | @{ 3 | ViewBag.Title = "Reset password"; 4 | } 5 | 6 |

@ViewBag.Title.

7 | 8 | @using (Html.BeginForm("ResetPassword", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 9 | { 10 | @Html.AntiForgeryToken() 11 |

Reset your password.

12 |
13 | @Html.ValidationSummary("", new { @class = "text-danger" }) 14 | @Html.HiddenFor(model => model.Code) 15 |
16 | @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 17 |
18 | @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 19 |
20 |
21 |
22 | @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 23 |
24 | @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 25 |
26 |
27 |
28 | @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 29 |
30 | @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 31 |
32 |
33 |
34 |
35 | 36 |
37 |
38 | } 39 | 40 | @section Scripts { 41 | @Scripts.Render("~/bundles/jqueryval") 42 | } 43 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/flat.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin flat skin, black 2 | ----------------------------------- */ 3 | .icheckbox_flat, 4 | .iradio_flat { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(flat.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat, 51 | .iradio_flat { 52 | background-image: url(flat@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Common/DataAccess/_UnitOfWork/UnitOfWork.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.DataAccess.Repositories; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace WorkFlowManager.Common.DataAccess._UnitOfWork 6 | { 7 | public class UnitOfWork : IUnitOfWork 8 | { 9 | private readonly IDbContext _context; 10 | 11 | private Dictionary _repositories; 12 | 13 | public UnitOfWork(IDbContext context) 14 | { 15 | _context = context; 16 | _repositories = new Dictionary(); 17 | } 18 | 19 | public int Complete() 20 | { 21 | return _context.SaveChanges(); 22 | } 23 | 24 | public void Dispose() 25 | { 26 | _context.Dispose(); 27 | } 28 | 29 | public IDbContext GetContext() 30 | { 31 | return _context; 32 | } 33 | 34 | public IRepository Repository() where TEntity : class 35 | { 36 | if (_repositories == null) 37 | { 38 | _repositories = new Dictionary(); 39 | } 40 | 41 | var type = typeof(TEntity).Name; 42 | 43 | if (_repositories.ContainsKey(type)) 44 | { 45 | return (IRepository)_repositories[type]; 46 | } 47 | 48 | var repositoryType = typeof(BaseRepository<>); 49 | 50 | _repositories.Add(type, Activator.CreateInstance(repositoryType.MakeGenericType(typeof(TEntity)), _context, this)); 51 | 52 | return _repositories[type]; 53 | } 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, red 2 | ----------------------------------- */ 3 | .icheckbox_flat-red, 4 | .iradio_flat-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-red.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-red.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-red.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-red { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-red.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-red.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-red.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-red, 51 | .iradio_flat-red { 52 | background-image: url(red@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_flat-aero, 4 | .iradio_flat-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-aero.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-aero.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-aero.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-aero { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-aero.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-aero.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-aero.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-aero, 51 | .iradio_flat-aero { 52 | background-image: url(aero@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_flat-blue, 4 | .iradio_flat-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-blue.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-blue.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-blue.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-blue { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-blue.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-blue.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-blue.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-blue, 51 | .iradio_flat-blue { 52 | background-image: url(blue@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_flat-grey, 4 | .iradio_flat-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-grey.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-grey.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-grey.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-grey { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-grey.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-grey.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-grey.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-grey, 51 | .iradio_flat-grey { 52 | background-image: url(grey@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_flat-pink, 4 | .iradio_flat-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-pink.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-pink.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-pink.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-pink { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-pink.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-pink.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-pink.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-pink, 51 | .iradio_flat-pink { 52 | background-image: url(pink@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/futurico/futurico.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Futurico skin 2 | ----------------------------------- */ 3 | .icheckbox_futurico, 4 | .iradio_futurico { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 16px; 11 | height: 17px; 12 | background: url(futurico.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_futurico { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_futurico.checked { 21 | background-position: -18px 0; 22 | } 23 | .icheckbox_futurico.disabled { 24 | background-position: -36px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_futurico.checked.disabled { 28 | background-position: -54px 0; 29 | } 30 | 31 | .iradio_futurico { 32 | background-position: -72px 0; 33 | } 34 | .iradio_futurico.checked { 35 | background-position: -90px 0; 36 | } 37 | .iradio_futurico.disabled { 38 | background-position: -108px 0; 39 | cursor: default; 40 | } 41 | .iradio_futurico.checked.disabled { 42 | background-position: -126px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_futurico, 51 | .iradio_futurico { 52 | background-image: url(futurico@2x.png); 53 | -webkit-background-size: 144px 19px; 54 | background-size: 144px 19px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, green 2 | ----------------------------------- */ 3 | .icheckbox_flat-green, 4 | .iradio_flat-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-green.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-green.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-green.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-green { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-green.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-green.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-green.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-green, 51 | .iradio_flat-green { 52 | background-image: url(green@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_flat-orange, 4 | .iradio_flat-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-orange.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-orange.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-orange.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-orange { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-orange.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-orange.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-orange.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-orange, 51 | .iradio_flat-orange { 52 | background-image: url(orange@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_flat-purple, 4 | .iradio_flat-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-purple.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-purple.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-purple.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-purple { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-purple.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-purple.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-purple.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-purple, 51 | .iradio_flat-purple { 52 | background-image: url(purple@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/flat/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_flat-yellow, 4 | .iradio_flat-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-yellow.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-yellow.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-yellow.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-yellow { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-yellow.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-yellow.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-yellow.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-yellow, 51 | .iradio_flat-yellow { 52 | background-image: url(yellow@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/site.css: -------------------------------------------------------------------------------- 1 | .site-header{ 2 | background: #2c3e50; 3 | color: #eee; 4 | margin-bottom:20px; 5 | } 6 | 7 | .site-header .page-header{ 8 | border:none; 9 | padding:0; 10 | margin-top:20px; 11 | margin-bottom:10px; 12 | } 13 | 14 | .site-header.page-header small { 15 | color: #ddd; 16 | font-size:16pt; 17 | } 18 | 19 | .site-header a { 20 | color:#fff; 21 | text-decoration:none; 22 | } 23 | 24 | 25 | .post > h1 { 26 | font-size:16pt; 27 | padding:0; 28 | margin:0; 29 | margin-bottom:5px; 30 | height:41px; 31 | line-height:41px; 32 | } 33 | 34 | .sidebar .tags .list-group a { 35 | position: relative; 36 | background:transparent; 37 | border-radius:0; 38 | } 39 | 40 | .sidebar .tags .list-group a .name { 41 | z-index:2; 42 | position:relative; 43 | } 44 | 45 | .sidebar .tags .list-group a .badge { 46 | z-index:5; 47 | position:relative; 48 | } 49 | 50 | .sidebar .tags .list-group a:hover { 51 | background:#ddd; 52 | } 53 | 54 | .sidebar .tags .progress-bar { 55 | background: #ddd; 56 | border:none; 57 | box-shadow:none; 58 | } 59 | 60 | .sidebar .tags .progress { 61 | display: block; 62 | position: absolute; 63 | top:0; 64 | left:0; 65 | width:100%; 66 | height:100%; 67 | z-index:1; 68 | padding:6px; 69 | margin:0; 70 | background: transparent; 71 | } 72 | 73 | .post{ 74 | margin-bottom:20px; 75 | } 76 | 77 | .post footer{ 78 | background: #eee; 79 | padding:10px; 80 | overflow:hidden; 81 | font-size:10pt; 82 | color:#aaa; 83 | } 84 | 85 | .post .tags { 86 | margin :0; 87 | margin-top:-1px; 88 | } 89 | 90 | .post .tags li{ 91 | float: left; 92 | margin-right: 5px; 93 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/square.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, black 2 | ----------------------------------- */ 3 | .icheckbox_square, 4 | .iradio_square { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(square.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square, 57 | .iradio_square { 58 | background-image: url(square@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/all.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin skins 2 | ----------------------------------- */ 3 | @import url("minimal/_all.css"); 4 | /* 5 | @import url("minimal/minimal.css"); 6 | @import url("minimal/red.css"); 7 | @import url("minimal/green.css"); 8 | @import url("minimal/blue.css"); 9 | @import url("minimal/aero.css"); 10 | @import url("minimal/grey.css"); 11 | @import url("minimal/orange.css"); 12 | @import url("minimal/yellow.css"); 13 | @import url("minimal/pink.css"); 14 | @import url("minimal/purple.css"); 15 | */ 16 | 17 | @import url("square/_all.css"); 18 | /* 19 | @import url("square/square.css"); 20 | @import url("square/red.css"); 21 | @import url("square/green.css"); 22 | @import url("square/blue.css"); 23 | @import url("square/aero.css"); 24 | @import url("square/grey.css"); 25 | @import url("square/orange.css"); 26 | @import url("square/yellow.css"); 27 | @import url("square/pink.css"); 28 | @import url("square/purple.css"); 29 | */ 30 | 31 | @import url("flat/_all.css"); 32 | /* 33 | @import url("flat/flat.css"); 34 | @import url("flat/red.css"); 35 | @import url("flat/green.css"); 36 | @import url("flat/blue.css"); 37 | @import url("flat/aero.css"); 38 | @import url("flat/grey.css"); 39 | @import url("flat/orange.css"); 40 | @import url("flat/yellow.css"); 41 | @import url("flat/pink.css"); 42 | @import url("flat/purple.css"); 43 | */ 44 | 45 | @import url("line/_all.css"); 46 | /* 47 | @import url("line/line.css"); 48 | @import url("line/red.css"); 49 | @import url("line/green.css"); 50 | @import url("line/blue.css"); 51 | @import url("line/aero.css"); 52 | @import url("line/grey.css"); 53 | @import url("line/orange.css"); 54 | @import url("line/yellow.css"); 55 | @import url("line/pink.css"); 56 | @import url("line/purple.css"); 57 | */ 58 | 59 | @import url("polaris/polaris.css"); 60 | 61 | @import url("futurico/futurico.css"); -------------------------------------------------------------------------------- /WorkFlowManager.Common/DataAccess/Repositories/IRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq.Expressions; 4 | using System.Threading.Tasks; 5 | 6 | namespace WorkFlowManager.Common.DataAccess.Repositories 7 | { 8 | public interface IRepository where TEntity : class 9 | { 10 | TEntity Get(int id); 11 | IEnumerable GetAll(); 12 | IEnumerable Find(Expression> predicate); 13 | Task> FindAsync(Expression> predicate); 14 | 15 | void Add(TEntity entity); 16 | void AddRange(IEnumerable entities); 17 | 18 | 19 | void Remove(TEntity entity); 20 | void Remove(int id); 21 | void RemoveRange(IEnumerable entities); 22 | 23 | 24 | TEntity Get(Expression> query = null, params Expression>[] includeExpressions); 25 | 26 | TEntity GetForUpdate(Expression> query = null, params Expression>[] includeExpressions); 27 | 28 | 29 | 30 | TEntity Get(Expression> query = null); 31 | 32 | IEnumerable GetList(Expression> query = null, params Expression>[] includeExpressions); 33 | IEnumerable GetListForUpdate(Expression> query = null, params Expression>[] includeExpressions); 34 | Task> GetListAsync(Expression> query = null, params Expression>[] includeExpressions); 35 | 36 | int GetCount(Expression> query = null); 37 | 38 | void Update(TEntity entity); 39 | IRepository GetRepository() where T : class; 40 | } 41 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/polaris/polaris.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Polaris skin 2 | ----------------------------------- */ 3 | .icheckbox_polaris, 4 | .iradio_polaris { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 29px; 11 | height: 29px; 12 | background: url(polaris.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_polaris { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_polaris.hover { 21 | background-position: -31px 0; 22 | } 23 | .icheckbox_polaris.checked { 24 | background-position: -62px 0; 25 | } 26 | .icheckbox_polaris.disabled { 27 | background-position: -93px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_polaris.checked.disabled { 31 | background-position: -124px 0; 32 | } 33 | 34 | .iradio_polaris { 35 | background-position: -155px 0; 36 | } 37 | .iradio_polaris.hover { 38 | background-position: -186px 0; 39 | } 40 | .iradio_polaris.checked { 41 | background-position: -217px 0; 42 | } 43 | .iradio_polaris.disabled { 44 | background-position: -248px 0; 45 | cursor: default; 46 | } 47 | .iradio_polaris.checked.disabled { 48 | background-position: -279px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_polaris, 57 | .iradio_polaris { 58 | background-image: url(polaris@2x.png); 59 | -webkit-background-size: 310px 31px; 60 | background-size: 310px 31px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/minimal.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, black 2 | ----------------------------------- */ 3 | .icheckbox_minimal, 4 | .iradio_minimal { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(minimal.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal, 57 | .iradio_minimal { 58 | background-image: url(minimal@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, red 2 | ----------------------------------- */ 3 | .icheckbox_square-red, 4 | .iradio_square-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-red.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-red.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-red.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-red.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-red { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-red.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-red.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-red.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-red.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-red, 57 | .iradio_square-red { 58 | background-image: url(red@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, red 2 | ----------------------------------- */ 3 | .icheckbox_minimal-red, 4 | .iradio_minimal-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-red.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-red.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-red.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-red.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-red { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-red.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-red.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-red.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-red.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-red, 57 | .iradio_minimal-red { 58 | background-image: url(red@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_square-aero, 4 | .iradio_square-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-aero.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-aero.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-aero.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-aero.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-aero { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-aero.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-aero.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-aero.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-aero.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-aero, 57 | .iradio_square-aero { 58 | background-image: url(aero@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_square-blue, 4 | .iradio_square-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-blue.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-blue.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-blue.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-blue.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-blue { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-blue.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-blue.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-blue.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-blue.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-blue, 57 | .iradio_square-blue { 58 | background-image: url(blue@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_square-grey, 4 | .iradio_square-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-grey.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-grey.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-grey.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-grey.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-grey { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-grey.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-grey.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-grey.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-grey.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-grey, 57 | .iradio_square-grey { 58 | background-image: url(grey@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_square-pink, 4 | .iradio_square-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-pink.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-pink.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-pink.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-pink.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-pink { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-pink.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-pink.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-pink.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-pink.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-pink, 57 | .iradio_square-pink { 58 | background-image: url(pink@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/FormViewMap.cs: -------------------------------------------------------------------------------- 1 | using WorkFlowManager.Common.Tables; 2 | using System.ComponentModel.DataAnnotations.Schema; 3 | using System.Data.Entity.Infrastructure.Annotations; 4 | 5 | namespace WorkFlowManager.Common.Mapping 6 | { 7 | public class FormViewMap : BaseTableMap 8 | { 9 | public FormViewMap() 10 | { 11 | ToTable(tableName: "FormViewTbl"); 12 | 13 | HasRequired(s => s.Task) 14 | .WithMany(s => s.FormViewList) 15 | .WillCascadeOnDelete(false); 16 | 17 | 18 | Property(t => t.TaskId) 19 | .IsRequired() 20 | .HasColumnAnnotation( 21 | IndexAnnotation.AnnotationName, 22 | new IndexAnnotation(new[] 23 | { 24 | new IndexAttribute(name: "IX_FormTanim", order: 1) { IsUnique = true }, 25 | new IndexAttribute(name: "IX_FormViewName", order: 1) { IsUnique = true }, 26 | }) 27 | ); 28 | 29 | Property(t => t.FormName) 30 | .IsRequired() 31 | .HasMaxLength(50) 32 | .HasColumnAnnotation( 33 | IndexAnnotation.AnnotationName, 34 | new IndexAnnotation( 35 | new IndexAttribute(name: "IX_FormTanim", order: 2) { IsUnique = true })); 36 | 37 | 38 | Property(t => t.FormDescription) 39 | .HasMaxLength(500); 40 | 41 | Property(t => t.ViewName) 42 | .IsRequired() 43 | .HasMaxLength(50) 44 | .HasColumnAnnotation( 45 | IndexAnnotation.AnnotationName, 46 | new IndexAnnotation( 47 | new IndexAttribute(name: "IX_FormViewName", order: 2) { IsUnique = true })); 48 | 49 | 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_minimal-aero, 4 | .iradio_minimal-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-aero.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-aero.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-aero.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-aero.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-aero { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-aero.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-aero.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-aero.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-aero.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-aero, 57 | .iradio_minimal-aero { 58 | background-image: url(aero@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_minimal-blue, 4 | .iradio_minimal-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-blue.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-blue.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-blue.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-blue.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-blue { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-blue.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-blue.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-blue.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-blue.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-blue, 57 | .iradio_minimal-blue { 58 | background-image: url(blue@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_minimal-grey, 4 | .iradio_minimal-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-grey.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-grey.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-grey.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-grey.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-grey { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-grey.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-grey.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-grey.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-grey.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-grey, 57 | .iradio_minimal-grey { 58 | background-image: url(grey@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_minimal-pink, 4 | .iradio_minimal-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-pink.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-pink.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-pink.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-pink.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-pink { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-pink.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-pink.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-pink.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-pink.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-pink, 57 | .iradio_minimal-pink { 58 | background-image: url(pink@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, green 2 | ----------------------------------- */ 3 | .icheckbox_square-green, 4 | .iradio_square-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-green.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-green.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-green.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-green.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-green { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-green.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-green.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-green.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-green.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-green, 57 | .iradio_square-green { 58 | background-image: url(green@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, green 2 | ----------------------------------- */ 3 | .icheckbox_minimal-green, 4 | .iradio_minimal-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-green.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-green.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-green.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-green.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-green { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-green.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-green.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-green.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-green.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-green, 57 | .iradio_minimal-green { 58 | background-image: url(green@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_square-orange, 4 | .iradio_square-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-orange.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-orange.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-orange.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-orange.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-orange { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-orange.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-orange.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-orange.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-orange.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-orange, 57 | .iradio_square-orange { 58 | background-image: url(orange@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_square-purple, 4 | .iradio_square-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-purple.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-purple.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-purple.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-purple.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-purple { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-purple.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-purple.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-purple.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-purple.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-purple, 57 | .iradio_square-purple { 58 | background-image: url(purple@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/square/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_square-yellow, 4 | .iradio_square-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-yellow.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-yellow.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-yellow.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-yellow.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-yellow { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-yellow.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-yellow.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-yellow.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-yellow.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-yellow, 57 | .iradio_square-yellow { 58 | background-image: url(yellow@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Common/InfraStructure/PagedData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Web; 6 | 7 | namespace WorkFlowManager.Common.InfraStructure 8 | { 9 | public class PagedData : IEnumerable 10 | { 11 | private readonly IEnumerable _currentItems; 12 | public int TotalCount { get; private set; } 13 | public int Page { get; private set; } 14 | public int PerPage { get; private set; } 15 | public int TotalPages { get; private set; } 16 | 17 | public bool HasNextPage { get; private set; } 18 | public bool HasPreviousPage { get; private set; } 19 | 20 | public int NextPage 21 | { 22 | get 23 | { 24 | if (!HasNextPage) 25 | throw new InvalidOperationException(); 26 | return Page + 1; 27 | } 28 | } 29 | 30 | public int PreviousPage 31 | { 32 | get 33 | { 34 | if (!HasPreviousPage) 35 | throw new InvalidOperationException(); 36 | 37 | return Page - 1; 38 | } 39 | } 40 | 41 | public PagedData(IEnumerable currentItems, int totalCount, int page, int perPage) 42 | { 43 | _currentItems = currentItems; 44 | TotalCount = totalCount; 45 | Page = page; 46 | PerPage = perPage; 47 | 48 | TotalPages = (int)Math.Ceiling((float)TotalCount / PerPage); 49 | HasNextPage = Page < TotalPages; 50 | HasPreviousPage = Page > 1; 51 | } 52 | 53 | public IEnumerator GetEnumerator() 54 | { 55 | return _currentItems.GetEnumerator(); 56 | } 57 | 58 | IEnumerator IEnumerable.GetEnumerator() 59 | { 60 | return GetEnumerator(); 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_minimal-orange, 4 | .iradio_minimal-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-orange.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-orange.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-orange.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-orange.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-orange { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-orange.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-orange.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-orange.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-orange.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-orange, 57 | .iradio_minimal-orange { 58 | background-image: url(orange@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_minimal-purple, 4 | .iradio_minimal-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-purple.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-purple.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-purple.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-purple.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-purple { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-purple.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-purple.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-purple.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-purple.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-purple, 57 | .iradio_minimal-purple { 58 | background-image: url(purple@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/minimal/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_minimal-yellow, 4 | .iradio_minimal-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-yellow.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-yellow.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-yellow.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-yellow.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-yellow { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-yellow.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-yellow.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-yellow.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-yellow.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-yellow, 57 | .iradio_minimal-yellow { 58 | background-image: url(yellow@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/WorkFlowProcess/HealthInformationWorkFlowForm.cshtml: -------------------------------------------------------------------------------- 1 | @model WorkFlowManager.Common.ViewModels.SubBusinessProcessViewModel 2 | 3 | 4 |
5 | 6 |
7 |
8 |

Health Information Sub Process Starting Area

9 |
10 |
11 |
12 | @Html.HiddenFor(x => x.OwnerId) 13 | 14 | 15 | @if (Model.SubBusinessProcessList != null) 16 | { 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | @foreach (var item in Model.SubBusinessProcessList) 26 | { 27 | 28 | 31 | 45 | 46 | } 47 | 48 |
NameSub Process
29 | @item.Name 30 | 32 | @if (item.Name == "Psychotechnique Result") 33 | { 34 | 35 |
36 |
37 | } 38 | else 39 | { 40 | 41 |
42 |
43 | } 44 |
49 | } 50 |
51 |
-------------------------------------------------------------------------------- /WorkFlowManager.Common/Mapping/DocumentMap.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations.Schema; 2 | using System.Data.Entity.Infrastructure.Annotations; 3 | using WorkFlowManager.Common.Tables; 4 | 5 | namespace WorkFlowManager.Common.Mapping 6 | { 7 | public class DocumentMap : BaseTableMap 8 | { 9 | public DocumentMap() 10 | { 11 | ToTable("DocumentTbl"); 12 | 13 | //one-to-many 14 | HasRequired(s => s.Owner) // Belge nin belge islemi 15 | .WithMany(s => s.DocumentList) // Belge işlemin birden çok belgesi olabilir 16 | .WillCascadeOnDelete(false); 17 | 18 | 19 | Property(s => s.MediaName) 20 | .IsRequired() 21 | .HasMaxLength(50) 22 | .HasColumnAnnotation( 23 | IndexAnnotation.AnnotationName, 24 | new IndexAnnotation( 25 | new IndexAttribute("IX_FileMediaName", 1) { IsUnique = true })); 26 | 27 | 28 | Property(s => s.FileType) 29 | .IsRequired(); 30 | 31 | 32 | Property(s => s.FileName) 33 | .IsRequired() 34 | .HasMaxLength(255); 35 | 36 | Property(s => s.MimeType) 37 | .IsRequired() 38 | .HasMaxLength(255); 39 | 40 | Property(s => s.Extension) 41 | .IsRequired() 42 | .HasMaxLength(10); 43 | 44 | Property(t => t.OwnerId) 45 | .IsRequired() 46 | .HasColumnAnnotation( 47 | IndexAnnotation.AnnotationName, 48 | new IndexAnnotation( 49 | new IndexAttribute("IX_FileOwner", 1) { IsUnique = true })); 50 | 51 | Property(t => t.FileName) 52 | .IsRequired() 53 | .HasColumnAnnotation( 54 | IndexAnnotation.AnnotationName, 55 | new IndexAnnotation( 56 | new IndexAttribute("IX_FileOwner", 2) { IsUnique = true })); 57 | 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /WorkFlowManager.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkFlowManager.Common", "WorkFlowManager.Common\WorkFlowManager.Common.csproj", "{619910D1-5409-4798-A643-03FD8270E01C}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkFlowManager.Services", "WorkFlowManager.Services\WorkFlowManager.Services.csproj", "{40A870B8-9178-4CAB-9AD0-039FBB39A072}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkFlowManager.Web", "WorkFlowManager.Web\WorkFlowManager.Web.csproj", "{6E9AB0AE-EADC-4C6B-BFE3-404E1F0BAF3E}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {619910D1-5409-4798-A643-03FD8270E01C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {619910D1-5409-4798-A643-03FD8270E01C}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {619910D1-5409-4798-A643-03FD8270E01C}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {619910D1-5409-4798-A643-03FD8270E01C}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {40A870B8-9178-4CAB-9AD0-039FBB39A072}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {40A870B8-9178-4CAB-9AD0-039FBB39A072}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {40A870B8-9178-4CAB-9AD0-039FBB39A072}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {40A870B8-9178-4CAB-9AD0-039FBB39A072}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {6E9AB0AE-EADC-4C6B-BFE3-404E1F0BAF3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {6E9AB0AE-EADC-4C6B-BFE3-404E1F0BAF3E}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {6E9AB0AE-EADC-4C6B-BFE3-404E1F0BAF3E}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {6E9AB0AE-EADC-4C6B-BFE3-404E1F0BAF3E}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | EndGlobal 35 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Tables/Process.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using WorkFlowManager.Common.Enums; 4 | using WorkFlowManager.Common.Extensions; 5 | 6 | namespace WorkFlowManager.Common.Tables 7 | { 8 | public class Process : BaseTable 9 | { 10 | public ProjectRole AssignedRole { get; set; } 11 | public int? FormViewId { get; set; } 12 | public FormView FormView { get; set; } 13 | public List MonitoringRoleList { get; set; } 14 | public string ProcessUniqueCode { get; set; } 15 | public int TaskId { get; set; } 16 | public Task Task { get; set; } 17 | public int? NextProcessId { get; set; } 18 | public Process NextProcess { get; set; } 19 | public string NextText { get; set; } 20 | public string Name { get; set; } 21 | public string Description { get; set; } 22 | public string SpecialFormAnalysis { get; set; } 23 | public bool IsDescriptionMandatory { get; set; } 24 | public string MessageForMonitor { get; set; } 25 | public string NextLabel => (NextText == null ? "Save/Next" : NextText); 26 | public bool IsStandardForm => (FormViewId == null); 27 | public string NameWithRole => Name + " (" + AssignedRole.GetDisplayValue() + ")"; 28 | public string FormDescription => (Description == null ? Name : Description); 29 | public string NotificationMessage => (MessageForMonitor == null ? Name : MessageForMonitor); 30 | public override string ToString() 31 | { 32 | return Name.ToString(); 33 | } 34 | public Process(Task task, string name, ProjectRole assignedRole, string description = null, FormView formView = null) 35 | { 36 | Task = task; 37 | Name = name; 38 | AssignedRole = assignedRole; 39 | Description = description; 40 | FormView = formView; 41 | ProcessUniqueCode = Guid.NewGuid().ToString(); 42 | DocumentList = new HashSet(); 43 | task.AddProcess(this); 44 | } 45 | public Process() 46 | { 47 | 48 | } 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /WorkFlowManager.Services/CustomForms/TestWorkFlowForm.cs: -------------------------------------------------------------------------------- 1 | using AutoMapper; 2 | using System.Web.Mvc; 3 | using WorkFlowManager.Common.Constants; 4 | using WorkFlowManager.Common.DataAccess._UnitOfWork; 5 | using WorkFlowManager.Common.Tables; 6 | using WorkFlowManager.Common.Validation; 7 | using WorkFlowManager.Common.ViewModels; 8 | using WorkFlowManager.Helper; 9 | using WorkFlowManager.Services.DbServices; 10 | 11 | namespace WorkFlowManager.Services.CustomForms 12 | { 13 | public class TestWorkFlowForm : IWorkFlowForm 14 | { 15 | private readonly TestWorkFlowProcessService _testWorkFlowProcessService; 16 | private readonly IUnitOfWork _unitOfWork; 17 | 18 | public TestWorkFlowForm(IUnitOfWork unitOfWork, TestWorkFlowProcessService testWorkFlowProcessService) 19 | { 20 | _unitOfWork = unitOfWork; 21 | _testWorkFlowProcessService = testWorkFlowProcessService; 22 | } 23 | 24 | public void Save(WorkFlowFormViewModel formData) 25 | { 26 | _testWorkFlowProcessService.WorkFlowFormSave(formData); 27 | } 28 | 29 | public bool Validate(WorkFlowFormViewModel formData, ModelStateDictionary modelState) 30 | { 31 | return ValidationHelper.Validate((TestWorkFlowFormViewModel)formData, new TestWorkFlowFormViewModelValidator(_unitOfWork), modelState); 32 | } 33 | 34 | public WorkFlowFormViewModel Load(WorkFlowFormViewModel workFlowFormViewModel) 35 | { 36 | TestForm testForm = _unitOfWork.Repository().Get(x => x.OwnerId == workFlowFormViewModel.OwnerId); 37 | 38 | if (testForm == null) 39 | { 40 | testForm = new TestForm(); 41 | testForm.OwnerId = workFlowFormViewModel.OwnerId; 42 | _unitOfWork.Repository().Add(testForm); 43 | _unitOfWork.Complete(); 44 | } 45 | TestWorkFlowFormViewModel testFormViewModel = Mapper.Map(testForm); 46 | Mapper.Map(workFlowFormViewModel, testFormViewModel); 47 | 48 | return testFormViewModel; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Views/Shared/_ProcessButton.cshtml: -------------------------------------------------------------------------------- 1 | @using WorkFlowManager.Common.Enums 2 | @model WorkFlowManager.Common.ViewModels.WorkFlowFormViewModel 3 | 4 | 5 | @if (Model.ProcessAssignedRole != ProjectRole.System) 6 | { 7 | 8 | 9 | 10 | 11 | if (Model.TargetProcessListForCancel.Count()>0) 12 | { 13 |
14 | 17 | 23 |
24 | 25 | 34 | 35 | } 36 | Home 37 | } 38 | else 39 | { 40 | if (Model.IptalEdilebilir) 41 | { 42 | 43 | @Model.IptalText 44 | 45 | } 46 | 47 | Home 48 | } 49 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Validation/FormViewValidation.cs: -------------------------------------------------------------------------------- 1 | using FluentValidation; 2 | using FluentValidation.Results; 3 | using WorkFlowManager.Common.DataAccess._UnitOfWork; 4 | using WorkFlowManager.Common.DataAccess.Repositories; 5 | using WorkFlowManager.Common.Tables; 6 | using WorkFlowManager.Common.ViewModels; 7 | 8 | namespace WorkFlowManager.Common.Validation 9 | { 10 | public class FormViewValidation : AbstractValidator 11 | { 12 | private readonly IDbContext _context; 13 | private readonly IUnitOfWork _unitOfWork; 14 | 15 | public FormViewValidation() 16 | { 17 | Validate(); 18 | } 19 | 20 | public FormViewValidation(IUnitOfWork unitOfWork) 21 | { 22 | _unitOfWork = unitOfWork; 23 | _context = unitOfWork.GetContext(); 24 | Validate(); 25 | } 26 | 27 | private void Validate() 28 | { 29 | RuleFor(x => x.FormName) 30 | .Length(1, 50).WithMessage("Name must be less than 50 characters"); 31 | 32 | RuleFor(x => x.FormDescription) 33 | .Length(1, 500).WithMessage("Description must be less than 500 characters"); 34 | 35 | 36 | if (_context != null) // database validations 37 | { 38 | Custom(model => 39 | { 40 | //Görev içerisinde aynı isimli iki form olamaz. 41 | var formView = _unitOfWork.Repository().Get(x => 42 | ( 43 | x.Id != model.Id && 44 | ( 45 | (x.FormName == model.FormName && x.TaskId == model.TaskId) 46 | || 47 | (x.ViewName == model.ViewName && x.TaskId == model.TaskId) 48 | ) 49 | ) 50 | ); 51 | if (formView != null) 52 | { 53 | return new ValidationFailure("FormName", string.Format("{0} is used before. Please change it.", model.FormName)); 54 | } 55 | 56 | 57 | 58 | return null; 59 | }); 60 | } 61 | 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /WorkFlowManager.Common/Factory/ProcessFactory.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using System.Collections.Generic; 3 | using WorkFlowManager.Common.Dto; 4 | using WorkFlowManager.Common.Enums; 5 | using WorkFlowManager.Common.Tables; 6 | 7 | namespace WorkFlowManager.Common.Factory 8 | { 9 | public static class ProcessFactory 10 | { 11 | public static Process CreateProcess(Task task, string name, ProjectRole assignedRole, string description = null, FormView formView = null) 12 | { 13 | return new Process(task, name, assignedRole, description, formView); 14 | } 15 | 16 | public static SubProcess CreateSubProcess(Task task, string name, List taskVariableList) 17 | { 18 | return new SubProcess(task, name, JsonConvert.SerializeObject(taskVariableList)); 19 | } 20 | 21 | 22 | public static Condition CreateCondition(Task task, string name, ProjectRole assignedRole, string variableName = null, string description = null, FormView formView = null) 23 | { 24 | return new Condition(task, name, assignedRole, variableName, description, formView); 25 | } 26 | public static DecisionPoint CreateDecisionPoint(Task task, string name, DecisionMethod decisionMethod, string variableName = null, int repetitionFrequenceByHour = 1, string description = null, FormView formView = null) 27 | { 28 | return new DecisionPoint(task, name, decisionMethod, variableName, repetitionFrequenceByHour, description, formView); 29 | } 30 | 31 | 32 | public static ConditionOption CreateConditionOption(string name, ProjectRole assignedRole, Condition condition, string value = null) 33 | { 34 | return new ConditionOption(condition.Task, name, assignedRole, condition, value); 35 | } 36 | 37 | public static ConditionOption CreateDecisionPointYesOption(string name, DecisionPoint decisionPoint) 38 | { 39 | return new ConditionOption(decisionPoint.Task, name, ProjectRole.System, decisionPoint, "Y"); 40 | } 41 | public static ConditionOption CreateDecisionPointNoOption(string name, DecisionPoint decisionPoint) 42 | { 43 | return new ConditionOption(decisionPoint.Task, name, ProjectRole.System, decisionPoint, "N"); 44 | } 45 | 46 | 47 | 48 | 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Scripts/main.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var $confirm; 3 | 4 | $confirm = null; 5 | 6 | $(function() { 7 | var $createDestroy, $window, sectionTop; 8 | $window = $(window); 9 | sectionTop = $(".top").outerHeight() + 20; 10 | $createDestroy = $("#switch-create-destroy"); 11 | hljs.initHighlightingOnLoad(); 12 | $("a[href*=\"#\"]").on("click", function(event) { 13 | var $target; 14 | event.preventDefault(); 15 | $target = $($(this).attr("href").slice("#")); 16 | if ($target.length) { 17 | return $window.scrollTop($target.offset().top - sectionTop); 18 | } 19 | }); 20 | $("input[type=\"checkbox\"], input[type=\"radio\"]").not("[data-switch-no-init]").bootstrapSwitch(); 21 | $("[data-switch-get]").on("click", function() { 22 | var type; 23 | type = $(this).data("switch-get"); 24 | return alert($("#switch-" + type).bootstrapSwitch(type)); 25 | }); 26 | $("[data-switch-set]").on("click", function() { 27 | var type; 28 | type = $(this).data("switch-set"); 29 | return $("#switch-" + type).bootstrapSwitch(type, $(this).data("switch-value")); 30 | }); 31 | $("[data-switch-toggle]").on("click", function() { 32 | var type; 33 | type = $(this).data("switch-toggle"); 34 | return $("#switch-" + type).bootstrapSwitch("toggle" + type.charAt(0).toUpperCase() + type.slice(1)); 35 | }); 36 | $("[data-switch-set-value]").on("input", function(event) { 37 | var type, value; 38 | event.preventDefault(); 39 | type = $(this).data("switch-set-value"); 40 | value = $.trim($(this).val()); 41 | if ($(this).data("value") === value) { 42 | return; 43 | } 44 | return $("#switch-" + type).bootstrapSwitch(type, value); 45 | }); 46 | $("[data-switch-create-destroy]").on("click", function() { 47 | var isSwitch; 48 | isSwitch = $createDestroy.data("bootstrap-switch"); 49 | $createDestroy.bootstrapSwitch((isSwitch ? "destroy" : null)); 50 | return $(this).button((isSwitch ? "reset" : "destroy")); 51 | }); 52 | return $confirm = $("#confirm").bootstrapSwitch({ 53 | size: "large", 54 | onSwitchChange: function(event, state) { 55 | event.preventDefault(); 56 | return console.log(state, event.isDefaultPrevented()); 57 | } 58 | }); 59 | }); 60 | 61 | }).call(this); 62 | -------------------------------------------------------------------------------- /WorkFlowManager.Services/DbServices/DynamicMethodCallService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Configuration; 3 | using System.Linq; 4 | using System.Reflection; 5 | using WorkFlowManager.Common.DataAccess._UnitOfWork; 6 | 7 | namespace WorkFlowManager.Services.DbServices 8 | { 9 | 10 | public static class DynamicMethodCallService 11 | { 12 | public static string Caller( 13 | IUnitOfWork unitOfWork, 14 | string methodCallString, 15 | WorkFlowDataService workFlowDataService) 16 | { 17 | 18 | string serviceAsmPath = ConfigurationManager.AppSettings["ServiceAsmPath"].Trim(); 19 | string serviceBaseDir = ConfigurationManager.AppSettings["ServiceBaseDir"].Trim(); 20 | 21 | 22 | var splitServiceMethod = methodCallString.Split('.'); 23 | string methodPart = splitServiceMethod[splitServiceMethod.Length - 1]; 24 | string methodName = methodPart.Substring(0, methodPart.LastIndexOf("(")); 25 | string serviceName = methodCallString.Replace("." + methodPart, ""); 26 | 27 | 28 | 29 | object[] parameters = methodPart.Substring( 30 | methodPart.LastIndexOf("(") + 1, 31 | (methodPart.LastIndexOf(")") - methodPart.LastIndexOf("(") - 1)) 32 | .Split(',') 33 | .Select(p => p.Trim()) 34 | .ToArray(); 35 | 36 | var asmClass = string.Format("{0}{1}.{2}", serviceAsmPath, (string.IsNullOrEmpty(serviceBaseDir) ? "" : "." + serviceBaseDir), serviceName); 37 | 38 | Assembly asm = Assembly.Load(serviceAsmPath); 39 | Type type = asm.GetType(asmClass); 40 | 41 | Object obj = Activator.CreateInstance(type, unitOfWork, workFlowDataService); 42 | MethodInfo methodInfo = type.GetMethod(methodName); 43 | 44 | string result; 45 | if (parameters.Count() == 1 && string.IsNullOrWhiteSpace(parameters[0].ToString())) 46 | { 47 | result = methodInfo.Invoke(obj, null).ToString(); 48 | } 49 | else 50 | { 51 | result = methodInfo.Invoke(obj, parameters).ToString(); 52 | } 53 | return result; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Content/plugins/iCheck/line/line.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Line skin, black 2 | ----------------------------------- */ 3 | .icheckbox_line, 4 | .iradio_line { 5 | position: relative; 6 | display: block; 7 | margin: 0; 8 | padding: 5px 15px 5px 38px; 9 | font-size: 13px; 10 | line-height: 17px; 11 | color: #fff; 12 | background: #000; 13 | border: none; 14 | -webkit-border-radius: 3px; 15 | -moz-border-radius: 3px; 16 | border-radius: 3px; 17 | cursor: pointer; 18 | } 19 | .icheckbox_line .icheck_line-icon, 20 | .iradio_line .icheck_line-icon { 21 | position: absolute; 22 | top: 50%; 23 | left: 13px; 24 | width: 13px; 25 | height: 11px; 26 | margin: -5px 0 0 0; 27 | padding: 0; 28 | overflow: hidden; 29 | background: url(line.png) no-repeat; 30 | border: none; 31 | } 32 | .icheckbox_line.hover, 33 | .icheckbox_line.checked.hover, 34 | .iradio_line.hover { 35 | background: #444; 36 | } 37 | .icheckbox_line.checked, 38 | .iradio_line.checked { 39 | background: #000; 40 | } 41 | .icheckbox_line.checked .icheck_line-icon, 42 | .iradio_line.checked .icheck_line-icon { 43 | background-position: -15px 0; 44 | } 45 | .icheckbox_line.disabled, 46 | .iradio_line.disabled { 47 | background: #ccc; 48 | cursor: default; 49 | } 50 | .icheckbox_line.disabled .icheck_line-icon, 51 | .iradio_line.disabled .icheck_line-icon { 52 | background-position: -30px 0; 53 | } 54 | .icheckbox_line.checked.disabled, 55 | .iradio_line.checked.disabled { 56 | background: #ccc; 57 | } 58 | .icheckbox_line.checked.disabled .icheck_line-icon, 59 | .iradio_line.checked.disabled .icheck_line-icon { 60 | background-position: -45px 0; 61 | } 62 | 63 | /* Retina support */ 64 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 65 | only screen and (-moz-min-device-pixel-ratio: 1.5), 66 | only screen and (-o-min-device-pixel-ratio: 3/2), 67 | only screen and (min-device-pixel-ratio: 1.5) { 68 | .icheckbox_line .icheck_line-icon, 69 | .iradio_line .icheck_line-icon { 70 | background-image: url(line@2x.png); 71 | -webkit-background-size: 60px 13px; 72 | background-size: 60px 13px; 73 | } 74 | } -------------------------------------------------------------------------------- /WorkFlowManager.Services/ClassDiagram1.cd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | AAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 7 | DbServices\DynamicMethodCallService.cs 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | CACIAAAAgAAAAAGBAgAAAgAAAAAQAAAAAAAAwBAAAIA= 20 | DbServices\TestWorkFlowProcessService.cs 21 | 22 | 23 | 24 | 25 | 26 | 27 | AAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAEAAgIIAAA= 28 | DbServices\WorkFlowDataService.cs 29 | 30 | 31 | 32 | 33 | 34 | CoCgAAAQgAAAQkGIEgAIsFQACACYAAIAAAgAAACgQAA= 35 | DbServices\WorkFlowProcessService.cs 36 | 37 | 38 | 39 | 40 | 41 | EAQAAAEARkAAFmAAAgAAAAAAAAEAAAAAAAAAAgAIAAA= 42 | DbServices\WorkFlowService.cs 43 | 44 | 45 | 46 | 47 | 48 | AAAAAAAAgAAAAAABAAAAAgAAAAAQAAAAAAgAAAAAAAA= 49 | DbServices\IWorkFlow.cs 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /WorkFlowManager.Web/Scripts/PostEditor.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | var $tagEditor = $(".post-tag-editor"); 3 | 4 | function PaydasSec($this) { 5 | var $tagParent = $this.closest("li"); 6 | $tagParent.toggleClass("selected"); 7 | 8 | var selected = $tagParent.hasClass("selected"); 9 | $tagParent.find(".selected-input").val(selected); 10 | } 11 | 12 | $tagEditor 13 | .find(".tag-select") 14 | .on("click", "> li > a", function (e) { 15 | e.preventDefault(); 16 | 17 | var $this = $(this); 18 | 19 | PaydasSec($this) 20 | 21 | }); 22 | 23 | var $addTagButton = $tagEditor.find(".add-tag-button"); 24 | var $newTagName = $tagEditor.find(".new-tag-name"); 25 | 26 | $addTagButton.click(function (e) { 27 | e.preventDefault(); 28 | addTag($newTagName.val()); 29 | }); 30 | 31 | $newTagName 32 | .keyup(function () { 33 | if ($newTagName.val().trim().length > 0) 34 | $addTagButton.prop("disabled", false); 35 | else 36 | $addTagButton.prop("disabled", true); 37 | }) 38 | .keydown(function(e){ 39 | if (e.which != 13) 40 | return; 41 | e.preventDefault(); 42 | addTag($newTagName.val()); 43 | }); 44 | 45 | function addTag(name) { 46 | var newIndex = $tagEditor.find(".tag-select > li").size() - 1; 47 | 48 | $('input[name^="Paydaslar["][name$="].Name"][value="'+name+'"]').each(function () {//Bilgi daha önce girilmiş ise 49 | PaydasSec($(this)); 50 | }); 51 | 52 | if ($('input[name^="Paydaslar["][name$="].Name"][value="' + name + '"]').length == 0) //Değer bulunamazsa 53 | { 54 | //alert(name + 'Eklenmeli'); 55 | $tagEditor 56 | .find(".tag-select > li.template") 57 | .clone() 58 | .removeClass("template") 59 | .addClass("selected") 60 | .find(".name").text(name).end() 61 | .find(".name-input").val(name).attr("name", "Paydaslar[" + newIndex + "].Name").end() 62 | .find(".selected-input").attr("name", "Paydaslar[" + newIndex + "].IsChecked").val(true).end() 63 | .appendTo($tagEditor.find(".tag-select")); 64 | 65 | } 66 | 67 | $newTagName.val(""); 68 | $addTagButton.prop("disabled", true); 69 | } 70 | }); --------------------------------------------------------------------------------