// POST: api/Index
        public string PostInsertOrder(SapSalesOrder sapSalesOrder)
        {
            string _OrderNumber = "";

            _OrderNumber = this._sapConnectorInterface.CreateOrder(sapSalesOrder);
            return(_OrderNumber);
        }
예제 #2
0
 private void BtnOrder_Click(object sender, EventArgs e)
 {
     SapSalesOrder   _SapSalesOrder = setSalesOrder();
     string          json           = JsonConvert.SerializeObject(_SapSalesOrder);
     string          _Action        = "Index";
     string          _Uri           = _ConnectionString + _Action;
     ApiResultEntity _ApiResult     = CallWebAPI.Post(json, _Uri);
 }
예제 #3
0
        private SapSalesOrder setSalesOrder()
        {
            SapSalesOrder        _SapSalesOrder = new SapSalesOrder();
            List <SalesItem>     _ItemList      = new List <SalesItem>();
            List <SalesPartner>  _PartnerList   = new List <SalesPartner>();
            List <SalesSchedule> _ScheduleList  = new List <SalesSchedule>();
            SalesHeader          _Header        = new SalesHeader();

            _Header.DOC_TYPE      = "ZOR3";
            _Header.SALES_ORG     = "1000";
            _Header.DISTR_CHAN    = "10";
            _Header.DIVISION      = "13";
            _Header.PURCH_NO_C    = "C#";
            _SapSalesOrder.Header = _Header;
            SalesItem _Item = new SalesItem();

            _Item.ITM_NUMBER = "000010";
            _Item.MATERIAL   = "12-04BFFB-SL7001";
            _Item.TARGET_QTY = "555";
            _ItemList.Add(_Item);
            SalesItem _Item2 = new SalesItem();

            _Item2.ITM_NUMBER = "000020";
            _Item2.MATERIAL   = "ADC-07PMMS-LS7001";
            _Item2.TARGET_QTY = "100";
            _ItemList.Add(_Item2);
            _SapSalesOrder.ItemList = _ItemList;
            SalesPartner _Partner = new SalesPartner();

            _Partner.PARTN_ROLE = "AG";
            _Partner.PARTN_NUMB = "0010000242";
            _PartnerList.Add(_Partner);
            _SapSalesOrder.PartnerList = _PartnerList;
            SalesSchedule _Schedule = new SalesSchedule();

            _Schedule.REQ_QTY    = "555";
            _Schedule.ITM_NUMBER = "000010";
            _Schedule.SCHED_LINE = "0001";
            _Schedule.REQ_DATE   = "20190920";
            _ScheduleList.Add(_Schedule);
            SalesSchedule _Schedule2 = new SalesSchedule();

            _Schedule2.REQ_QTY    = "50";
            _Schedule2.ITM_NUMBER = "000020";
            _Schedule2.SCHED_LINE = "0001";
            _Schedule2.REQ_DATE   = "20190923";
            _ScheduleList.Add(_Schedule2);
            SalesSchedule _Schedule3 = new SalesSchedule();

            _Schedule3.REQ_QTY    = "50";
            _Schedule3.ITM_NUMBER = "000020";
            _Schedule3.SCHED_LINE = "0002";
            _Schedule3.REQ_DATE   = "20190928";
            _ScheduleList.Add(_Schedule3);
            _SapSalesOrder.ScheduleList = _ScheduleList;

            return(_SapSalesOrder);
        }
예제 #4
0
        /// <summary>
        /// insert 850 table
        /// Edi_SalesHeader/Edi_SalesItem/Edi_SalesPartner/Edi_SalesSchedule
        /// Is_Proc:V success F fail
        /// CreateBy:Edi/Web
        /// </summary>
        /// <param name="sapSalesOrder"></param>
        /// <param name="orderNumber"></param>
        public void InsertSapSalesOrder(SapSalesOrder sapSalesOrder, string orderNumber)
        {
            Edi_SalesHeader _Edi_SalesHeader = new Edi_SalesHeader();

            _Edi_SalesHeader.DOC_TYPE    = sapSalesOrder.Header.DOC_TYPE;
            _Edi_SalesHeader.SALES_ORG   = sapSalesOrder.Header.SALES_ORG;
            _Edi_SalesHeader.DISTR_CHAN  = sapSalesOrder.Header.DISTR_CHAN;
            _Edi_SalesHeader.DIVISION    = sapSalesOrder.Header.DIVISION;
            _Edi_SalesHeader.PURCH_NO_C  = sapSalesOrder.Header.PURCH_NO_C;
            _Edi_SalesHeader.PURCH_DATE  = sapSalesOrder.Header.PURCH_DATE;
            _Edi_SalesHeader.Is_Proc     = orderNumber != "" ? "V" : "F";
            _Edi_SalesHeader.DateTime    = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss:");
            _Edi_SalesHeader.OrderNumber = orderNumber;
            _Edi_SalesHeader.CreateBy    = sapSalesOrder.CreateBy;
            this._edi_SalesHeaderService.Create(_Edi_SalesHeader);
            foreach (SalesItem si in sapSalesOrder.ItemList)
            {
                Edi_SalesItem _Edi_SalesItem = new Edi_SalesItem();
                _Edi_SalesItem.OrderNumber         = orderNumber;
                _Edi_SalesItem.ITM_NUMBER          = si.ITM_NUMBER;
                _Edi_SalesItem.MATERIAL            = si.MATERIAL;
                _Edi_SalesItem.CUST_MAT35          = si.CUST_MAT35;
                _Edi_SalesItem.CustomerItemNumber  = si.CustomerItemNumber;
                _Edi_SalesItem.CustomerUnit        = si.CustomerUnit;
                _Edi_SalesItem.CustomerPrice       = si.CustomerPrice;
                _Edi_SalesItem.DateTime            = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");
                _Edi_SalesItem.CustomerUnitOfPrice = si.CustomerUnitOfPrice;
                this._edi_SalesItemService.Create(_Edi_SalesItem);
            }
            foreach (SalesSchedule ss in sapSalesOrder.ScheduleList)
            {
                Edi_SalesSchedule _Edi_SalesSchedule = new Edi_SalesSchedule();
                _Edi_SalesSchedule.OrderNumber = orderNumber;
                _Edi_SalesSchedule.ITM_NUMBER  = ss.ITM_NUMBER;
                _Edi_SalesSchedule.REQ_DATE    = ss.REQ_DATE;
                _Edi_SalesSchedule.SCHED_LINE  = ss.SCHED_LINE;
                _Edi_SalesSchedule.DateTime    = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");
                _Edi_SalesSchedule.REQ_QTY     = ss.REQ_QTY;
                this._edi_SalesScheduleService.Create(_Edi_SalesSchedule);
            }
            foreach (SalesPartner sp in sapSalesOrder.PartnerList)
            {
                Edi_SalesPartner _Edi_SalesPartner = new Edi_SalesPartner();
                _Edi_SalesPartner.OrderNumber = orderNumber;
                _Edi_SalesPartner.PARTN_ROLE  = sp.PARTN_ROLE;
                _Edi_SalesPartner.PARTN_NUMB  = sp.PARTN_NUMB;
                _Edi_SalesPartner.STREET      = sp.STREET;
                _Edi_SalesPartner.CITY        = sp.CITY;
                _Edi_SalesPartner.REGION      = sp.REGION;
                _Edi_SalesPartner.POSTL_CODE  = sp.POSTL_CODE;
                _Edi_SalesPartner.COUNTRY     = sp.COUNTRY;
                _Edi_SalesPartner.NAME        = sp.NAME;
                _Edi_SalesPartner.DateTime    = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");
                _Edi_SalesPartner.TELEPHONE   = sp.TELEPHONE;
                this._edi_SalesPartnerService.Create(_Edi_SalesPartner);
            }
        }
예제 #5
0
        /// <summary>
        /// call webapi to create order & return order number
        /// </summary>
        /// <param name="sapSalesOrder"></param>
        /// <returns></returns>
        public static string creatOrder(SapSalesOrder sapSalesOrder)
        {
            string          json       = JsonConvert.SerializeObject(sapSalesOrder);
            string          _Action    = "BapiOrder";
            string          _Uri       = _ConnectionString + _Action;
            ApiResultEntity _ApiResult = CallWebAPI.Post(json, _Uri);

            return(_ApiResult.Data.ToString());
        }
예제 #6
0
        // POST: api/Index
        /// <summary>
        /// create order
        /// send email to responsible sales
        /// </summary>
        /// <param name="sapSalesOrder"></param>
        /// <returns></returns>
        public string PostInsertOrder(SapSalesOrder sapSalesOrder)
        {
            string _OrderNumber = "";

            _OrderNumber = this._sapConnectorInterface.CreateOrder(sapSalesOrder);
            if (_OrderNumber != "")
            {
                this._sapEDIService.Email(_OrderNumber, sapSalesOrder);
            }
            this._ediSerivice.InsertSapSalesOrder(sapSalesOrder, _OrderNumber);
            return(_OrderNumber);
        }
예제 #7
0
        public bool Email(string ordernumber, SapSalesOrder sapSalesOrder)
        {
            string[]           _Email      = sapSalesOrder.SalesEmail.Split('@');
            string             _Body       = "Hello " + _Email[0] + "<br>order:" + Function.SetFontColor(ordernumber, "blue") + " has created <br>";
            List <SalesHeader> _HeaderList = new List <SalesHeader>();

            _HeaderList.Add(sapSalesOrder.Header);
            DataTable dtHeader   = Function.ListToDataTable(_HeaderList);
            DataTable dtItem     = Function.ListToDataTable(sapSalesOrder.ItemList);
            DataTable dtPartner  = Function.ListToDataTable(sapSalesOrder.PartnerList);
            DataTable dtSchedule = Function.ListToDataTable(sapSalesOrder.ScheduleList);
            string    _BodyTable = Function.RenderDataTableToHtml(dtHeader) + Function.RenderDataTableToHtml(dtItem) + Function.RenderDataTableToHtml(dtPartner) + Function.RenderDataTableToHtml(dtSchedule);

            _Body = _Body + _BodyTable;
            bool _Success = Function.SendEmail("EDI data-" + sapSalesOrder.CustomerName, _Body, "*****@*****.**", sapSalesOrder.SalesEmail);

            return(_Success);
        }
예제 #8
0
        /// <summary>
        /// you need  excute(se38) ABLM_MODIFY_ITEMS in sap system and set relavant parameter
        /// previous when you use BAPI_SALESORDER_CREATEFROMDAT2 this RFC module
        /// </summary>
        /// <param name="destinationName"></param>
        /// <returns></returns>
        public string CreateOrder(SapSalesOrder salesOrder)
        {
            if (rfcDestination == null)
            {
                rfcDestination = RfcDestinationManager.GetDestination(WebApiApplication.destinationConfigName);
            }
            RfcRepository repo            = rfcDestination.Repository;
            IRfcFunction  _SalesDoc       = repo.CreateFunction("BAPI_SALESORDER_CREATEFROMDAT2");
            IRfcFunction  _SalesDocCommit = repo.CreateFunction("BAPI_TRANSACTION_COMMIT");
            IRfcStructure _SalesHeader    = _SalesDoc.GetStructure("ORDER_HEADER_IN");
            IRfcTable     _SalesItems     = _SalesDoc.GetTable("ORDER_ITEMS_IN");
            IRfcTable     _SalesPartners  = _SalesDoc.GetTable("ORDER_PARTNERS");
            IRfcTable     _SalesSchedule  = _SalesDoc.GetTable("ORDER_SCHEDULES_IN");

            _SalesHeader.SetValue("DOC_TYPE", salesOrder.Header.DOC_TYPE);
            _SalesHeader.SetValue("SALES_ORG", salesOrder.Header.SALES_ORG);
            _SalesHeader.SetValue("DISTR_CHAN", salesOrder.Header.DISTR_CHAN);
            _SalesHeader.SetValue("DIVISION", salesOrder.Header.DIVISION);
            _SalesHeader.SetValue("PURCH_NO_C", salesOrder.Header.PURCH_NO_C);
            //test 採購日期
            _SalesHeader.SetValue("PURCH_DATE", salesOrder.Header.PURCH_DATE);
            foreach (SalesItem si in salesOrder.ItemList)
            {
                IRfcStructure _SalesItemsStruct = _SalesItems.Metadata.LineType.CreateStructure();
                _SalesItemsStruct.SetValue("ITM_NUMBER", si.ITM_NUMBER);
                //_SalesItemsStruct.SetValue("MATERIAL", si.MATERIAL);
                _SalesItemsStruct.SetValue("MATERIAL_LONG", si.MATERIAL);
                _SalesItemsStruct.SetValue("TARGET_QTY", si.TARGET_QTY);
                //test 客戶物料號碼
                _SalesItemsStruct.SetValue("CUST_MAT35", si.CUST_MAT35);
                _SalesItems.Append(_SalesItemsStruct);
            }
            foreach (SalesPartner sp in salesOrder.PartnerList)
            {
                IRfcStructure _SalesPartnersStruct = _SalesPartners.Metadata.LineType.CreateStructure();
                _SalesPartnersStruct.SetValue("PARTN_ROLE", sp.PARTN_ROLE);
                _SalesPartnersStruct.SetValue("PARTN_NUMB", sp.PARTN_NUMB);
                _SalesPartners.Append(_SalesPartnersStruct);
            }
            foreach (SalesSchedule ss in salesOrder.ScheduleList)
            {
                IRfcStructure _SalesScheduleStruct = _SalesSchedule.Metadata.LineType.CreateStructure();
                _SalesScheduleStruct.SetValue("REQ_QTY", ss.REQ_QTY);
                _SalesScheduleStruct.SetValue("ITM_NUMBER", ss.ITM_NUMBER);
                _SalesScheduleStruct.SetValue("SCHED_LINE", ss.SCHED_LINE);
                _SalesScheduleStruct.SetValue("REQ_DATE", ss.REQ_DATE);
                _SalesSchedule.Append(_SalesScheduleStruct);
            }
            ////salesPartnersStruct.SetValue("PARTN_ROLE", "RE");
            ////salesPartnersStruct.SetValue("PARTN_NUMB", "0010000650");
            ////salesPartners.Append(salesPartnersStruct);
            RfcSessionManager.BeginContext(rfcDestination);
            _SalesDoc.Invoke(rfcDestination);
            _SalesDocCommit.Invoke(rfcDestination);
            RfcSessionManager.EndContext(rfcDestination);
            string          _SalesCocument = _SalesDoc.GetString("SALESDOCUMENT");
            DataTable       dtReturn       = ConvertToDotNetTable(_SalesDoc.GetTable("RETURN"));
            List <ErrorLog> _ErrorList     = SetErrorLog(dtReturn, "BAPI_SALESORDER_CREATEFROMDAT2", _SalesCocument, salesOrder.Header.PURCH_NO_C);
            List <string>   _Error         = this._errorLogService.MiltiCreate(_ErrorList);

            return(_SalesCocument);
        }
예제 #9
0
        /// <summary>
        /// for mouser
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        public override string Parse(EdiBatch b, Edi_Customer c, string parserFile)
        {
            int                  _ItemNumber    = 1;
            string               _CustomerName  = "";
            string               _Log           = "";
            SapSalesOrder        _SapSalesOrder = new SapSalesOrder();
            List <SalesItem>     _ItemList      = new List <SalesItem>();
            List <SalesPartner>  _PartnerList   = new List <SalesPartner>();
            List <SalesSchedule> _ScheduleList  = new List <SalesSchedule>();
            SalesHeader          _Header        = new SalesHeader();

            _Header.DOC_TYPE   = c.DOC_TYPE;   //need to discuss
            _Header.SALES_ORG  = c.SALES_ORG;  //need to discuss
            _Header.DISTR_CHAN = c.DISTR_CHAN; //need to discuss
            _Header.DIVISION   = c.DIVISION;   //need to discuss
            try
            {
                EdiTrans   _PO  = b.Interchanges[0].Groups[0].Transactions[0];
                EdiSegment _BEG = (EdiSegment)_PO.Content.FirstOrDefault(l => l.Definition.Name == "BEG");
                if (_BEG != null)
                {
                    _Header.PURCH_NO_C = _BEG.Content[2].ToString();
                    _Header.PURCH_DATE = _BEG.Content[4].ToString();
                }
                _SapSalesOrder.Header = _Header;

                var listL_N1 = _PO.Content.Where(l => l.Definition.GetType() == typeof(M_850.L_N1)).Select(l => l).ToList();
                foreach (EdiLoop n1 in listL_N1)
                {
                    SalesPartner _Partner = new SalesPartner();
                    // var _N1Loop = (EdiLoop)n1;
                    EdiSegment _N1 = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "N1");
                    if (_N1 != null)
                    {
                        if ((_N1.Content[0].ToString() == "BT") || (_N1.Content[0].ToString() == "BY"))
                        {
                            _Partner.PARTN_ROLE = "AG";
                        }
                        else if (_N1.Content[0].ToString() == "ST")
                        {
                            _Partner.PARTN_ROLE = "WE";
                        }

                        if (c.EdiType == 1)
                        {
                            _Partner.PARTN_NUMB = c.SapCustomerId;                //how to know what code in altw sap ,loop edi table
                        }
                        else
                        {
                            _Partner.PARTN_NUMB = _N1.Content[3].ToString();
                        }
                        _CustomerName = _N1.Content[1].ToString();
                    }
                    EdiSegment _N3 = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "N3");
                    if (_N3 != null)
                    {
                        _Partner.STREET = _N3.Content[0].ToString();
                    }
                    EdiSegment _N4 = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "N4");
                    if (_N4 != null)
                    {
                        _Partner.CITY       = _N4.Content[0].ToString();
                        _Partner.POSTL_CODE = _N4.Content[2].ToString();
                        _Partner.COUNTRY    = _N4.Content[3].ToString();
                        _Partner.REGION     = _N4.Content[1].ToString();
                    }
                    EdiSegment _PER = (EdiSegment)n1.Content.FirstOrDefault(l => l.Definition.Name == "PER");
                    if (_PER != null)
                    {
                        _Partner.NAME      = _PER.Content[1].ToString();
                        _Partner.TELEPHONE = _PER.Content[3].ToString();
                    }
                    _PartnerList.Add(_Partner);
                }
                _SapSalesOrder.PartnerList = _PartnerList;
                var listL_PO1 = _PO.Content.Where(l => l.Definition.GetType() == typeof(M_850.L_PO1)).Select(l => l).ToList();
                foreach (EdiLoop po1 in listL_PO1)
                {
                    int       _SchedLine = 1;
                    SalesItem _Item      = new SalesItem();
                    // var _PO1Loop = (EdiLoop)po1;
                    EdiSegment _PO1 = (EdiSegment)po1.Content.FirstOrDefault(l => l.Definition.Name == "PO1");
                    if (_PO1 != null)
                    {
                        _Item.ITM_NUMBER = (_ItemNumber * 10).ToString().PadLeft(6, '0'); //need use altw rule 000010
                                                                                          //mouser special logic PO111 is part number
                                                                                          // if(c.SapCustomerId== "0010000136") _Item.MATERIAL = _PO1.Content[10].ToString();
                                                                                          //else _Item.MATERIAL = _PO1.Content[8].ToString();
                        _Item.MATERIAL            = _PO1.Content[Convert.ToInt32(c.PartNumberIndex)].ToString();
                        _Item.TARGET_QTY          = _PO1.Content[1].ToString();
                        _Item.CUST_MAT35          = _PO1.Content[6].ToString();
                        _Item.CustomerItemNumber  = _PO1.Content[0].ToString();
                        _Item.CustomerPrice       = _PO1.Content[3].ToString();
                        _Item.CustomerUnit        = _PO1.Content[2].ToString();
                        _Item.CustomerUnitOfPrice = _PO1.Content[4].ToString();
                    }
                    _ItemList.Add(_Item);
                    var listL_SCH = po1.Content.Where(l => l.Definition.GetType() == typeof(M_850.L_SCH)).Select(l => l).ToList();
                    foreach (EdiLoop sch in listL_SCH)
                    {
                        SalesSchedule _Schedule = new SalesSchedule();
                        // var _SCHLoop = (EdiLoop)sch;
                        EdiSegment _SCH = (EdiSegment)sch.Content.FirstOrDefault(l => l.Definition.Name == "SCH");
                        if (_SCH != null)
                        {
                            _Schedule.REQ_QTY    = _SCH.Content[0].ToString();
                            _Schedule.ITM_NUMBER = _Item.ITM_NUMBER;
                            _Schedule.SCHED_LINE = _SchedLine.ToString().PadLeft(4, '0');
                            _Schedule.REQ_DATE   = _SCH.Content[5].ToString();
                        }
                        _ScheduleList.Add(_Schedule);
                        _SchedLine++;
                    }
                    _ItemNumber++;
                }
                _SapSalesOrder.ItemList     = _ItemList;
                _SapSalesOrder.ScheduleList = _ScheduleList;
                _SapSalesOrder.CustomerName = _CustomerName;
                _SapSalesOrder.CreateBy     = "Edi";
                _SapSalesOrder.SalesEmail   = c.SalesEmail;
                edi.SapSalesOrder           = _SapSalesOrder;
            }
            catch (Exception ex)
            {
                _Log = "\r\n" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + " setSalesOrderByEdi: Customer Id:" + c.SapCustomerId + " File :" + parserFile + "\r\n" + ex.Message;
                logger.Error(_Log);
                edi.Log = _Log;
            }
            return(_Log);
        }