none
Onay Akışı RRS feed

  • Soru

  • Merhabalar arkadaşlar,

    Bir uygulamam var stok programı türünde. Şöyle bir duruma ihtiyacım var. Ambar 'a kayıt edilen yeni bir ürün olduğunda ambar yöneticisinin yani (admin ) onayına düşsün, eğer admin onaylar ise stok listesinde görünsün istiyorum.

    Yada, Ambara daha önceden kaydedilen bir X ürünü olsun. Bu x ürününden depoda 3 adet var. Buna ilave olarak 5 adet daha geldi. Madde girişini yapan personel bu x ürününden 5 adet daha geldini sisteme girdiğinde tekrar admin onayına düşsün admin kontrol edecek ewet gerçekten 5 adet kodu vs bilgileri doğruysa onay verecek sisteme girecek ve güncel bakiye olarak görünecek.

    Yol gösterebilirseniz sevinirim.

    20 Nisan 2016 Çarşamba 13:01

Yanıtlar

  • Tasarım desenlerinden chain of responsibility (sorumluluk zinciri) araştırmanı tavsiye ediyorum. Ayrıca örnek kod da paylaşayım benim işime yaramıştı.

    namespace COR000
    {

        /// <summary>
        /// The 'Handler' abstract class
        /// </summary>
        ///
        public abstract class Employee 
        {
            public Guid EmployeeId { get; set; }
            public int LeaveDays { get; set; }
            //approve edecek bir sonraki kişi
            public Employee NextApprover { get; set; }

            public Employee()
            {
                EmployeeId = Guid.NewGuid();
                LeaveDays = 5;
            }
            //Eventleri tanımlayalım
            public delegate void OnLeaveApplied(int requestedDays);
            public event OnLeaveApplied onLeaveAplied = null;

            public abstract void ApproveLeave(int requestedDays);
            //using this we can apply for leave
            public void ApplyLeave(int requestedDays) {

                if (onLeaveAplied !=null)
                {
                    onLeaveAplied(requestedDays);
                    
                }
            }

        }

        /// <summary>
        /// The 'ConcreteHandler' class
        /// </summary>
        public class Engineer : Employee
        {
            public Engineer()
            {
                this.onLeaveAplied +=Engineer_onLeaveAplied;
            }

            private void Engineer_onLeaveAplied(int requestedDays)
            {
                if (NextApprover !=null)
                {
                    NextApprover.ApplyLeave(requestedDays);
                }
            }

            public override void ApproveLeave(int requestedDays)
            {
                Console.WriteLine(@"Engineer does not have approve permission.");
            }
        }

        /// <summary>
        /// The 'ConcreteHandler' Class
        /// </summary>
        public class ProgramManager : Employee
        {
            public ProgramManager()
            {
                    this.onLeaveAplied +=ProgramManager_onLeaveAplied;
            }

            private void ProgramManager_onLeaveAplied(int requestedDays)
            {
                ApproveLeave(requestedDays);
                if (NextApprover !=null)
                {
                    NextApprover.ApplyLeave(requestedDays);
                }
            }

            //if we can process lets show the output
            public override void ApproveLeave(int requestedDays)
            {
                Console.WriteLine(@"EmployeeId: {0} Requested Days {1} Approve: {2}", this.EmployeeId, requestedDays, "ProgramManager");
            }
        }

        /// <summary>
        /// The 'ConcreteHandler' Class
        /// </summary>
        public class HR : Employee
        {
            public HR()
            {
                this.onLeaveAplied +=HR_onLeaveAplied;
            }

            private void HR_onLeaveAplied(int requestedDays)
            {
                ApproveLeave(requestedDays);
                if (NextApprover != null) NextApprover.ApplyLeave(requestedDays);
            }

            // if we can process lets show the output
            public override void ApproveLeave(int requestedDays)
            {
                Console.WriteLine(@"EmployeeId: {0} Requested Days {1} Approve: {2}", this.EmployeeId, requestedDays, "HR");
            }
        }

        class Program
        {
            static void Main(string[] args)
            {

                Engineer engineer = new Engineer();
                ProgramManager pManager = new ProgramManager();
                HR hr = new HR();


                //workFlow u oluşturuyoruz

                engineer.NextApprover = pManager;
                pManager.NextApprover = hr;
                engineer.ApplyLeave(3);
                Console.ReadKey();
            }
        }
    }

    22 Nisan 2016 Cuma 14:34

Tüm Yanıtlar

  • Ürün aktifliği diye bir kolon koy. True yap onaylanınca.



    -

    20 Nisan 2016 Çarşamba 13:54
  • Tasarım desenlerinden chain of responsibility (sorumluluk zinciri) araştırmanı tavsiye ediyorum. Ayrıca örnek kod da paylaşayım benim işime yaramıştı.

    namespace COR000
    {

        /// <summary>
        /// The 'Handler' abstract class
        /// </summary>
        ///
        public abstract class Employee 
        {
            public Guid EmployeeId { get; set; }
            public int LeaveDays { get; set; }
            //approve edecek bir sonraki kişi
            public Employee NextApprover { get; set; }

            public Employee()
            {
                EmployeeId = Guid.NewGuid();
                LeaveDays = 5;
            }
            //Eventleri tanımlayalım
            public delegate void OnLeaveApplied(int requestedDays);
            public event OnLeaveApplied onLeaveAplied = null;

            public abstract void ApproveLeave(int requestedDays);
            //using this we can apply for leave
            public void ApplyLeave(int requestedDays) {

                if (onLeaveAplied !=null)
                {
                    onLeaveAplied(requestedDays);
                    
                }
            }

        }

        /// <summary>
        /// The 'ConcreteHandler' class
        /// </summary>
        public class Engineer : Employee
        {
            public Engineer()
            {
                this.onLeaveAplied +=Engineer_onLeaveAplied;
            }

            private void Engineer_onLeaveAplied(int requestedDays)
            {
                if (NextApprover !=null)
                {
                    NextApprover.ApplyLeave(requestedDays);
                }
            }

            public override void ApproveLeave(int requestedDays)
            {
                Console.WriteLine(@"Engineer does not have approve permission.");
            }
        }

        /// <summary>
        /// The 'ConcreteHandler' Class
        /// </summary>
        public class ProgramManager : Employee
        {
            public ProgramManager()
            {
                    this.onLeaveAplied +=ProgramManager_onLeaveAplied;
            }

            private void ProgramManager_onLeaveAplied(int requestedDays)
            {
                ApproveLeave(requestedDays);
                if (NextApprover !=null)
                {
                    NextApprover.ApplyLeave(requestedDays);
                }
            }

            //if we can process lets show the output
            public override void ApproveLeave(int requestedDays)
            {
                Console.WriteLine(@"EmployeeId: {0} Requested Days {1} Approve: {2}", this.EmployeeId, requestedDays, "ProgramManager");
            }
        }

        /// <summary>
        /// The 'ConcreteHandler' Class
        /// </summary>
        public class HR : Employee
        {
            public HR()
            {
                this.onLeaveAplied +=HR_onLeaveAplied;
            }

            private void HR_onLeaveAplied(int requestedDays)
            {
                ApproveLeave(requestedDays);
                if (NextApprover != null) NextApprover.ApplyLeave(requestedDays);
            }

            // if we can process lets show the output
            public override void ApproveLeave(int requestedDays)
            {
                Console.WriteLine(@"EmployeeId: {0} Requested Days {1} Approve: {2}", this.EmployeeId, requestedDays, "HR");
            }
        }

        class Program
        {
            static void Main(string[] args)
            {

                Engineer engineer = new Engineer();
                ProgramManager pManager = new ProgramManager();
                HR hr = new HR();


                //workFlow u oluşturuyoruz

                engineer.NextApprover = pManager;
                pManager.NextApprover = hr;
                engineer.ApplyLeave(3);
                Console.ReadKey();
            }
        }
    }

    22 Nisan 2016 Cuma 14:34
  • teşekkür ederim paylaşımız için araştıracağım ve kodu inceleyeceğim..
    29 Nisan 2016 Cuma 06:51
  • Ürün aktifliği diye bir kolon koy. True yap onaylanınca.



    -

    Oda benim aklıma geldi.  örn: depoda 3 adet var , 5 adet daha geldi. ben true yaptım kolunu toplaması gerek.

    Onaylanıp toplayana kadar depoda 3 adet gözükmesi gerekli.

    29 Nisan 2016 Cuma 06:57
  • Benzer bir uygulama yapmıştım ben şöyle yaptım belki işine yarar

    öncelikle sepet veya siparişler adında bir tablo oluşturup aynı urunId veya Ürün İsmi neyse bilgileri ilk stok girişinde buraya kaydettim ek olarakta durum isimde bir kolon daha ekleyip buraya her ürün kaydedildiğinde Beklemede şeklinde string gönderdim onay ekranında kullanıcı eğer onaylarsa önce bu sepet tablosunda durumu Onaylandı şeklinde update edip yine siparişler bölümüne Update Trigger atarak eğer durum Onaylandı olursa stok tablosuna aktar demiştim sende seçime göre stok listesine ister ekleme istersen eğer ürün var ve aynı birim ise (kg,litre vb)  miktar üzerine ilave ettirebilirsin  bununda en kolay yolu trigger kullanmak

    29 Nisan 2016 Cuma 07:45
  • Toplama onaylanmayanları dahil etmezsen yine 3 bulur. Örneğin 

    Tarih               Adet             Durum

    01.04.2016   3 adet   Onay = 1

    01.04.2016   5 adet   Onay = 0

    gibi bir durum varsa 

    Select Sum(adet) From Urunler Where Durum = 1

    gibi bir sorgu yeterli olur.

    gibi

    29 Nisan 2016 Cuma 08:42