public void LoadConfiguration()
        {
            var configFilePath = ServiceInfo.GetFileURI(AccountingIntegration.Properties.Settings.Default.AccountingIntegrationConfigFilename);

            if (File.Exists(configFilePath))
            {
                _accountingConfiguration = XeroHelper.DeSerializeFromFilePath <AccountingAuthConfiguration>(configFilePath);
            }
            else
            {
                _accountingConfiguration = new AccountingAuthConfiguration
                {
                    AccountingSystemList = new List <AccountingSystem>()
                    {
                        new AccountingSystem()
                        {
                            Type            = "Xero",
                            CredentialsList = new CredentialsList()
                            {
                                Credentials = new List <Credentials>()
                            }
                        },
                        new AccountingSystem()
                        {
                            Type            = "MYOB",
                            CredentialsList = new CredentialsList()
                            {
                                Credentials = new List <Credentials>()
                            }
                        }
                    }
                };
            }
        }
        private void ProcessXmlFile(string inFilename)
        {
            try
            {
                var invoice = XeroHelper.DeSerializeFromFilePath <XeroInvoice>(inFilename);
                if (invoice.Type == "ACCPAYCREDIT" || invoice.Type == "ACCRECCREDIT")
                {
                    CreateCreditNode(inFilename, invoice);
                }
                else
                {
                    CreateInvoice(inFilename, invoice);
                }
            }
            catch (XeroIntegrationException xiExc)
            {
                MoveFileToFailedFolder(inFilename); // Failed. XML Invoice with an invalid structure or NOT Found is moved to the Failed folder for further human action

                ServiceLogger.Log(string.Format(@"Xero Server Validation Error: {0}  [Invoice filename: {1}]", xiExc.Message, inFilename));
            }
            catch (Exception exc)
            {
                ServiceLogger.Log(string.Format(@"Xero Server Error: {0}  [Invoice filename: {1}]", exc.Message, inFilename));

                MoveFileToRetryFolder(inFilename);
            }
        }
示例#3
0
        public void SaveXeroConfiguration(XeroAuthConfiguration xeroAuthConfiguration)
        {
            _xeroAuthConfiguration = xeroAuthConfiguration;
            var configFilePath = ServiceInfo.GetFileURI(XeroIntegration.Properties.Settings.Default.XeroIntegrationConfigFilename);
            var configStr      = XeroHelper.Serialize <XeroAuthConfiguration>(xeroAuthConfiguration);

            File.WriteAllText(configFilePath, configStr);
        }
        public void SaveAccountingConfiguration(AccountingAuthConfiguration accountingAuthConfiguration)
        {
            _accountingConfiguration = accountingAuthConfiguration;
            var configFilePath = ServiceInfo.GetFileURI(AccountingIntegration.Properties.Settings.Default.AccountingIntegrationConfigFilename);
            var configStr      = XeroHelper.Serialize <AccountingAuthConfiguration>(accountingAuthConfiguration);

            File.WriteAllText(configFilePath, configStr);
        }
示例#5
0
        public IHttpActionResult post()
        {
            WebHookLog dbwl = new WebHookLog();

            // retrieve xero key
            var    xerosignature      = Request.Headers.GetValues("x-xero-signature").FirstOrDefault();
            var    payload            = Request.Content.ReadAsStringAsync().Result;
            String app_key            = "4q1NTvJRtUuiUCvpo3FKSd3NlAUom53uY+ODoyr4sskmxPa9JSZifVM7g8S8G8k7Ipwde6Hj3MFVXMnmyrD9pg==";
            string generatedsignature = "";

            using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(app_key)))
            {
                var messageBytes = Encoding.UTF8.GetBytes(payload);
                var hash         = hmac.ComputeHash(messageBytes);
                generatedsignature = Convert.ToBase64String(hash);
            }

            var isValid = generatedsignature == xerosignature;

            if (!isValid)
            {
                dbwl.body = "Invalid Xerosignature";
                dbwl.Date = DateTime.Now;
                db.WebHookLogs.Add(dbwl);
                db.SaveChanges();
                return(Unauthorized());
            }

            var xevents = JsonConvert.DeserializeObject <XeroWebhookEvents>(payload);

            foreach (Xerowebhookevent xevent in xevents.events)
            {
                switch (xevent.eventCategory)
                {
                case "INVOICE":

                    dbwl.body = "received xero web hook invoice ";
                    dbwl.Date = DateTime.Now;
                    db.WebHookLogs.Add(dbwl);
                    db.SaveChanges();
                    dbwl.body = payload;
                    dbwl.Date = DateTime.Now;
                    db.WebHookLogs.Add(dbwl);
                    db.SaveChanges();
                    var res1 = UNMSHelper.addPaymentFromXero(XeroHelper.getXeroInvoice(xevent.resourceId));
                    break;
                }
            }
            dbwl.body = "OK Valid";
            dbwl.Date = DateTime.Now;
            db.WebHookLogs.Add(dbwl);
            db.SaveChanges();
            return(Ok());
        }
示例#6
0
 private void LogintoCompanyFile()
 {
     try
     {
         IApiConfiguration config = ConfigurationCloud;
         var configFilePath       = ServiceInfo.GetFileURI(AccountingIntegration.Properties.Settings.Default.CompanyFileDetails);
         var credentials          = XeroHelper.DeSerializeFromFilePath <CompanyFileCredentialsCF>(configFilePath);
         Credentials = new CompanyFileCredentials(credentials.CredentialsDetails.UserName, credentials.CredentialsDetails.Password);
         GetCompanyFileDetails(Credentials);
     }
     catch (Exception ex)
     {
         ServiceLogger.LogException("Exception in LogintoCompanyFile", ex);
     }
 }
示例#7
0
        public IHttpActionResult get()
        {
            string payload = db.WebHookLogs.Where(a => a.Id == 20446).Select(a => a.body).FirstOrDefault();
            var    xevents = JsonConvert.DeserializeObject <XeroWebhookEvents>(payload);

            foreach (Xerowebhookevent xevent in xevents.events)
            {
                switch (xevent.eventCategory)
                {
                case "INVOICE":
                    // just update payment at this time
                    var res1 = UNMSHelper.addPaymentFromXero(XeroHelper.getXeroInvoice(xevent.resourceURL.Substring(xevent.resourceURL.Length - 36)));
                    break;
                }
            }
            return(Ok());
        }
 public void SaveCompanyFileCredentials(string userName, string password)
 {
     try
     {
         CompanyFileCredentialsCF credentialsMain = new CompanyFileCredentialsCF();
         credentialsMain.CredentialsDetails          = new CredentialsCF();
         credentialsMain.CredentialsDetails.UserName = userName;
         credentialsMain.CredentialsDetails.Password = password;
         var companyFileCredentialsPath = ServiceInfo.GetFileURI((AccountingIntegration.Properties.Settings.Default.CompanyFileDetails));
         var companyFileCredentialsStr  = XeroHelper.Serialize <CompanyFileCredentialsCF>(credentialsMain);
         File.WriteAllText(companyFileCredentialsPath, companyFileCredentialsStr);
     }
     catch (Exception ex)
     {
         ServiceLogger.Log("Exception in credentials file creation " + ex.Message);
     }
 }
示例#9
0
        public XeroAuthConfiguration LoadConfiguration()
        {
            XeroAuthConfiguration xeroConfiguration;
            var configFilePath = ServiceInfo.GetFileURI(XeroIntegration.Properties.Settings.Default.XeroIntegrationConfigFilename);

            if (File.Exists(configFilePath))
            {
                xeroConfiguration = XeroHelper.DeSerializeFromFilePath <XeroAuthConfiguration>(configFilePath);
            }
            else
            {
                xeroConfiguration = new XeroAuthConfiguration
                {
                    OAuth = new OAuth()
                    {
                        CredentialsList = new CredentialsList()
                        {
                            Credentials = new List <Credentials>()
                        }
                    }
                };
            }
            return(xeroConfiguration);
        }
示例#10
0
 public void PostInvoice(CompanyFile CompanyFile, string inFilename)
 {
     try
     {
         CompanyFile1 = CompanyFile;
         InitFileandFolders(inFilename);
         CurrentAccount = null;
         var invoice             = XeroHelper.DeSerializeFromFilePath <MYOBInvoice>(inFilename);
         var receiveMoney        = new ReceiveMoneyTxn();
         var receiveMoneyService = new ReceiveMoneyTxnService(ConfigurationCloud, null,
                                                              MyOAuthKeyService);
         decimal amountToBeRecievedIncash = 0.00M;
         receiveMoney.Contact = new CardLink {
             UID = (Guid)GetCustomer(invoice.Contact.Name).UID
         };
         receiveMoney.IsTaxInclusive = true;
         receiveMoney.PaymentMethod  = "Cash";
         receiveMoney.Date           = DateTime.Now;
         receiveMoney.DepositTo      = DepositTo.Account;
         receiveMoney.Memo           = "Job " + invoice.Jobcode + " Time " + invoice.Date;
         for (int i = 0; i < Accounts.Count(); i++)
         {
             if (Accounts[i].DisplayID == invoice.CashGLCode)
             {
                 receiveMoney.Account = new AccountLink {
                     UID = (Guid)Accounts[i].UID
                 };
                 break;
             }
         }
         var lines = new List <ReceiveMoneyTxnLine>();
         foreach (var item in invoice.Items.Item)
         {
             if (item.Description != "Cash")
             {
                 var line = new ReceiveMoneyTxnLine();
                 for (int i = 0; i < Accounts.Count(); i++)
                 {
                     if (item.GLCode == Accounts[i].DisplayID)
                     {
                         line.Account = new AccountLink {
                             UID = (Guid)Accounts[i].UID
                         };
                         CurrentAccount = Accounts[i];
                         break;
                     }
                 }
                 decimal d = 0.0M;
                 Decimal.TryParse(item.UnitAmount, out d);
                 line.Amount = d;
                 amountToBeRecievedIncash += d;   // comprises total amount in hand
                 for (int i = 0; i < Jobs.Count(); i++)
                 {
                     if (invoice.Jobcode == Jobs[i].Number)
                     {
                         line.Job = new JobLink {
                             UID = (Guid)Jobs[i].UID
                         };
                         break;
                     }
                 }
                 line.Memo = item.Description;
                 if (item.TaxStatus == "NonZeroTax")
                 {
                     line.TaxCode = new TaxCodeLink {
                         UID = (Guid)CurrentAccount.TaxCode.UID
                     }
                 }
                 ;
                 else
                 {
                     for (int i = 0; i < TaxCodes.Count(); i++)
                     {
                         if (TaxCodes[i].Rate == 0.0)
                         {
                             line.TaxCode = new TaxCodeLink {
                                 UID = (Guid)TaxCodes[i].UID
                             };
                             break;
                         }
                     }
                 }
                 lines.Add(line);
             }
         }
         receiveMoney.Lines          = lines;
         receiveMoney.AmountReceived = amountToBeRecievedIncash > 0.00M ? amountToBeRecievedIncash : (amountToBeRecievedIncash * -1);
         receiveMoneyService.Insert(CompanyFile, receiveMoney, Credentials, OnSaveComplete, OnError);
     }
     catch (Exception ex)
     {
         ServiceLogger.Log("Exception in PostInvoice " + ex.Message);
         MoveFileToFailedFolder();
     }
 }