/// <summary>
        /// Update the transport and elements with new status
        /// </summary>
        /// <param name="transports"></param>
        /// <param name="recTransportStatus"></param>
        /// <returns></returns>
        public int UpdateStatus( RecTransport record, RecTransport recTransportStatus, List<RecElementIdStatusStd> settings )
        {
            if( null == record || null == recTransportStatus )
            {
                return 0;
            }

            ModelPlanner plannerService = new ModelPlanner();
            recTransportStatus.Factory = record.Factory;
            recTransportStatus.Project = record.Project;
            recTransportStatus.TransportId = record.TransportId;
            plannerService.SaveElementTransportStatus( recTransportStatus, settings );

            int ret = 0;
            using( ImpactDatabase database = new ImpactDatabase() )
            {
                ImpactUpdate update = new ImpactUpdate( ImpTransport.Instance )
                {
                    Columns = 
					{
 						{ ImpTransport.TransportStatus, recTransportStatus.TransportStatus },
					},
                    Where =
					{
						ImpTransport.Factory.Equal( record.Factory ),
						ImpTransport.Project.Equal( record.Project ),
						ImpTransport.TransportId.Equal( record.TransportId ),
					}
                };
                
                bool b1 = recTransportStatus.TransportStatus == (int)TransportStatus.Planned && recTransportStatus.UpdateDeliveryDate && null != recTransportStatus.DeliveryDate;
                bool b2 = recTransportStatus.TransportStatus == (int)TransportStatus.Delivered && recTransportStatus.UpdateDeliveryDate && null != recTransportStatus.DeliveryDate;

                if( b1 || b2 )
                {
                    update.Columns.Add( ImpTransport.DeliveryDate, recTransportStatus.DeliveryDate );
                }

                string sql = update.ToString();

                ret = database.ExecuteNonQuery( sql );
            }
            return ret;
        }
        /// <summary>
        /// Swaps elements erection and load sequence
        /// </summary>
        /// <param name="rec1"></param>
        /// <param name="rec2"></param>
        /// <returns></returns>
        public bool SwapElementSequence( RecTMElement rec1, RecTMElement rec2 )
        {
            if( rec1 == null || rec2 == null )
            {
                return false;
            }
            // Create a temp copy
            RecTMElement recTemp = new RecTMElement( rec1 );

            ModelPlanner svc = new ModelPlanner();
            // Update the rec1
            rec1.StackSequenceNo = rec2.StackSequenceNo;
            svc.SaveElementTransport( rec1, false );
            // Update the rec2
            rec2.StackSequenceNo = recTemp.StackSequenceNo;
            svc.SaveElementTransport( rec2, false );

            return true;
        }
        /// <summary>
        /// Delete Cascade Stack
        /// </summary>
        /// <param name="transport"></param>
        /// <param name="veh"></param>
        /// <param name="stack"></param>
        /// <returns></returns>
		public int DeleteCascadeStackTransport( RecTransport transport, RecTransportVehicleStd veh, RecTransportStack stack )
		{
            ProjectManager mgr = new ProjectManager();
            RecElementIdStatusStd std = new RecElementIdStatusStd { Factory = transport.Factory, Project = transport.Project };
            List<RecElementIdStatusStd> settings = mgr.LoadStandardSettings( std );

            // Update Status, Note this can be optimized!
            RecTransport recTransportStatus = new RecTransport( transport );
            recTransportStatus.TransportStatus = (int)TransportStatus.NoStatus;
            recTransportStatus.ElementIdStatus = RecElementIdStatusStd.GetLocalSettingFromGlobalId( settings, recTransportStatus.TransportStatus).StatusId;
            UpdateStatus( transport, recTransportStatus, settings );
            // No reset
			ModelPlanner svc = new ModelPlanner();
			svc.ResetTransport( transport.Factory, transport.Project, 0, transport.TransportId, veh.VehicleId, stack.StackId );

			ProjectManager StackSvc = new ProjectManager();
			return StackSvc.DeleteTransportStack( stack );
		}
Exemple #4
0
		/// <summary>
		/// Update the element with transport information
		/// Create a new record for the element if it is missing
		/// </summary>
		public void Save()
		{
			ModelPlanner svc = new ModelPlanner();
			svc.SaveElementTransport( this, true );
		}
        /// <summary>
        /// Saves elements into the database
        /// </summary>
        public int Save( List<RecTMElement> elements )
        {
            var cast = GetCast();
            var bedSequenceNo = 1;
            foreach( var elem in elements )
            {
                elem.CastId = cast.CastId;
                elem.BedSequenceNo = bedSequenceNo;
                //elem.BedZ = 0;

                var svc = new ModelPlanner();
                svc.SaveElementProduction( elem, true );

                bedSequenceNo++;
            }

            return elements.Count;
        }
        /// <summary>
        /// Sort existin elements
        /// </summary>
        /// <param name="elements"></param>
        /// <param name="form"></param>
        /// <param name="curFilter"></param>
        /// <returns></returns>
		public int Sort( List<RecTMElement> elements, RecProductionFormStd form, BedFilter curFilter )
		{
			if( null == form || null == elements || elements.Count == 0 )
			{
				var msg = string.Format( "Missing sorting input!" );
				throw new FaultException<BusinessFaultContract>( new BusinessFaultContract() { Argument = msg }, "Cannot sort form!" );
			}

			this.filter = curFilter;
            var bed = new ProductionBed( form, curFilter );

			var positionedElements = bed.FillBed( elements );
			var savedElem = bed.Save( positionedElements );

            if( savedElem < elements.Count )
            {
                // remove the delta
                var mgr = new ProjectManager();
                var planner = new ModelPlanner();
                foreach( RecTMElement elem in elements )
                {
                    if( !mgr.Find( positionedElements, elem ) )
                    {
                        planner.ResetElementProduction( elem.Factory, elem.Project, 0, elem.ElementId, false );
                    }
                }
            }

            return 0;
		}
        /// <summary>
        /// Update the cast and elements with new status
        /// </summary>
        /// <param name="transports"></param>
        /// <param name="recTransportStatus"></param>
        /// <returns></returns>
        private int UpdateStatus( RecProductionCast cast, RecProductionCast recProductionCastStatus, List<RecElementIdStatusStd> settings )
        {
            if( null == cast || null == recProductionCastStatus )
            {
                return 0;
            }

            ModelPlanner plannerService = new ModelPlanner();
            
            plannerService.SaveElementProductionStatus( cast, recProductionCastStatus, settings );

            int ret = 0;
            using( ImpactDatabase database = new ImpactDatabase() )
            {
                ImpactUpdate update = new ImpactUpdate( ImpProductionCast.Instance )
                {
                    Columns = 
					{
 						{ ImpProductionCast.CastStatus, recProductionCastStatus.CastStatus },
					},
                    Where =
					{
						ImpProductionCast.Factory.Equal( cast.Factory ),
						ImpProductionCast.Project.Equal( cast.Factory ), //Factory, Factory
						ImpProductionCast.CastId.Equal( cast.CastId ),
					}
                };
                
                string sql = update.ToString();

                ret = database.ExecuteNonQuery( sql );
            }
            return ret;
        }
		/// <summary>
		/// Returns a list of the reset element ids.
		/// </summary>
		/// <param name="record">The record to delete from the database.</param>
		/// <returns>The number of affected records.</returns>
		public CastScheduleResult DeleteProductionCast( RecProductionCast record )
		{
            ProjectManager projectManagerService = new ProjectManager();   
            BedFilter filter = new BedFilter();
            filter.Factory = record.Factory;
            List<string> projectsInvolved = projectManagerService.LoadCastProjects( filter, record.CastId );
            if( null == projectsInvolved )
            {
                return null;
            }

            ProjectManager mgr = new ProjectManager();
            RecElementIdStatusStd std = new RecElementIdStatusStd { Factory = record.Factory, Project = record.Project };
            List<RecElementIdStatusStd> settings = mgr.LoadStandardSettings( std );

			ModelPlanner svc = new ModelPlanner( );
            List<int> deletedIds = svc.LoadElementIds( record.Factory, record.Project, record.CastId );

            // (1) Reset elements
            // Update Status, Note this can be optimized!
            RecProductionCast recProductionCastStatus = new RecProductionCast( record );
            recProductionCastStatus.CastStatus = (int)CastStatus.NoStatus;
            recProductionCastStatus.ElementIdStatus = RecElementIdStatusStd.GetLocalSettingFromGlobalId( settings, recProductionCastStatus.CastStatus).StatusId;
            UpdateStatus( record, recProductionCastStatus, settings );
            // Now reset
			svc.ResetElementProduction( record.Factory, record.Project, record.CastId, 0, false );

            // (2) Delete strands
            RecProductionCastStrand recStrand = new RecProductionCastStrand();
            recStrand.Factory = record.Factory;
            recStrand.Project = record.Factory; // Factory, Factory for productionCast & ProductionCastStrand
            recStrand.CastId = record.CastId;
            recStrand.StrandPos = 0;
            ProjectManager strand = new ProjectManager();
            strand.DeleteProductionCastStrand(recStrand);
            // (3) Now delete the cast Object
            int result = 0;
            // The cast object can be deleted if no elements belong to other projects other that the current one
            if( projectsInvolved.Count == 0 || (projectsInvolved.Count == 1 && projectsInvolved[0].Equals( record.Project ) )  )
            {
                var delete = new ImpactDelete( ImpProductionCast.Instance )
                {
                    Where = 
				{
					{ ImpProductionCast.Factory.Equal( record.Factory )},
					{ ImpProductionCast.Project.Equal( record.Factory )},// Factory, Factory for productionCast & ProductionCastStrand
					{ ImpProductionCast.CastId.Equal( record.CastId )},
				}
                };

                string statement = delete.ToString();

                using( ImpactDatabase database = new ImpactDatabase() )
                {
                    result = database.ExecuteNonQuery( statement );
                }
            }

			return new CastScheduleResult(deletedIds, projectsInvolved);
		}