public string SubmitOutgestion([FromBody] OutgestionModel outgestionModel)
        {
            OutboundMaster ms = new OutboundMaster();

            ms.DatasetId        = outgestionModel.Mapping.DataSetId;
            ms.IsWithoutTempate = outgestionModel.Mapping.IsWithoutTempate;
            ms.TemplateId       = outgestionModel.Mapping.TemplateId;
            ms.IsErrorOutbound  = outgestionModel.Mapping.IsErrorOutbound;
            ms.CreatedBy        = outgestionModel.Mapping.CreatedBy;
            ms.UpdatedBy        = outgestionModel.Mapping.UpdatedBy;
            //creating mapping details
            List <ZionWeb.DAL.Entities.CoreToOutboundDetails> mapDetails = new List <ZionWeb.DAL.Entities.CoreToOutboundDetails>();
            int order = 1;

            outgestionModel.Mapping.MappingArray.ForEach(m =>
            {
                if (m.Source.CoreDetailId != 0)
                {
                    CoreToOutboundDetails mapRow = new CoreToOutboundDetails
                    {
                        CreatedBy        = outgestionModel.Mapping.CreatedBy,
                        CreatedDate      = DateTime.Now,
                        CoreDetailId     = m.Source.CoreDetailId,
                        TemplateDetailId = (int)m.Target.TemplateDetailId,
                        Order            = order
                    };
                    mapDetails.Add(mapRow);
                    order++;
                }
            });
            //Create joins and filters conditions list
            List <OutboundFilterJoinConditions> outboundFilterJoinConditions = new List <OutboundFilterJoinConditions>();

            //check for userquery
            if (!String.IsNullOrEmpty(outgestionModel.UserQuery) && outgestionModel.UserQuery.Length > 0)
            {
                ms.UserQuery = outgestionModel.UserQuery;
            }
            else
            {
                StringBuilder computedQuery = new StringBuilder();
                computedQuery.Append(outgestionModel.Mapping.SelectQuery + " ");
                //Add Joins
                if (outgestionModel.Joins != null && outgestionModel.Joins.Count > 0 && outgestionModel.Mapping.TableList.Count > 1)
                {
                    foreach (OutboundFilterJoinModel model in outgestionModel.Joins)
                    {
                        OutboundFilterJoinConditions entity = new OutboundFilterJoinConditions
                        {
                            Column1CoreDetailId = model.Column1CoreDetailId,
                            Column2CoreDetailId = model.Column2CoreDetailId,
                            JoinCondition       = model.JoinCondition,
                            Operator            = model.Operator,
                            Order       = model.Order,
                            CreatedBy   = outgestionModel.Mapping.CreatedBy,
                            CreatedDate = DateTime.Now
                        };
                        outboundFilterJoinConditions.Add(entity);
                    }
                    string joinsQuery = GenerateJoinsQuery(outgestionModel.Joins);
                    computedQuery.Append(joinsQuery + " ");
                }
                else
                {
                    computedQuery.Append(outgestionModel.Mapping.TableList[0] + " ");
                }
                //Add Filters
                if (outgestionModel.Filters != null && outgestionModel.Filters.Count > 0)
                {
                    StringBuilder filtersQuery = new StringBuilder();
                    foreach (OutboundFilterJoinModel model in outgestionModel.Filters)
                    {
                        OutboundFilterJoinConditions entity = new OutboundFilterJoinConditions
                        {
                            Column1CoreDetailId = model.Column1CoreDetailId,
                            Column2CoreDetailId = model.Column2CoreDetailId,
                            WhereText           = model.WhereText,
                            Operator            = model.Operator,
                            Order       = model.Order,
                            CreatedBy   = outgestionModel.Mapping.CreatedBy,
                            CreatedDate = DateTime.Now
                        };
                        outboundFilterJoinConditions.Add(entity);
                        int index = outgestionModel.Filters.IndexOf(model);
                        if (index > 0)
                        {
                            filtersQuery = filtersQuery.Append(" AND ");
                        }
                        filtersQuery = filtersQuery.Append(" " + model.CoreTable1 + "." + model.Column1Name + " " + model.Operator + " ");

                        if (!string.IsNullOrEmpty(model.Column2Name) && model.Column2Name.Trim().Length > 0)
                        {
                            filtersQuery = filtersQuery.Append(model.CoreTable2 + "." + model.Column2Name);
                        }
                        else if (!string.IsNullOrEmpty(model.WhereText) && model.WhereText.Trim().Length > 0)
                        {
                            //Check for datatype not required
                            if (model.Operator.ToLower() == "in")
                            {
                                filtersQuery = filtersQuery.Append(" (" + model.WhereText.Trim() + ")");
                            }
                            else
                            {
                                filtersQuery = filtersQuery.Append(" " + model.WhereText.Trim());
                            }
                        }
                    }
                    computedQuery.Append(" WHERE " + filtersQuery);
                }
                ms.ComputedQuery = computedQuery.ToString();
            }
            //apply logic to convert it to various models and query.
            return(_outgestionDAL.SubmitOutgestion(ms, mapDetails, outboundFilterJoinConditions));
        }
 public string SubmitOutgestion([FromBody] OutgestionModel outgestionModel)
 {
     return(_outgestionManager.SubmitOutgestion(outgestionModel));
 }