/// <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 ); }
/// <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); }