move the scheduler to a windows service

This commit is contained in:
vfedosevich 2013-04-30 10:47:34 +03:00
parent 97f09a5683
commit 5e414136b2
115 changed files with 587 additions and 166 deletions

View file

@ -0,0 +1,153 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using ES = WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Ecommerce.EnterpriseServer
{
public class ActivateInvoiceTrigger : TriggerHandlerBase
{
public const string NAMESPACE = "INVOICE";
public const string STATUS_AWAITING_PAYMENT = "AWAITING_PAYMENT";
public override string TriggerNamespace
{
get { return NAMESPACE; }
}
public override void ExecuteTrigger(TriggerEventArgs eventArgs)
{
//
try
{
ActivatePaidInvoicesTask activator = new ActivatePaidInvoicesTask();
// Load invoice items to activate
List<InvoiceItem> items = InvoiceController.GetCustomerInvoiceItems(Convert.ToInt32(ReferenceId));
//
foreach (InvoiceItem item in items)
{
try
{
ES.TaskManager.Write("Activating service");
// activating
GenericSvcResult result = activator.ActivateInvoiceItem(item);
// LOG ERROR
if (!result.Succeed)
{
ES.TaskManager.WriteError(result.Error);
if (!String.IsNullOrEmpty(result.ErrorCode))
ES.TaskManager.WriteParameter("Error code", result.ErrorCode);
ES.TaskManager.WriteParameter("Result code", result.ResultCode);
// go to next item
continue;
}
//
ES.TaskManager.Write("Activated");
}
catch (Exception ex)
{
ES.TaskManager.WriteError(ex);
}
}
}
catch (Exception ex)
{
TriggerStatus = "ERROR";
ES.TaskManager.WriteError(ex);
}
}
}
public class ActivateContractTrigger : TriggerHandlerBase
{
public const string NAMESPACE = "CONTRACT";
public const string STATUS_AWAITING_PAYMENT = "AWAITING_PAYMENT";
public override string TriggerNamespace
{
get { return NAMESPACE; }
}
public override void ExecuteTrigger(TriggerEventArgs eventArgs)
{
//
try
{
Contract contract = ContractSystem.ContractController.GetContract(ReferenceId);
//
if (contract.Status == ContractStatus.Pending)
{
//
ContractAccount account = ContractSystem.ContractController.GetContractAccountSettings(ReferenceId);
//
// create user account
ES.UserInfo userInfo = new ES.UserInfo();
userInfo.Username = account[ContractAccount.USERNAME];
userInfo.Password = account[ContractAccount.PASSWORD];
userInfo.Email = account[ContractAccount.EMAIL];
userInfo.FirstName = account[ContractAccount.FIRST_NAME];
userInfo.LastName = account[ContractAccount.LAST_NAME];
userInfo.HtmlMail = (account[ContractAccount.MAIL_FORMAT] == "HTML");
userInfo.Address = account[ContractAccount.ADDRESS];
userInfo.City = account[ContractAccount.CITY];
userInfo.CompanyName = account[ContractAccount.COMPANY_NAME];
userInfo.Country = account[ContractAccount.COUNTRY];
userInfo.State = account[ContractAccount.STATE];
userInfo.PrimaryPhone = account[ContractAccount.PHONE_NUMBER];
userInfo.Fax = account[ContractAccount.FAX_NUMBER];
userInfo.InstantMessenger = account[ContractAccount.INSTANT_MESSENGER];
userInfo.Zip = account[ContractAccount.ZIP];
userInfo.Role = ES.UserRole.User;
userInfo.Status = ES.UserStatus.Active;
// set account parent
userInfo.OwnerId = contract.ResellerId;
userInfo.Created = DateTime.Now;
// create account
int resultCode = ES.UserController.AddUser(userInfo, true);
//
if (resultCode > 0)
{
ContractSystem.ContractController.UpdateContract(ReferenceId, resultCode, contract.AccountName,
ContractStatus.Active, 0m, contract.FirstName, contract.LastName, contract.Email,
contract.CompanyName, null, null);
}
}
}
catch (Exception ex)
{
TriggerStatus = "ERROR";
ES.TaskManager.WriteError(ex);
}
}
}
}

View file

@ -0,0 +1,111 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Data;
using ES = WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Ecommerce.EnterpriseServer.TriggerSystem
{
public class TriggerController
{
public static void AddSystemTrigger(string referenceId, string triggerStatus, Type triggerType)
{
//
ITriggerHandler trigger = (ITriggerHandler)Activator.CreateInstance(triggerType);
//
EcommerceProvider.AddSystemTrigger(ES.SecurityContext.User.UserId, ES.SecurityContext.User.UserId,
triggerType.AssemblyQualifiedName, referenceId, trigger.TriggerNamespace, triggerStatus);
}
public static void ExecuteSystemTrigger(string referenceId, string triggerNamespace, TriggerEventArgs eventArgs)
{
//
IDataReader dr = null;
try
{
ES.TaskManager.StartTask(SystemTasks.SOURCE_ECOMMERCE, SystemTasks.TASK_EXEC_SYSTEM_TRIGGER);
List<ITriggerHandler> triggers = new List<ITriggerHandler>();
dr = EcommerceProvider.GetSystemTrigger(ES.SecurityContext.User.UserId, referenceId, triggerNamespace);
//
while(dr.Read())
{
int ownerId = Convert.ToInt32(dr["OwnerID"]);
string triggerId = Convert.ToString(dr["TriggerID"]);
string triggerHandler = Convert.ToString(dr["TriggerHandler"]);
string triggerStatus = (dr["Status"] == DBNull.Value) ? null : Convert.ToString(dr["Status"]);
// Instantiate trigger handler
ITriggerHandler trigger = (ITriggerHandler)Activator.CreateInstance(Type.GetType(triggerHandler));
//
trigger.TriggerId = triggerId;
trigger.OwnerId = ownerId;
trigger.TriggerStatus = triggerStatus;
trigger.ReferenceId = referenceId;
//
triggers.Add(trigger);
//
}
dr.Close();
//
foreach (ITriggerHandler trigger in triggers)
{
try
{
trigger.ExecuteTrigger(eventArgs);
}
catch (Exception ex)
{
ES.TaskManager.WriteError(ex);
continue;
}
//
DeleteSystemTrigger(trigger.TriggerId);
}
}
catch (Exception ex)
{
throw ES.TaskManager.WriteError(ex);
}
finally
{
if (dr != null)
dr.Close();
//
ES.TaskManager.CompleteTask();
}
}
private static void DeleteSystemTrigger(string triggerId)
{
EcommerceProvider.DeleteSystemTrigger(ES.SecurityContext.User.UserId, triggerId);
}
}
}