using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System.Threading;
namespace ClientAutonumberID
{
public class Autonumber : IPlugin
{
DateTime Newinvoicegenerationdate;
string Prefix, ID = "";
int _invoiceID = 0;
Entity ObjRegistration = new Entity();
Entity ObjConfig = new Entity();
static object locker = new object();
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService((typeof(IPluginExecutionContext)));
IOrganizationServiceFactory servicefactory = (IOrganizationServiceFactory)serviceProvider.GetService((typeof(IOrganizationServiceFactory)));
IOrganizationService service = servicefactory.CreateOrganizationService(context.UserId);
lock (locker)
{
Thread.Sleep(1000);
Entity Invoiceobj = service.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, new ColumnSet(true));
QueryExpression Configuration_Q = new QueryExpression("new_configuration");
Configuration_Q.ColumnSet = new ColumnSet("new_invoiceprefix", "new_invoiceid");
EntityCollection ConfigurationColl = service.RetrieveMultiple(Configuration_Q);
if (ConfigurationColl.Entities.Count > 0)
{
ObjConfig = ConfigurationColl.Entities[0];
if (ObjConfig.Contains("new_invoiceprefix"))
{
Prefix = ObjConfig.GetAttributeValue<string>("new_invoiceprefix");
}
else
throw new Exception("Prefix is not Present");
if (ObjConfig.Contains("new_invoiceid"))
{
_invoiceID = ObjConfig.GetAttributeValue<Int32>("new_invoiceid");
}
else
throw new Exception("invoiceid is not Present");
string _idmonth = DateTime.Now.Month.ToString();
string _year = DateTime.Now.Year.ToString();
ID = Prefix + "/" + _year + "/" + _idmonth + "/" + _invoiceID.ToString();
_invoiceID++;
Invoiceobj.Attributes["new_name"] = ID;
ObjConfig.Attributes["new_invoiceid"] = _invoiceID;
Thread.Sleep(1000);
service.Update(Invoiceobj);
service.Update(ObjConfig);
}
}
}
}
}