public static void Process(EMailAccountSyncFilter filter, List <EMailSyncAccount> accounts, Object uid, string screenid)
        {
            //Check that process is singleton
            foreach (RowTaskInfo info in PXLongOperation.GetTaskList())
            {
                if (Object.Equals(uid, info.NativeKey))
                {
                    continue;
                }

                PXLongRunStatus status = PXLongOperation.GetStatus(info.NativeKey);
                if (status != PXLongRunStatus.InProcess)
                {
                    continue;
                }

                string company = PXLogin.ExtractCompany(info.User);
                string screen  = (info.Screen ?? String.Empty).Replace(".", "");
                if (screen == screenid && company == PXAccess.GetCompanyName())
                {
                    throw new PXException(ErrorMessages.PrevOperationNotCompleteYet);
                }
            }

            EmailsSyncMaint graph = CreateInstance <EmailsSyncMaint>();

            using (new PXUTCTimeZoneScope())
            {
                graph.ProcessInternal(new ProcessingContext(filter, accounts, graph.GetPolicies()));
            }
        }
Beispiel #2
0
        public static void UpdateDatabase(TDCustomizationPlugin plugin, ref List <Tuple <string, object[]> > errors)
        {
            string companyName = PXAccess.GetCompanyName();

            NonStockItemMaint graph = PXGraph.CreateInstance <NonStockItemMaint>();
            InventoryItem     item;
            INItemClass       itemClass;

            try
            {
                itemClass = PXSelectReadonly <INItemClass, Where <INItemClass.itemClassCD, Equal <Required <INItemClass.itemClassCD> > > > .Select(graph, "EXPENSES");

                if (itemClass != null)
                {
                    item               = graph.Item.Insert();
                    item.InventoryCD   = "CLEANROOM";
                    item               = graph.Item.Update(item);
                    item.ItemClassID   = itemClass.ItemClassID;
                    item               = graph.ItemSettings.Update(item);
                    item.TaxCategoryID = "EXEMPT";
                    item               = graph.ItemSettings.Update(item);
                    item.Descr         = "House Cleaning Service";
                    item               = graph.ItemSettings.Update(item);
                    graph.Save.Press();

                    graph.Clear();
                }
            }
            catch (Exception)
            {
                errors.Add(new Tuple <string, object[]>(TDMessages.ErrorInsertingItems, new object[] { companyName }));
            }
        }
        protected virtual void RequestSSToken()
        {
            PMSetup pmSetupRow = PXSelect <PMSetup> .Select(Base);

            PMSetupSSExt pmSetupSSExtRow = PXCache <PMSetup> .GetExtension <PMSetupSSExt>(pmSetupRow);

            string loginScopeCompany = PXDatabase.Companies.Length > 0 ? PXAccess.GetCompanyName() : String.Empty;
            string currentScope      = String.Format(",{0},{1}", Base.Accessinfo.UserName, loginScopeCompany);

            if (pmSetupSSExtRow != null && pmSetupSSExtRow.UsrSmartsheetClientID != null)
            {
                string smartsheetRedirect = SmartsheetConstants.SSCodeRequest.ENDPOINT;
                smartsheetRedirect += SmartsheetConstants.SSCodeRequest.RESPONSE_TYPE;
                smartsheetRedirect += SmartsheetConstants.SSCodeRequest.CLIENT_ID + pmSetupSSExtRow.UsrSmartsheetClientID;
                smartsheetRedirect += SmartsheetConstants.SSCodeRequest.SCOPE;
                smartsheetRedirect += SmartsheetConstants.SSCodeRequest.STATE + currentScope;

                throw new PXRedirectToUrlException(smartsheetRedirect, PXBaseRedirectException.WindowMode.InlineWindow,
                                                   string.Empty, false);
            }
            else
            {
                throw new PXException(SmartsheetConstants.Messages.SMARTSHEET_ID_MISSING);
            }
        }
Beispiel #4
0
        private void AuthenticateAdobeSignAccount(ESignAccount account)
        {
            var companyId = PXAccess.GetCompanyName();
            var client    = AdobeSignClientBuilder.BuildUnauthorized(account, companyId);

            PXLongOperation.StartOperation(this, () =>
            {
                var loginUrl = client.Authentication.GetLoginPageUrl();
                throw new PXRedirectToUrlException(loginUrl, PXBaseRedirectException.WindowMode.InlineWindow,
                                                   string.Empty, false);
            });
        }
Beispiel #5
0
        public static void UpdateDatabase(USCustomizationPlugin plugin, ref List <Tuple <string, object[]> > errors)
        {
            string companyName = PXAccess.GetCompanyName();

            try
            {
                //Insert UpScouts here or something
            }
            catch (Exception)
            {
                errors.Add(new Tuple <string, object[]>(USMessages.ErrorInsertingUpScouts, new object[] { companyName }));
            }
        }
Beispiel #6
0
        private User GetUser(MembershipUserExt user)
        {
            if (user != null)
            {
                return(new User
                {
                    Id = user.ProviderUserKey.ToString(),
                    DisplayName = user.DisplayName,
                    UserName = user.UserName + "@" + PXAccess.GetCompanyName()
                });
            }

            return(null);
        }
        public string GetUrl()
        {
            string webHookUrl = "";
            var    setup      = graph.SurveySetup.Current;

            if (setup.WebHookID.HasValue)
            {
                string   str       = (graph.CompanyService.IsMultiCompany ? PXAccess.GetCompanyName() : graph.CompanyService.GetSingleCompanyLoginName());
                string[] returnUrl = new string[] { _returnUrl, "/", str, "/", null };
                returnUrl[4] = setup.WebHookID.ToString();
                webHookUrl   = string.Concat(returnUrl);
            }
            return(webHookUrl);
        }
        public static void OnPublished(USCustomizationPlugin plugin, ref List <Tuple <string, object[]> > errors)
        {
            string companyName = PXAccess.GetCompanyName();

            plugin.WriteLog(PXLocalizer.LocalizeFormatWithKey(USMessages.SomePluginRunning, typeof(USMessages).FullName, companyName));

            //Select an Account that is Active
            PXDataRecord record = PXDatabase.SelectSingle <Account>(new PXDataFieldValue <Account.active>(PXDbType.Bit, true));

            if (record == null)
            {
                errors.Add(new Tuple <string, object[]>(USMessages.NoActiveAccounts, new object[] { companyName }));
            }
        }
Beispiel #9
0
        private IDisposable GetAdminScope()
        {
            var userName = "******";

            if (PXDatabase.Companies.Length > 0)
            {
                var company = PXAccess.GetCompanyName();
                if (string.IsNullOrEmpty(company))
                {
                    company = PXDatabase.Companies[0];
                }
                userName = userName + "@" + company;
            }
            return(new PXLoginScope(userName));
        }
Beispiel #10
0
        /// <summary>
        /// Defines the LoginScope to be used for the WebHooks
        /// </summary>
        /// <returns></returns>
        private IDisposable GetUserScope()
        {
            //todo: For now we will use admin but we will want to throttle back to a
            //      user with restricted access as to reduce any risk of attack.
            //      perhaps this can be configured in the Surveys Preferences/Setup page.
            var userName = "******";

            if (PXDatabase.Companies.Length > 0)
            {
                var company = PXAccess.GetCompanyName();
                if (string.IsNullOrEmpty(company))
                {
                    company = PXDatabase.Companies[0];
                }
                userName = userName + "@" + company;
            }
            return(new PXLoginScope(userName));
        }
Beispiel #11
0
        public CBAPIService(String endpoint, string version)
        {
            EntityHelper = ServiceLocator.Current.GetInstance <Func <string, string, IEntityHelper> >()(endpoint, version);

            string userName = "******";

            if (PXDatabase.Companies.Length > 0)
            {
                var company = PXAccess.GetCompanyName();
                if (string.IsNullOrEmpty(company))
                {
                    company = PXDatabase.Companies[0];
                }
                userName = userName + "@" + company;
            }
            LoginScope   = new PXLoginScope(userName, PXAccess.GetAdministratorRoles());
            CultureScope = new PX.Common.PXInvariantCultureScope();

            if (PXContext.GetSlot <System.Web.SessionState.ISessionStateItemCollection>() == null)
            {
                PXContext.SetSlot <System.Web.SessionState.ISessionStateItemCollection>(new System.Web.SessionState.SessionStateItemCollection());
            }
        }
        public static string GetSyncUrl(HttpContext context, string userId)
        {
            String externalLink;

            externalLink  = context.Request.GetWebsiteUrl().TrimEnd('/');
            externalLink += PX.Common.PXUrl.ToAbsoluteUrl(String.Format("~/calendarSync.ics?{0}={1}&{2}={3}", _CALENDAR_SETTINGS_KEY, userId, _COMPANY_KEY, PXAccess.GetCompanyName()));

            return(externalLink);
        }
 public static string GetSyncUrl(string protocol, string host, string appPath, string userId)
 {
     return(string.Format("{0}://{1}{2}/calendarSync.ics?{3}={4}&{5}={6}", protocol, host, appPath,
                          _CALENDAR_SETTINGS_KEY, userId, _COMPANY_KEY, PXAccess.GetCompanyName()));
 }
        /// <summary> Update Shipment Tracking Info </summary>
        public virtual bool UpdateShipmentTrackingInfo(List <LUMWarehouseImportProcess> warehouseData)
        {
            var isAllSuccess = true;
            var logData      = SelectFrom <LUMWarehouseImportProcessLog> .View.Select(this).RowCast <LUMWarehouseImportProcessLog>();

            foreach (var row in warehouseData)
            {
                try
                {
                    var _soOrder = SelectFrom <SOOrder> .Where <SOOrder.orderNbr.IsEqual <P.AsString> > .View.Select(this, row.Erporder).RowCast <SOOrder>()?.FirstOrDefault();

                    #region Check is already updated

                    if (logData.Any(x => x.Erporder == row.Erporder && x.ShipmentID == row.ShipmentID && (x.IsProcess ?? false)))
                    {
                        //this.ImportShipmentList.Delete(row);
                        continue;
                    }

                    #endregion

                    #region Check SOOrder is Exists

                    if (_soOrder == null)
                    {
                        throw new Exception("SOOrder is not exists");
                    }

                    #endregion

                    #region Check data

                    if (string.IsNullOrEmpty(row.Erporder) || row.Erporder == "null")
                    {
                        throw new Exception("ERP Order Nbr can not be empty!");
                    }
                    if (string.IsNullOrEmpty(row.Carrier) || row.Carrier == "null")
                    {
                        throw new Exception("Carrier can not be empty!");
                    }
                    if (!row.ShipmentDate.HasValue)
                    {
                        throw new Exception("Shipment Date can not be empty!");
                    }
                    if (string.IsNullOrEmpty(row.TrackingNbr) || row.TrackingNbr == "null")
                    {
                        throw new Exception("Tracking Nbr can not be empty!");
                    }

                    #endregion

                    if (_soOrder.OrderType == "FM")
                    {
                        var setup           = this.MiddlewareSetup.Select().RowCast <LUMMiddleWareSetup>().FirstOrDefault();
                        var shippingCarrier = row.Carrier;
                        var _merchant       = string.IsNullOrEmpty(PXAccess.GetCompanyName()?.Split(' ')[1]) ? "us" :
                                              PXAccess.GetCompanyName()?.Split(' ')[1].ToLower() == "uk" ? "gb" : PXAccess.GetCompanyName()?.Split(' ')[1].ToLower();
                        MiddleWare_Shipment metaData = new MiddleWare_Shipment()
                        {
                            merchant        = _merchant,
                            amazon_order_id = _soOrder.CustomerOrderNbr,
                            shipment_date   = row.ShipmentDate?.ToString("yyyy-MM-dd hh:mm:ss"),
                            shipping_method = "Standard",
                            carrier         = shippingCarrier,
                            tracking_number = row.TrackingNbr
                        };
                        // Update FBM
                        var updateResult = MiddleWareHelper.CallMiddleWareToUpdateFBM(setup, metaData);
                        // Check HttpStatusCode
                        if (updateResult.StatusCode != System.Net.HttpStatusCode.OK)
                        {
                            throw new PXException($"Update MiddleWare FBM fail , Code = {updateResult.StatusCode}");
                        }
                        // Check Response status
                        var updateModel = JsonConvert.DeserializeObject <MiddleWare_Response>(updateResult.ContentResult);
                        if (!updateModel.Status)
                        {
                            throw new PXException($"Update Middleware FBM fail, Msg = {updateModel.Message}");
                        }
                        // update SOOrder_UsrSendToMiddleware
                        var soorderGraph = PXGraph.CreateInstance <SOOrderEntry>();
                        _soOrder.GetExtension <SOOrderExt>().UsrSendToMiddleware = true;
                        soorderGraph.Document.Update(_soOrder);
                        soorderGraph.Save.Press();
                        InsertLog(row, true, string.Empty);
                    }
                    else
                    {
                        var _soOrderShipment = SelectFrom <SOOrderShipment>
                                               .Where <SOOrderShipment.orderNbr.IsEqual <P.AsString>
                                                       .And <SOOrderShipment.orderType.IsEqual <P.AsString> > >
                                               .View.Select(this, _soOrder.OrderNbr, _soOrder.OrderType).RowCast <SOOrderShipment>()?.FirstOrDefault();

                        #region Check SOOrderShipment is Exists

                        if (_soOrderShipment == null)
                        {
                            throw new Exception("SOOrder need to create Shipment first!");
                        }

                        #endregion

                        var _soShipment = SelectFrom <SOShipment> .Where <SOShipment.shipmentNbr.IsEqual <P.AsString> >
                                          .View.Select(this, _soOrderShipment?.ShipmentNbr).RowCast <SOShipment>().FirstOrDefault();

                        #region Check SOShipment is Exists

                        if (_soShipment == null)
                        {
                            throw new Exception("Shipment is not exists!");
                        }

                        #endregion

                        // Update Shipment
                        var shipmentGraph = PXGraph.CreateInstance <SOShipmentEntry>();
                        _soShipment.GetExtension <SOShipmentExt>().UsrTrackingNbr = row.TrackingNbr;
                        _soShipment.GetExtension <SOShipmentExt>().UsrCarrier     = row.Carrier;
                        shipmentGraph.Document.Update(_soShipment);
                        shipmentGraph.Save.Press();

                        InsertLog(row, true, string.Empty);
                    }
                }
                catch (Exception ex)
                {
                    isAllSuccess = false;
                    InsertLog(row, false, ex.Message);
                }
            }
            return(isAllSuccess);
        }
Beispiel #15
0
        protected virtual IEnumerable LumCallDCLShipemnt(PXAdapter adapter, [PXDate] DateTime?shipDate, [PXInt] int?siteID, [SOOperation.List] string operation)
        {
            try
            {
                var _soOrder = adapter.Get <SOOrder>().ToList()[0];

                // Get DCL SO. Data(正式:order_number = SO.OrderNbr)
                //var dclOrders = JsonConvert.DeserializeObject<OrderResponse>(
                //    DCLHelper.CallDCLToGetSOByOrderNumbers(
                //        this.DCLSetup.Select().RowCast<LUMVendCntrlSetup>().FirstOrDefault(), soOrder.OrderNbr).ContentResult);

                // Get DCL SO. Data(理論上資料一定存在,因為Process Order已經先篩選了)
                var dclOrders = JsonConvert.DeserializeObject <OrderResponse>(
                    DCLHelper.CallDCLToGetSOByOrderNumbers(
                        this.DCLSetup.Select().RowCast <LUMVendCntrlSetup>().FirstOrDefault(), _soOrder.CustomerRefNbr).ContentResult);

                if (dclOrders.orders == null)
                {
                    throw new Exception("Can not Mapping DCL Data");
                }

                if (!dclOrders.orders.Any(x => x.order_stage == 60))
                {
                    throw new Exception("DCL Order stage is not Fully Shipped");
                }

                if (_soOrder.OrderType == "FM")
                {
                    var setup           = this.MiddlewareSetup.Select().RowCast <LUMMiddleWareSetup>().FirstOrDefault();
                    var shippingCarrier = dclOrders.orders.FirstOrDefault()?.shipping_carrier;
                    var packagesInfo    = dclOrders.orders.FirstOrDefault().shipments.SelectMany(x => x.packages);
                    var _merchant       = string.IsNullOrEmpty(PXAccess.GetCompanyName()?.Split(' ')[1]) ? "us" :
                                          PXAccess.GetCompanyName()?.Split(' ')[1].ToLower() == "uk" ? "gb" : PXAccess.GetCompanyName()?.Split(' ')[1].ToLower();
                    MiddleWare_Shipment metaData = new MiddleWare_Shipment()
                    {
                        merchant        = _merchant,
                        amazon_order_id = dclOrders.orders.FirstOrDefault().po_number,
                        shipment_date   = dclOrders.orders.FirstOrDefault()?.shipments?.FirstOrDefault()?.ship_date + " 00:00:00",
                        shipping_method = "Standard",
                        carrier         = shippingCarrier,
                        tracking_number = string.Join("|", packagesInfo.Select(x => x.tracking_number))
                    };
                    // Update FBM
                    var updateResult = MiddleWareHelper.CallMiddleWareToUpdateFBM(setup, metaData);
                    // Check HttpStatusCode
                    if (updateResult.StatusCode != System.Net.HttpStatusCode.OK)
                    {
                        throw new PXException($"Update MiddleWare FBM fail , Code = {updateResult.StatusCode}");
                    }
                    // Check Response status
                    var updateModel = JsonConvert.DeserializeObject <MiddleWare_Response>(updateResult.ContentResult);
                    if (!updateModel.Status)
                    {
                        throw new PXException($"Update Middleware FBM fail, Msg = {updateModel.Message}");
                    }
                    _soOrder.GetExtension <SOOrderExt>().UsrSendToMiddleware = true;
                    Base.Document.Update(_soOrder);
                    Base.Save.Press();
                }
                else
                {
                    using (PXTransactionScope sc = new PXTransactionScope())
                    {
                        Base.CreateShipmentIssue(adapter, shipDate, siteID);
                        var processResult = PXProcessing <SOOrder> .GetItemMessage();

                        if (processResult.ErrorLevel != PXErrorLevel.RowInfo)
                        {
                            return(adapter.Get());
                        }

                        // Create SOShipment Graph
                        var graph = PXGraph.CreateInstance <SOShipmentEntry>();

                        // Find SOShipment
                        var _soOrderShipments =
                            FbqlSelect <SelectFromBase <SOOrderShipment, TypeArrayOf <IFbqlJoin> .Empty> .Where <BqlChainableConditionBase <TypeArrayOf <IBqlBinary> .FilledWith <And <Compare <SOOrderShipment.orderType, Equal <P.AsString> > > > > .And <BqlOperand <SOOrderShipment.orderNbr, IBqlString> .IsEqual <P.AsString> > >, SOOrderShipment> .View.Select(Base, _soOrder.OrderType, _soOrder.OrderNbr)
                            .RowCast <SOOrderShipment>();

                        foreach (var refItem in _soOrderShipments)
                        {
                            // Create new Adapter
                            var newAdapter = new PXAdapter(graph.Document)
                            {
                                Searches = new Object[] { refItem.ShipmentNbr }
                            };
                            // Select Current Shipment
                            var _soShipment = newAdapter.Get <SOShipment>().ToList()[0];

                            try
                            {
                                // Get Carrier and TrackingNbr
                                var shippingCarrier = dclOrders.orders.FirstOrDefault().shipping_carrier;
                                var packagesInfo    = dclOrders.orders.FirstOrDefault().shipments.SelectMany(x => x.packages);
                                _soShipment.GetExtension <SOShipmentExt>().UsrCarrier     = shippingCarrier;
                                _soShipment.GetExtension <SOShipmentExt>().UsrTrackingNbr = string.Join("|", packagesInfo.Select(x => x.tracking_number));
                                _soShipment.ShipmentDesc = $"Carrier: {shippingCarrier}|" +
                                                           $"TrackingNbr: {string.Join("|", packagesInfo.Select(x => x.tracking_number))}";
                                if (_soShipment.ShipmentDesc.Length > 256)
                                {
                                    _soShipment.ShipmentDesc = _soShipment.ShipmentDesc.Substring(0, 255);
                                }
                            }
                            catch (Exception e)
                            {
                                _soShipment.ShipmentDesc = e.Message;
                            }

                            // Update Data
                            graph.Document.Update(_soShipment);

                            // Remove Hold
                            graph.releaseFromHold.PressButton(newAdapter);
                            // Confirm Shipment
                            graph.confirmShipmentAction.PressButton(newAdapter);
                            // Prepare Invoice For 3D Orders
                            try
                            {
                                if (_soOrder.OrderType == "3D")
                                {
                                    newAdapter.AllowRedirect = true;
                                    graph.createInvoice.PressButton(newAdapter);
                                }
                            }
                            catch (PXRedirectRequiredException ex)
                            {
                                SOInvoiceEntry invoiceEntry = ex.Graph as SOInvoiceEntry;
                                var            soTax        = SelectFrom <SOTaxTran>
                                                              .Where <SOTaxTran.orderNbr.IsEqual <P.AsString>
                                                                      .And <SOTaxTran.orderType.IsEqual <P.AsString> > >
                                                              .View.Select(Base, _soOrder.OrderNbr, _soOrder.OrderType)
                                                              .RowCast <SOTaxTran>().FirstOrDefault();

                                var balance = invoiceEntry.Document.Current.CuryDocBal;
                                var refNbr  = invoiceEntry.Document.Current.RefNbr;
                                var invTax  = SelectFrom <ARTaxTran> .Where <ARTaxTran.refNbr.IsEqual <P.AsString> >
                                              .View.Select(Base, refNbr).RowCast <ARTaxTran>().FirstOrDefault();

                                var adjd = SelectFrom <ARAdjust2> .Where <ARAdjust2.adjdRefNbr.IsEqual <P.AsString> >
                                           .View.Select(Base, refNbr).RowCast <ARAdjust2>().FirstOrDefault();

                                if (soTax != null)
                                {
                                    // setting Tax
                                    invoiceEntry.Taxes.SetValueExt <ARTaxTran.curyTaxAmt>(invTax, soTax.CuryTaxAmt);
                                    invoiceEntry.Taxes.Update(invTax);
                                    // setting Document
                                    invoiceEntry.Document.SetValueExt <ARInvoice.curyTaxTotal>(invoiceEntry.Document.Current, soTax.CuryTaxAmt);
                                    invoiceEntry.Document.SetValueExt <ARInvoice.curyDocBal>(invoiceEntry.Document.Current, balance + (soTax.CuryTaxAmt ?? 0));
                                    invoiceEntry.Document.Update(invoiceEntry.Document.Current);
                                    invoiceEntry.Adjustments.SetValueExt <ARAdjust2.curyAdjdAmt>(adjd, adjd.CuryAdjdAmt + (soTax.CuryTaxAmt ?? 0));
                                    invoiceEntry.Adjustments.Update(adjd);
                                    invoiceEntry.releaseFromCreditHold.Press();
                                    invoiceEntry.Save.Press();
                                }
                            }
                            catch (Exception ex)
                            {
                                throw new Exception(ex.Message);
                            }
                        }

                        sc.Complete();
                    }
                }
            }
            catch (Exception e)
            {
                PXProcessing.SetError <SOOrder>(e.Message);
            }

            return(adapter.Get());
        }